1.完整性约束
not null 和 default
unique
单列唯一:仅仅给一列设置unique
多列唯一:给多列设置唯一
联合唯一:unique(id,name);
主键:primary key 化学反应 not null + unique
自增长:auto_increment
create table t1(id int primary key auto_increment unsigned,name varchar(20) not null);
insert into t1(name) values("zhang");
insert into t1(id,name) values(3,"qing");
清空表区分delete和truncate的区别:
delete from t1;如果有自增id,新增的数据,仍然是以删除前的最后一个作为起始。
truncate from t1;数据量大,删除速度比上一个快,且直接从零开始。
作用:保证数据的完整性和一致性;
2.完整性约束的补充:
foreign key 外键 建立两张表之间的联系
dep:被关联表,主表
create table dep( id int primary key auto_increment, name varchar(20) not null, des varchar(30) not null ); create table dep2( id int primary key auto_increment, name varchar(20) not null, des varchar(30) not null );
emp:关联表,从表
create table emp( eid int primary key auto_increment, name char(10) not null, age int not null, dep_id int not null, dep2_id int not null, constraint fk_dep foreign key(dep_id) references dep(id) on delete cascade # 同步删除 on update cascade, # 同步更新 constraint fk_dep2 foreign key(dep2_id) references dep2(id) on delete cascade # 同步删除 on update cascade # 同步更新 );
3.外键的变种:
1.先站在左表的角度,左表的多条记录对应右表的一条记录 成立
2.先站在右表的角度,右表的多条记录对应左表的一条记录 成立
多对一或着一对多 1和2条件有一个成立
多对多 1和2都成立 通过建立第三张表 来建立多对多的关系
一对一 1和2都不成立,给一个表的fk的字段设置约束unique
多对多:
使用第三张表,建立多对多的关系
create table book( id int primary key auto_increment, name varchar(20) ); create table author( id int primary key auto_increment, name varchar(20) ); create table autho_book( id int primary key auto_increment, book_id int not null, author_id int not null, constraint fk_book foreign key(book_id) references book(id) on delete cascade on update cascade, constraint fk_author foreign key(author_id) references author(id) on delete cascade on update cascade ); insert into book(name) values ('九阳神功'), ('九阴真经'), ('九阴白骨爪'), ('独孤九剑'), ('降龙十巴掌'), ('葵花宝典'); insert into autho_book(author_id,book_id) values (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (2,1), (2,6), (3,4), (3,5), (3,6), (4,1) ;
4.单表查询
1.单表查询的语法
select 字段1,字段2..... from 表名;
where 条件
group by field
having 筛选
order by field
limit 限制条数
2.关键字的执行优先级****
from
where
group by
having
select
distinct
order by
limit
1.找到表:from
2.拿着where指定的约束条件,去文件/表中取出一条条记录
3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
4.将分组的结果进行having过滤
5.执行select
6.去重
7.将结果按条件排序:order by
8.限制结果的显示条数