我的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 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>