我的Mysql笔记整理1
原学习笔记CSDN链接:https://download.csdn.net/download/CCCC18287832105/14815663
我的笔记整理CSDN链接:https://download.csdn.net/download/CCCC18287832105/14816992
如果想看到清晰格式请查看腾讯微云或CSDN链接
MySQL常用命令
show databases
use 库
show tables
show tables from 库
create table 表();
desc 表----查看结构
show index from 查看表索引
DQL语言—查询
1.基础查询:select … from … 【注意结果是一个虚拟表格】
select * from ... 【使用*不足:显示顺序不够灵活】
起别名:【如果名称里有歧义的地方用引号】
去重:【select distinct】
+: 【通常情况下会自动转换然后运算,如果失败则会转换为0,如果一方为null则结果一定null】
【通常字符串拼接使用:concat(字符串1,字符串2)】
2.条件查询:select … from …where…
按条件表达式筛选:【> 、<、=、!=或<>、>=、<=】
按逻辑表达式筛选:【&& 、||、 ! and 、or、 not】
模糊查询 【like、between and 、 in 、is null】
【like-----%任意多个(包含0个) ----_任意单个字符】
【 ----- \转义即\后面的保持原样----escape '自定义转义字符'】
【between and----包含临界值---最好区间值不换位置】
【in-----in(不支持通配符)------in(列表的值类型必须兼容或一致)】
【is not------通常用于判断null值】
【补充:is null仅仅判断null <=>可判断null也可以判断数值】
3.排序查询:select … from …where…order by 排序列表 asc|desc
默认升序,可以不写asc
order by也支持别名 ,order by 后面也可以是函数
4.函数
单行函数:传入一个返回一个----函数功能看原pdf
1.字符函数【length、concat、substr(索引1开始)、instr、trim、upper、lower、lpad、rpad、replace】
2.数学函数【round、ceil、floor、truncate、mod】
3.日期函数【now、 curdate、curtime、year、month、monthname、day、
hour、minute、second、str_to_date、date_format】
4.控制函数【if、case】
5.其他函数【version、database、user】
分组函数:传入多个返回一个
1.sum、avg【处理数值型】
2.max、min、count【任何类型】
3.可以搭配distinct【函数(distinct 字段)】
4.count(*) 使用多【效率:count ( * ) > count(1)>count("字段")】
【使用分组函数会自动忽略掉null】
【分组函数通常和分组函数一同查询,单独使用时候没意义,即select 分组函数 group by后字段 from where ...】
5.分组查询:select … from …where…group by…order by
【通常select 后有 group by后字段】
【分组前条件筛选where 分组后条件筛选having(在第一次筛选情况下再次筛选)】
【如果是分组函数最好能放在having后】
【group by后面可以放函数,如果按多个字段可以哟ing,号隔开】
6.多表查询:select … from …where 两表连接条件
【笛卡尔集:主表每一项都对应从表的所有项----添加连接条件就能解决笛卡尔集问题】
sql192:仅仅支持内连接
内连接:
等值连接:where 等值条件... and ... group by.... order by...
【三表连接:where 12的表等值条件 and 23表的等值条件】
【多表连接结果为交集部分,n表需要n-1个连接条件】
非等值连接:where ...between.. and ...and...
自连接:from...自己的表 别名1 ,自己的表 别名2 where ...别名1.xx=别名2.xx
【只涉及自己的表,需要找两遍,例如:先找到自己的id..再找id对应的属性】
sql99:内连接、外连接(左外连接、右外连接)、交叉连接
内连接:inner可以省略
等值连接:select ...from 表1 inner表2 on 连接条件 where 条件
【三表连接:注意有顺序最好先的两个表有条件连接到第三表,n-1个连接条件
from 表1 inner join 表2 on 表1表2连接条件 inner join 表3 on 表3与表1/表2连接】
非等值连接: select ...from 表1 inner表2 on ...between and ...
自连接:select ...from 表1 别名1inner表2 别名2 on 别名1.xx=别名2.xx
外连接:【适用于一个表有另一个表没有的记录,如果没有匹配的显示null,
外连接=内连接+主表有从表没有的】
左外连接:from 表1 left outer join 表2 on 连接条件 where..
右外连接:from 表1 right outer join 表2 on 连接条件 where...
全外连接:from 表1 full outer join 表2 on 连接条件
【内连接结果+表1中没有+表2中没有的】
交叉连接:就是笛卡尔连接
sql192与sql99(支持功能多,可读性高,推荐使用)
【为表起别名:起了别名原理的表名就不能使用了】
7.子查询(镶嵌查询)—子查询优先于主查询
按子查询出现位置:
select:标量子查询
from:表子查询【必须起别名】
where 或having:
标量子查询(单行子查询)(> < > = < = <>)
列子查询(多行子查询)(in any some all)
行子查询(where xxx=(....) and xxxx=(....))
【将多个字段当成一行用】
【如果两个都是=可以省略】
exists:表子查询
【exists比较特别,先去外查询找到某字段然后再去根据字段去过滤】
【where exists(.....),也可以用in替换,表示是否存在,exists里面结果是否有值 boolean类型 1 0】
按结果集行列数不同:
标量子查询(结果只有一行一列----一个值)(> < > = < = <>)
列子查询(结果一列多行)(in any some all)
行子查询(结果一行多列)
表子查询(结果多行多列)
8.分页查询limit (起始索引0开始) 显示个数
【limit (page-1) *size ,size】
9.联合查询:查询1 union 查询2
【通常用于多个表没有直接连接关系,但查询信息一致时】
【多条查询语句没一列类型和顺序最好一致,union 默认曲中,使用union alll可以不去重】
DML语言—操作
1.插入
方式一:insert into 表(列...) values(值...)【空的字段null或不写】
方式二:insert into 表 set 字段=xx, 字段2=xx
两种方式比较:方式一支持子查询,方式二不支持
2.修改
修改单表记录:update 表 set 字段=xx
修改多表记录:92只支持内联
sql92:update 表1,表2 set 字段=xx
sql99:update 表1 inner join 表2 on set 字段=xx
3.删除
方式一:delete
单表删除:delete from 表 where
多表删除:
sql92:delete 表1,表2 from 表1,表2 where
sql99:delete 表1,表2 from 表1 inner join表2 where
方式二:truncate table 表名(全部删除)
方式一方式二比较:
truncate效率高,truncate不能回滚
delete依然受自增长影响,truncate不受自增长影响,
DDL语言—定义
1.库
库创建:create database if not exists 库名
库修改:alter database 库名character set gbk 基本上不修改,要修改只改字符集
库删除:drop database if exists 库名
2.表
表创建:create table 表名()
表修改:alter table 表名 add|drop|modify|change column 列名 约束
alter table 表名 drop column <u>if exists</u> 列名
表删除:drop table if exists 表名
表复制:create table 复制的表名 like 被复制的表---仅仅复制结构
create table 复制的表名 select * from 被复制的表----结构+数据
create table 复制的表名 select 字段1,字段2 from 被复制的表 where 条件-----只复制部分数据
create table 复制的表名 select 字段1,字段2 from 被复制的表 where 1=2 【或者直接写0】----仅仅复制某些
数据,这里仅仅复制字段1,字段2
通用写法:
drop databse if exists 旧库名
create database 新库名
drop table if exists 旧库名
create table 表名()
数据类型
1.整形:tinyint、smallint、mediumint、int/integer、bigint
1 2 3 4 8
【默认是有符号位,设置无符号位unsigned】
【有默认长度,设置长度eg:int(7) zerofull—不够会自动补0】
2.小数:
浮点型:float(整数+小数位,小数位) 、double 参数都可以省略
定点型:dec、decimal(默认10,0)----定点型精度更高,通常用于货币运算等高精度的
3.字符型:
较短文本:char varchar
【char 固定长度,耗空间,效率高;varchar(不可省略) 可变长度,节省空间,效率低】
较长文本:text blob(较大二进制)
其他:binary、varbinary、enum(保存枚举)、set(用于保存集合)
【枚举名 enum('枚举参数1','枚举参数2','枚举参数3'),
当我们插入数据时只有枚举里定义过的可以成功,不区分大小写】
【名 set('参数1','参数2','参数3')----和枚举类似但set可以设置多个---不区分大小写】
4.日期型:
date:只保存日期
time:只保存时间
year:只保存年
datetime:保存日期+时间----8字节-----不受时区影响
timestamp:保存日期+时间---4字节-----受时区影响
【show variablees like 'time_zone'---查看当前时区】
【set time_zone='+9:00'------设置时区】
约束–保证数据可靠性
1.六大约束:not null、default默认、primary key 、unique唯一、check检查约束、
foreign key (用于限制两个表关系,写在从表里,用于用于主表某列数据)
2.添加约束【通常,外键使用表级约束,其他都使用列级约束】
列级约束:六大约束都支持,但外键没效果
表级约束:(写在外面)非空,默认不支持,其它都支持
【constraint 自定义约束名 约束 (字段)】
【外键:constraint 自定义约束名 约束 (字段1) references 字段1(另一个表的的字段)】
【外键:一个表可以添加多个外键】
【自定义约束名:外键最好,自定义名_本表_外表,主键哪怕起了约束名也无效】
3.修改约束
<1>修改添加约束:
列级约束:alter table 表名 modify column 字段名 字段类型 新约束
表级约束:alter table 表名 add constraint 自定义约束名 约束类型(字段名)
【外键比较特殊:alter table 表名 add constraint 自定义约束名 约束类型(字段1) referencese 字 段1(另一个表的字段--key )】
<2>修改表时删除约束:和添加差不多,但可以使用drop
1.alter table 表名 modify column 字段名 字段类型 新约束
2.alter table 表名 drop 约束类型 字段 字段类型
【drop主键、唯一的话可以不写字段,外键字段类型也可以不写】
<3>主键和唯一对比:
主键:不允许为空,一个表里只有一个,允许组合(字段1,字段2)
外键:可以为空,可以多个,不允许组合
<4>外键特点:
1.在从表设置外键
2.最好和主表里类型兼容
3.主表关联列必须是一个key
4.讲顺序,先插入主表在插入从表,删除时候先删从表再删除主表
标识列auto_increment
创建时修改标识列:
【标识列搭配key一起用,一个表至多一个标识列,只能是数值类型的标识列】
【修改步长:通常不修改 set auto_increment_increment=3】
修改时设置标识列:
alter table 表名 modify column 字段 类型 <u>primary key auto_increment</u>
删除表时设置标识列:相当于再修改
alter table 表名 modify column 字段 类型
版权声明:本文为CCCC18287832105原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。