表的约束
not null 非空约束
create table t1(id int not null, name char(12)); # 默认插入0
create table t2(id int, name char(12) not null); # 默认插入空字符串
default 默认值
create table t3(id int, name char(12), sex enum('male', 'female') default 'male');
非空约束和默认值
create table t3(id int not null, name char(12) not null, sex enum('male', 'female') not null default 'male');
unique 唯一约束(不能重复)
create table t4(id int unique, name char(12));
联合唯一约束
create table t5(family char(12), name char(12), unique(family,name));
唯一+非空 id name
create table t6(id int not null unique, name char(12) not null unique);
pri 是怎么产生的?第一个被设置了非空+唯一约束会被定义成primary key
主键在整张表中只能有一个
主键
create table t7(id int primary key, name char(12) not null unique);
create table t7(family char(12),name char(12),primary key(family,name)); # 约束各自不能为空 且联合唯一 还占用了整张表的主键
对某一列设置自增 auto_increment(自动增加,not null 约束)
create table t6(id int auto_increment, name char(12)); # 报错 必须依赖主键
create table t8(id int unique auto_increment,name char(12));
create table t8(id int unique auto_increment,name char(12)) auto_increment = 1000; # 设置auto_increment初始值
delete from t9; # 清空表数据但不能重置auto_incre
truncate table t9; # 清空表并且重置auto_increment值
所有的操作都无法改变auto_increment的自动计数,但是我们也没有必要去修改
修改auto_increment的值为n
alter table 表名 auto_increment = n
外键
没有建立外键
create table stu(id int, name char(12), class_id int);
create table class(cid int, cname char(12));
insert into stu values(1,'日魔',1),(2,'炮手',1);
insert into class values(1,'py27'),(2,'py28');
select * from stu,class where class id = cid;
delete from stu where id = 1;
delete from class where cid = 1;
建立外键
create table class2(cid int unique, cname char(12));
create table stu2(id int, name char(12), class_id int, foregin key(class_id) reference class2(cid));
insert into class2 values(1,'py');
insert into stu2 values(1,'rimo',1),(2,'paoshou',1);
delete from class2 where cid = 1;
insert into class2 values(2,'py28');
update class2 set cid = 1 where cid = 2; # 不能够修改
stu3 class3 级联更新
create table class3(cid int primary key, cname char(12));
create table stu3(id int,name char(12),class_id int,foreign key(class_id) references class3(cid) on update cascade);
insert into class3 values(1,'py27');
insert into stu3 values (1,'rimo',1),(2,'paoshou',1);
update class3 set cid = 2; 修改了class3中的cid,stu3中相关的数据也会跟着变化,是on update cascade 设置导致的