MySQL的约束、查询、函数
1. Drop、Truncate、Delete的区别
- 执行速度
Drop > Truncate > Delete - 类型
Drop与Truncate属于DDL,不支持回滚
Delete属于DML,支持回滚 - 使用场景
Drop用于删除表,表的内存空间的回收
Truncate用于删除表内的全部数据,其真正的执行是删除了原表,同时创建了一个新的同名同字段的空表,即表的内存空间回到了初始化时的空间
Delete用于删除表内的全部数据或指定数据,其真正的执行是遍历字段内的数据进行条件判断的执行 - 实现
drop table tbname;-- 删除表
truncate table tbname;-- 删除表内全部数据
delete from table;//删除表内全部数据
delete from table tbname
where condition;//删除表内符合条件的数据
2. 外键约束
外键约束用于实现保证级联操作的数据完整性
2.1 实现
alter table tbname1
add constraint fk_tbname1_tbname2
foreign key (field1)
references tbname2(field2);-- 将tbname1中field1与tbnaem2中field2相关联
alter table tbname1
drop foreign key fk_tbname1_tbname2;-- 移除外键约束
2.2 外键删改策略
当需要删改外键时(如需要删该tbname2中field2),因为存在外键约束,所以被外键约束的field会发生一定的变化,sql提供了三种策略实现变化
- 不允许(默认):外键删改时会报错
- 级联策略:外键删改,相关联的field发生相应的变化(同样被删除或被修改)
alter table tbname1
add constraint fk_tbname1_tbname2
foreign key (field1)
references tbname2(field2)
on delete cascade
on update cascade;
- 置空策略:外键删改,相关联的field被置空(值变成null)
alter table tbname1
add constraint fk_tbname1_tbname2
foreign key (field1)
references tbname2(field2)
on delete set null
on update set null;
3. 简单基本查询
3.1 全部字段数据查询
select * from tbname;
3.2 指定字段数据查询
select field from tbname;
3.3 指定字段数据查询并重命名
select field newname from tbname;
3.4 字段数据查询并指定排序
select * from tbname order by field asc;-- 默认升序
select * from tbname order by field desc;-- 显式降序
3.5 简单运算字段数据查询
select field1+field2 from tbname;-- 加减乘除皆可,但需要被指定的字段数据支持
3.6 去除重复字段数据查询
select distinct field from tbname;
4. where条件查询
4.1 实现
select * from tbname where condition;
4.2 条件符号
- 判断数值用 =
- 判断空用 is
- 不等于用 != 或 <>
- 在…之间用 value1 and value2 或 value1 && value2 或 between value1 and value2
- 或用 or 或 || 或 in(value1 value2)
5. 模糊查询
5.1 实现
select * from tbname field like '';
5.2 实例
select * from tbname field like'k%';-- 查询以k开头的field数据
select * from tbname field like'%k';-- 查询以k结束的field数据
select * from tbname field like'%k%';-- 查询包含k的field数据
select * from tbname field like'k%k';-- 查询以k开头与结尾的field数据
select * from tbname field like'____';-- 查询包含4个字符的field数据
select * from tbname field like'%\_%';-- 查询包含_的field数据
select * from tbname field like'%\\\\%';-- 查询包含\的field数据
6. 快速建表及获取数据
- 创建一个与tbname2拥有形同字段,但空数据的表
create table tbname1
select * from tbname2
where 1=2;
- 在tbname1中插入tbname2指定字段的数据
insert into tbname1
select file from tbname2;
- 插入多条数据
insert into tbname values(value1,value2...),(value11,value22...);
7. 单行函数
7.1 字符串函数
7.2 数值函数
7.3 日期与时间函数
7.4 流程函数
7.5 JSON函数
7.6 其它函数
8. 简单多行函数
9. 分组函数
9.1 实现顺序
select field
from tbname
where condition
group by field
having condition
order by field;