zoukankan      html  css  js  c++  java
  • 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)

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

  • 相关阅读:
    Roce ofed 环境搭建与测试
    Ubuntu 1804 搭建NFS服务器
    Redhat 8.0.0 安装与网络配置
    Centos 8.1 安装与网络配置
    SUSE 15.1 系统安装
    VSpare ESXi 7.0 基本使用(模板、iso、SRIOV)
    VSpare ESXi 7.0 服务器安装
    open SUSE leap 15.1 安装图解
    KVM虚拟机网卡连接网桥
    GitHub Action一键部署配置,值得拥有
  • 原文地址:https://www.cnblogs.com/zpcbk/p/6502846.html
Copyright © 2011-2022 走看看