数据库表的约束

表的约束

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 设置导致的


posted on 2020-03-07 21:50  we我们  阅读(232)  评论(0)    收藏  举报