• mysql数据库


    mysql笔记

    一,补充

    cd ;dos窗口查看文件夹,盘与盘之间不需要cd

    has a;生命周期,拥有,自己的

    use e;使用,传进来的

    and;和

    is e;是

    byte ;+127——-128;127+1取返=-128;

    ip

    本机ip;127.0.0.1

    mysql --version;命令窗口查询mysql版本(管理员运行命令窗口)

    二,mysql基础

    1,数据库;

    1,储存数据以及数据结构的厂库。(db);

    2,数据库是独立;

    2,数据库是用来管理,查询,储存数据的;

    1,实体;表名,按照对象来划分

    2,属性;字段

    3,数据库种类;关系型,非关系型,层次型,网状型

    3,编码设置;

    gbk;中日韩语言

    gb1312;中文

    utf8;大型编码;

    4,默认引擎;

    INNODB;默认的

    数据表的引擎一般都要设成INNODB

    5,常用的一些数据库

    sqlserver ,access是微软的数据库

    oracle,mysql,java 都是oracle公司的

    dbz 是IMB公司的

    sybase 是sybase公司的;

    三,DDL;数据定义语句;设计语句

    1,基本命令

    1,登录;mysql -h localhost -uroot -p

    2,退出;exit

    3,查看当前时间日期;select now();

    4,当前日期;select curdate();

    5,当前时间;select curtime();

    6,打印版本信息;select version();

    7,查看当前用户;select user();

    8,启动mysql后台服务(管理员运行命令窗口);

    net start mysql;

    9,关闭mysql后台服务(管理员运行命令窗口);

    net stop mysql;

    2,操作库

    1,查看数据库;show databases;

    2,创建数据库;create database 库名 字符集;

    3;删除数据库;drop database 库名;

    3,修改数据库密码账户登录密码

    1SET PASSWORD命令

    set password for 用户名@localhost = password('新密码'); 

    2,用mysqladmin

    mysqladmin -u用户名 -p旧密码 password 新密码 

    3,用UPDATE直接编辑user表

    mysql> use mysql; 

    mysql> update user set password=password('123') where

    user='root' and host='localhost'; 

    mysql> flush privileges; 

    4,在忘记root密码的时候,可以这样

    (1), 关闭正在运行的MySQL服务。 

    (2), 打开DOS窗口,转到mysqlin目录。 

    (3),输入mysqld --skip-grant-tables 回车。

    --skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。 

    (4),再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),

    转到mysqlin目录。 

    (5),输入mysql回车,如果成功,将出现MySQL提示符 >。 

    (6),连接权限数据库: use mysql; 。 

    (7), 改密码:update user set password=password("123") where user="root";

    (别忘了最后加分号)  

    (8), 刷新权限(必须步骤):flush privileges; 。 

    (9), 退出 quit。 

    (10), 注销系统,再进入,使用用户名root和刚才设置的新密码123登录。

    四,DML;数据操作语句;增删改

    1,表的增删改查

    1,进入库;

    use 库名称;

    2,创建表;

    create table student(表结构 类型,表结构 类型);

    5,删除表;

    drop table 表名称

    6,修改表名称;

    alter table 表名称 rename 新表名称;

    7,查看表;

    show tables;

    9,查看新增表的正规写法;

    show create table 表名称;

    2,字段增删改;

    1,添加字段;

    alter table 字段名称 add 定义列;

    2,修改字段;

    alter table 表名称 change 旧字段名称 新字段名 类型;

    3, 删除字段;

    alter table 表名称 字段名;

    4,查看字段结构;

    desc 表名称;

    3,添加数据;

    1,增加对应数据;

    insert into 表名称(字段1,字段2........)values('j138',"红瓦寺".......)选择插入某些列;

    2,增加某行数据

    insert into classes values(null,'j139',"红瓦寺") 插入所有列,自增粘以null占位

    3,增加全部数据

    INSERT INTO t_student VALUES

    (1,'张三',20,'男'),

    (2,'李四',25,'男'),

    (3,'王五',19,'女')

    4, 拷贝数据

    classes表中查询所有的class_name 插入到className表中的(class_name)字段

    insert into 新表名(新字段名) select 旧字段名 from 旧表名

    insert into className(class_name) select class_name from classes

    4,修改数据;

    1,修改某行的数据

    update 表名称 ste 字段名,字段名=值 where id;

    UPDATE 表名 SET 列1=新值1,列2=新值2 WHERE 过滤条件

    2,修改某列的某个数据

    UPDATE classes set class_name=null where class_id=3

    '' 和null 一样吗?? 严格意义不一样

    5,删除数据;

    1,删除一行数据

    delete form 表名称 where id;

    2,删除年龄在18-20

    DELETE FROM t_student WHERE 年龄 BETWEEN 18 AND 20

    delete from student where age>=18 and age<=20

    6,注意

    1,t_表示表名;字段 英文 field

    2,f_表示字段名;表格 英文 table

    3,pk_表示主键;主键约束 primary key

    4,fk_表示外键;外键格式 foreign key

    5,外键名规则;FK_本表名_与之关联的表的名字

    6,有主从表的时候数据插入先插主表,在插从表;有外键的是主表

    7,sql语句中也可以用true和flas,true表示1一般代表男,flas表示0一般代表女,是int型

    五,DCL;数据控制语句;控制

    1,索引

    1,创建索引;

    create index 索引名称 on 表名称(列名称,列名称.......);一个表可以有多个索引;

    2,删除索引;

    alter table student drop index 索引名称;

    3,特点;数据的更新和索引的更新是同步的

    普通索引可以加到多列上

    4,索引的缺点;

    数据与索引的更新是同步的,如果全部数据都有索引就会降低效率;

    索引是以文件形式存在的,索引过多文件会很大;

    2,数据库的数据完整性;

    保证每行所代表的实体能互相区别,不能存两条一抹一样的

    1,主键约束(primary key)非空不能重复;一个表只能有一个主键一个主键可以有多个列

    2,唯一约束(unique)指定的列非空的不能重复

    3,非空约束(not null)指定的列不能为空;

    4,指定数据(default)指定的数据可以更改;

    5,指定有效数据(check(第一个数据 or 第二个数据格式(健名=值)))

    不是第一个数据必须是第二个数据,不能有第三个数据出现

    (在mysql中无效,支持创建但没有功能)

    6,auto_increment;主键自增长;

    3,外键

    1,创建一个表,在表中外键字段与上一个关系表绑定

    class_id int,

    CONSTRAINT 外键名 FOREIGN key(要把外键给那个字段的字段名)

    REFERENCES 关系表的表民(主键)

    CONSTRAINT FK_student_classId FOREIGN key(class_id)

    REFERENCES classes(class_id)

    2,怎么给已存在的表添加外键约束

    1,添加要连的键

    alter table 表名 add 字段 类型

    alter table test add class_id int

    2,添加CONSTRAINT

    alter table 表名 add CONSTRAINT 外键名

    FOREIGN key(要把外键给那个字段的字段名)REFERENCES 关系表的表民(主键)

    alter table test add CONSTRAINT FK_TEST_CLASSID

    FOREIGN key(class_id) REFERENCES classes(class_id)

    3,删除外键

    alter table 表名 drop FOREIGN key 外键名

    alter table test drop FOREIGN key FK_TEST_CLASSID

    4,外键命名规则

    1,一对一唯一外键关联,一对一必须保证外键唯一性,加唯一性约束

    增;主键在谁身上就先增加谁;

    删;外键在谁身上就先删谁;

    2,一对多外键必须设计在多方身上

    增;先增主表后增从表

    删;先删从表在删主表

    3,多对多,需要新建中间表来保存对应关系表,外键咋中间关系表身上

    增;先增两表,在增中间表

    删;先删中间表,再删两表

    4,注意

    1,一个外键对应一个主键,外键和外键约束是分开的,

    2,外键必须链接主键(many2one)

    3,联合主键写法;一个表只能有一个主键,但一个组键可以有多个列

    primark(第一个主键,第二个主键);

    4,主键的特性

    主键非空唯一,

    主键不能被修改,

    主键不能为不存在,

    不能被业务操作

    六,DQL;数据查询语句;查

    1,where 条件;

    1,比较符号;

    >,< ,>=, <= ,!=,(<>也表示不等于)

    2,逻辑比较

    and 并且

    or 或者

    between 下线 and 上线

    like 模式 格式;

    like “_”下划线代表单个字符

    like“1%2%3” 代表任意字符123处都可以添加关键字

    in() 只取()中的字符;(1,2,3)只能取123

    not in() 不取()中的;not;非的意思

    2,排序(order by)asc;代表升序,desc;代表降序

    order by 排序的列 asc // 永远写在最后整个查询的最后

    limit 1,3;limit 起始位置,截取长度。

    3,分组

    where后边加group by 按什么类型分组与count联合使用

    selsct count(*) from 表名 group by 分组的类型,按什么分组;

    分组后也能过滤用having分组后再来筛选,where写在分组前,having写在分组后

    分组后只能与与分组相关的结果级打印;

    4,mysql聚合函数

    1,sun();求和;

    select sun(all 求哪一列的和) from 表名称

    2,avg(); 平均值;

    select avg(all 求哪一列的平均值) from 表名称

    3,max();最大值;

    select max(all 求哪一列的最大值) from 表名称

    4,min();最小值;

    select min(all 求哪一列的最小值) from 表名称

    5,concat();字符串拼接,一般很少在mysql上使用

    concat(要拼接的数据);

    6,注意

    all;表示非空,也是mysql默认值

    *;表示全部

    distinct;表示所有非空不重复的值

    5,单表查询

    select 列 from 表 where ID=数据 order by pk_playerid desc;

    order by 列 desc;排序 desc降序,asc升序

    6,子查询

    1,在select后边添加子查询

    select ( select 列名 from表1) from 表1 ;

    只能查一列,多行;不常用,效率低

    2,在from后边添加子查询

    select 某列 from ( select 列名 from表1) ;

    把查出来的结果当成一张表,再查这张表的数据;不常用,效率低

    3,在where后边添加子查询

    select 列 from 表 where 列=(select 列 from 表1 where 列=数据) ;

    只能查单行单列,用in时可以查单列多行,有 in 就有 not in

    select 列 from 表 where 列=all (select 列 from 表1 where 列=数据);

    需要和子查询的结果和某列的结果逐一比较后相等则打印

    select 列 from 表 where 列=any (select 列 from 表1where 列=数据);

    只要满足一个就可以打印,不能等于它本身

    select 列 from 表 where exsits (select 列 from 表1where 列=数据);

    如果数据存在则打印,不能等于它本身; not exsits;相反,如果数据不存在则打印

    4,子查询,要消耗更长的执行时间,当数据量增加时,执行时间会急剧加长,

    7,链接查询查,

    1,两张表的数据;通过多张表共有的字段查找多张表共有的并集,

    共有字段必须要两个表中都有才能找到

    select * from 表名1,表名2 where 外键ID=主键ID and 某一行条的件;

    2,三张表查询例子

    select  a.uid,a.uname,a.upsw

     from table1 a,table2 b, table3 c 

    where a.sems_role_rid=b.rid and a.udeptid=c.deptid

    8,外链接查询,

    1,查两张表的数据;select * from 表1 left join 表2 on 外键ID=主键ID where 列="数据"

    2,三张表查询例子(left join  on 外键拼接)

    select * from t_team

    left join t_player on pk_teamid=fk_teamid

    left join t_group on pk_teamid=fk_groupid

    where f_teamName="法国队"

    9,注意

    1,is;是“是”的意思(is null)=是空

    2,as;取别名;mysq中as可以被省略

    3,not;非空

    4,select;投影,投影后做的操作都不会改变物理数据;

    5,select * from 表名

    *代表列的字段名名多个用“,”隔开,直接用*表示查询全部;

    一般很少用*因为效率低;

    6,distinct;去掉重复位置,去重后不能和其他数据一起显示,

    七,数据库类型;

    1,整数

    tinyint;1个字节;存放128-127范围的整数;有符号

    比如: 年纪

    smalint; 2个字节;存放-32000到 +32000范围的整数;

    比如: 年纪,数量

    int ;4个字节,存放-2000000000 到 +2000000000 范围的整数;

    例如: 距离

    bigint;8个字节;储存不能用smalint 或 int描述的超大整数。

    例如: 科学/数学数据

    2,浮点

    afloat;4字节 单精度浮点型数据 存储小数数据

    例如:测量,温度

    double;8字节 双精度浮点型数据 需要双精度存储的小数数据

    例如:科学数据

    decimal(m,b);用户自定义精度的浮点型数据 (m长度,b精度)以特别高的精度存储小数数据.

    3,字符

    char(位数);固定长度的字符串 特定字符串长度(高达255字 符)

    存储通常包含预定义字符串的变量 例如: 定期航线,国家或邮编

    varchar(位数); 具有最大限制的可变长度的字符串 变量;

    实际字符串长度 (高达 255 字 符) 例如:名字,密码,短文标签

    text; 没有最大长度限制的可变长度Variable; (存放65535个字符)

    存储大型文本数据

    MEDIUMBLOB;(存放2的24次方个字符);

    enumcvall(a,b,c.......);列枚举-限定有限值

    4,时间

    year;1字节;格式YYYY;范围1901-2155

    date;3字节;格式YYYY-MM-DD;范围1000-01-9999-12-31

    timestamp;4字节;

    5,二进制大数据,二进制大对象

    1,TINYBLOB;255字节;0-255字节;

    2,BLOB;5k;0-65k;

    3,medfumblob;16m;0-16m;

    4,longblob;4g;0-4g;

    八,关系数据库的几种设计范式介绍

    1、第一范式(1NF)

    1,在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,

    不满足第一范式(1NF)的数据库就不是关系数据库。所谓第一范式(1NF)

    是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,

    即实体中的某个属性不能有多个值或者不能有重复的属性。

    2,如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,

    新实体与原实体之间为一对多关系。在第一范式(1NF)

    中表的每一行只包含一个实例的信息。

    2、第二范式(2NF)

    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,

    即满足第二范式(2NF)必须先满足第一范式(1NF)。

    第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。

    为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

    3、第三范式(3NF)

    满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)

    要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

    mysql笔记

    一,补充

    cd ;dos窗口查看文件夹,盘与盘之间不需要cd

    has a;生命周期,拥有,自己的

    use e;使用,传进来的

    and;和

    is e;是

    byte ;+127——-128;127+1取返=-128;

    ip

    本机ip;127.0.0.1

    mysql --version;命令窗口查询mysql版本(管理员运行命令窗口)

    二,mysql基础

    1,数据库;

    1,储存数据以及数据结构的厂库。(db);

    2,数据库是独立;

    2,数据库是用来管理,查询,储存数据的;

    1,实体;表名,按照对象来划分

    2,属性;字段

    3,数据库种类;关系型,非关系型,层次型,网状型

    3,编码设置;

    gbk;中日韩语言

    gb1312;中文

    utf8;大型编码;

    4,默认引擎;

    INNODB;默认的

    数据表的引擎一般都要设成INNODB

    5,常用的一些数据库

    sqlserver ,access是微软的数据库

    oracle,mysql,java 都是oracle公司的

    dbz 是IMB公司的

    sybase 是sybase公司的;

    三,DDL;数据定义语句;设计语句

    1,基本命令

    1,登录;mysql -h localhost -uroot -p

    2,退出;exit

    3,查看当前时间日期;select now();

    4,当前日期;select curdate();

    5,当前时间;select curtime();

    6,打印版本信息;select version();

    7,查看当前用户;select user();

    8,启动mysql后台服务(管理员运行命令窗口);

    net start mysql;

    9,关闭mysql后台服务(管理员运行命令窗口);

    net stop mysql;

    2,操作库

    1,查看数据库;show databases;

    2,创建数据库;create database 库名 字符集;

    3;删除数据库;drop database 库名;

    3,修改数据库密码账户登录密码

    1SET PASSWORD命令

    set password for 用户名@localhost = password('新密码'); 

    2,用mysqladmin

    mysqladmin -u用户名 -p旧密码 password 新密码 

    3,用UPDATE直接编辑user表

    mysql> use mysql; 

    mysql> update user set password=password('123') where

    user='root' and host='localhost'; 

    mysql> flush privileges; 

    4,在忘记root密码的时候,可以这样

    (1), 关闭正在运行的MySQL服务。 

    (2), 打开DOS窗口,转到mysqlin目录。 

    (3),输入mysqld --skip-grant-tables 回车。

    --skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。 

    (4),再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),

    转到mysqlin目录。 

    (5),输入mysql回车,如果成功,将出现MySQL提示符 >。 

    (6),连接权限数据库: use mysql; 。 

    (7), 改密码:update user set password=password("123") where user="root";

    (别忘了最后加分号)  

    (8), 刷新权限(必须步骤):flush privileges; 。 

    (9), 退出 quit。 

    (10), 注销系统,再进入,使用用户名root和刚才设置的新密码123登录。

    四,DML;数据操作语句;增删改

    1,表的增删改查

    1,进入库;

    use 库名称;

    2,创建表;

    create table student(表结构 类型,表结构 类型);

    5,删除表;

    drop table 表名称

    6,修改表名称;

    alter table 表名称 rename 新表名称;

    7,查看表;

    show tables;

    9,查看新增表的正规写法;

    show create table 表名称;

    2,字段增删改;

    1,添加字段;

    alter table 字段名称 add 定义列;

    2,修改字段;

    alter table 表名称 change 旧字段名称 新字段名 类型;

    3, 删除字段;

    alter table 表名称 字段名;

    4,查看字段结构;

    desc 表名称;

    3,添加数据;

    1,增加对应数据;

    insert into 表名称(字段1,字段2........)values('j138',"红瓦寺".......)选择插入某些列;

    2,增加某行数据

    insert into classes values(null,'j139',"红瓦寺") 插入所有列,自增粘以null占位

    3,增加全部数据

    INSERT INTO t_student VALUES

    (1,'张三',20,'男'),

    (2,'李四',25,'男'),

    (3,'王五',19,'女')

    4, 拷贝数据

    classes表中查询所有的class_name 插入到className表中的(class_name)字段

    insert into 新表名(新字段名) select 旧字段名 from 旧表名

    insert into className(class_name) select class_name from classes

    4,修改数据;

    1,修改某行的数据

    update 表名称 ste 字段名,字段名=值 where id;

    UPDATE 表名 SET 列1=新值1,列2=新值2 WHERE 过滤条件

    2,修改某列的某个数据

    UPDATE classes set class_name=null where class_id=3

    '' 和null 一样吗?? 严格意义不一样

    5,删除数据;

    1,删除一行数据

    delete form 表名称 where id;

    2,删除年龄在18-20

    DELETE FROM t_student WHERE 年龄 BETWEEN 18 AND 20

    delete from student where age>=18 and age<=20

    6,注意

    1,t_表示表名;字段 英文 field

    2,f_表示字段名;表格 英文 table

    3,pk_表示主键;主键约束 primary key

    4,fk_表示外键;外键格式 foreign key

    5,外键名规则;FK_本表名_与之关联的表的名字

    6,有主从表的时候数据插入先插主表,在插从表;有外键的是主表

    7,sql语句中也可以用true和flas,true表示1一般代表男,flas表示0一般代表女,是int型

    五,DCL;数据控制语句;控制

    1,索引

    1,创建索引;

    create index 索引名称 on 表名称(列名称,列名称.......);一个表可以有多个索引;

    2,删除索引;

    alter table student drop index 索引名称;

    3,特点;数据的更新和索引的更新是同步的

    普通索引可以加到多列上

    4,索引的缺点;

    数据与索引的更新是同步的,如果全部数据都有索引就会降低效率;

    索引是以文件形式存在的,索引过多文件会很大;

    2,数据库的数据完整性;

    保证每行所代表的实体能互相区别,不能存两条一抹一样的

    1,主键约束(primary key)非空不能重复;一个表只能有一个主键一个主键可以有多个列

    2,唯一约束(unique)指定的列非空的不能重复

    3,非空约束(not null)指定的列不能为空;

    4,指定数据(default)指定的数据可以更改;

    5,指定有效数据(check(第一个数据 or 第二个数据格式(健名=值)))

    不是第一个数据必须是第二个数据,不能有第三个数据出现

    (在mysql中无效,支持创建但没有功能)

    6,auto_increment;主键自增长;

    3,外键

    1,创建一个表,在表中外键字段与上一个关系表绑定

    class_id int,

    CONSTRAINT 外键名 FOREIGN key(要把外键给那个字段的字段名)

    REFERENCES 关系表的表民(主键)

    CONSTRAINT FK_student_classId FOREIGN key(class_id)

    REFERENCES classes(class_id)

    2,怎么给已存在的表添加外键约束

    1,添加要连的键

    alter table 表名 add 字段 类型

    alter table test add class_id int

    2,添加CONSTRAINT

    alter table 表名 add CONSTRAINT 外键名

    FOREIGN key(要把外键给那个字段的字段名)REFERENCES 关系表的表民(主键)

    alter table test add CONSTRAINT FK_TEST_CLASSID

    FOREIGN key(class_id) REFERENCES classes(class_id)

    3,删除外键

    alter table 表名 drop FOREIGN key 外键名

    alter table test drop FOREIGN key FK_TEST_CLASSID

    4,外键命名规则

    1,一对一唯一外键关联,一对一必须保证外键唯一性,加唯一性约束

    增;主键在谁身上就先增加谁;

    删;外键在谁身上就先删谁;

    2,一对多外键必须设计在多方身上

    增;先增主表后增从表

    删;先删从表在删主表

    3,多对多,需要新建中间表来保存对应关系表,外键咋中间关系表身上

    增;先增两表,在增中间表

    删;先删中间表,再删两表

    4,注意

    1,一个外键对应一个主键,外键和外键约束是分开的,

    2,外键必须链接主键(many2one)

    3,联合主键写法;一个表只能有一个主键,但一个组键可以有多个列

    primark(第一个主键,第二个主键);

    4,主键的特性

    主键非空唯一,

    主键不能被修改,

    主键不能为不存在,

    不能被业务操作

    六,DQL;数据查询语句;查

    1,where 条件;

    1,比较符号;

    >,< ,>=, <= ,!=,(<>也表示不等于)

    2,逻辑比较

    and 并且

    or 或者

    between 下线 and 上线

    like 模式 格式;

    like “_”下划线代表单个字符

    like“1%2%3” 代表任意字符123处都可以添加关键字

    in() 只取()中的字符;(1,2,3)只能取123

    not in() 不取()中的;not;非的意思

    2,排序(order by)asc;代表升序,desc;代表降序

    order by 排序的列 asc // 永远写在最后整个查询的最后

    limit 1,3;limit 起始位置,截取长度。

    3,分组

    where后边加group by 按什么类型分组与count联合使用

    selsct count(*) from 表名 group by 分组的类型,按什么分组;

    分组后也能过滤用having分组后再来筛选,where写在分组前,having写在分组后

    分组后只能与与分组相关的结果级打印;

    4,mysql聚合函数

    1,sun();求和;

    select sun(all 求哪一列的和) from 表名称

    2,avg(); 平均值;

    select avg(all 求哪一列的平均值) from 表名称

    3,max();最大值;

    select max(all 求哪一列的最大值) from 表名称

    4,min();最小值;

    select min(all 求哪一列的最小值) from 表名称

    5,concat();字符串拼接,一般很少在mysql上使用

    concat(要拼接的数据);

    6,注意

    all;表示非空,也是mysql默认值

    *;表示全部

    distinct;表示所有非空不重复的值

    5,单表查询

    select 列 from 表 where ID=数据 order by pk_playerid desc;

    order by 列 desc;排序 desc降序,asc升序

    6,子查询

    1,在select后边添加子查询

    select ( select 列名 from表1) from 表1 ;

    只能查一列,多行;不常用,效率低

    2,在from后边添加子查询

    select 某列 from ( select 列名 from表1) ;

    把查出来的结果当成一张表,再查这张表的数据;不常用,效率低

    3,在where后边添加子查询

    select 列 from 表 where 列=(select 列 from 表1 where 列=数据) ;

    只能查单行单列,用in时可以查单列多行,有 in 就有 not in

    select 列 from 表 where 列=all (select 列 from 表1 where 列=数据);

    需要和子查询的结果和某列的结果逐一比较后相等则打印

    select 列 from 表 where 列=any (select 列 from 表1where 列=数据);

    只要满足一个就可以打印,不能等于它本身

    select 列 from 表 where exsits (select 列 from 表1where 列=数据);

    如果数据存在则打印,不能等于它本身; not exsits;相反,如果数据不存在则打印

    4,子查询,要消耗更长的执行时间,当数据量增加时,执行时间会急剧加长,

    7,链接查询查,

    1,两张表的数据;通过多张表共有的字段查找多张表共有的并集,

    共有字段必须要两个表中都有才能找到

    select * from 表名1,表名2 where 外键ID=主键ID and 某一行条的件;

    2,三张表查询例子

    select  a.uid,a.uname,a.upsw

     from table1 a,table2 b, table3 c 

    where a.sems_role_rid=b.rid and a.udeptid=c.deptid

    8,外链接查询,

    1,查两张表的数据;select * from 表1 left join 表2 on 外键ID=主键ID where 列="数据"

    2,三张表查询例子(left join  on 外键拼接)

    select * from t_team

    left join t_player on pk_teamid=fk_teamid

    left join t_group on pk_teamid=fk_groupid

    where f_teamName="法国队"

    9,注意

    1,is;是“是”的意思(is null)=是空

    2,as;取别名;mysq中as可以被省略

    3,not;非空

    4,select;投影,投影后做的操作都不会改变物理数据;

    5,select * from 表名

    *代表列的字段名名多个用“,”隔开,直接用*表示查询全部;

    一般很少用*因为效率低;

    6,distinct;去掉重复位置,去重后不能和其他数据一起显示,

    七,数据库类型;

    1,整数

    tinyint;1个字节;存放128-127范围的整数;有符号

    比如: 年纪

    smalint; 2个字节;存放-32000到 +32000范围的整数;

    比如: 年纪,数量

    int ;4个字节,存放-2000000000 到 +2000000000 范围的整数;

    例如: 距离

    bigint;8个字节;储存不能用smalint 或 int描述的超大整数。

    例如: 科学/数学数据

    2,浮点

    afloat;4字节 单精度浮点型数据 存储小数数据

    例如:测量,温度

    double;8字节 双精度浮点型数据 需要双精度存储的小数数据

    例如:科学数据

    decimal(m,b);用户自定义精度的浮点型数据 (m长度,b精度)以特别高的精度存储小数数据.

    3,字符

    char(位数);固定长度的字符串 特定字符串长度(高达255字 符)

    存储通常包含预定义字符串的变量 例如: 定期航线,国家或邮编

    varchar(位数); 具有最大限制的可变长度的字符串 变量;

    实际字符串长度 (高达 255 字 符) 例如:名字,密码,短文标签

    text; 没有最大长度限制的可变长度Variable; (存放65535个字符)

    存储大型文本数据

    MEDIUMBLOB;(存放2的24次方个字符);

    enumcvall(a,b,c.......);列枚举-限定有限值

    4,时间

    year;1字节;格式YYYY;范围1901-2155

    date;3字节;格式YYYY-MM-DD;范围1000-01-9999-12-31

    timestamp;4字节;

    5,二进制大数据,二进制大对象

    1,TINYBLOB;255字节;0-255字节;

    2,BLOB;5k;0-65k;

    3,medfumblob;16m;0-16m;

    4,longblob;4g;0-4g;

    八,关系数据库的几种设计范式介绍

    1、第一范式(1NF)

    1,在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,

    不满足第一范式(1NF)的数据库就不是关系数据库。所谓第一范式(1NF)

    是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,

    即实体中的某个属性不能有多个值或者不能有重复的属性。

    2,如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,

    新实体与原实体之间为一对多关系。在第一范式(1NF)

    中表的每一行只包含一个实例的信息。

    2、第二范式(2NF)

    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,

    即满足第二范式(2NF)必须先满足第一范式(1NF)。

    第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。

    为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

    3、第三范式(3NF)

    满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)

    要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

  • 相关阅读:
    浅谈UML中类之间的五种关系及其在代码中的表现形式
    Understanding Liskov Substitution
    WPF捕获事件即使这个事件被标记为Handled
    [三层架构+WCF]三层架构+WCF实现TaskVision
    [.NET 三层架构(ADO.NET)+Web Service+多语言]WinForm三层架构重新实现TaskVision,外加WebService提供数据和多语言
    WPF拖动总结
    Understanding Single Responsibility and Interface Segregation
    [WinForm ADO.NET实现TaskVision][SQL Server 2008][winform datagridview总结][自定义Custom控件]Winform DataGridView各种现有column及自定义column+Winform自定义控件
    经尉迟方兄提点,终于明白为什么不是一个简单的26进制程序了
    一个有关windows服务的安装问题
  • 原文地址:https://www.cnblogs.com/zpcbk/p/6502846.html
Copyright © 2020-2023  润新知