唯一性约束语法:
单一属性约束
drop table if exists t_user; create table t_user( id int(4), name varchar(20) not null, email varchar(20) unique );同时约束name,和email 不能为空
drop table if exists t_user; create table t_user( id int(4), name varchar(20) not null UNIQUE, email varchar(20) unique );此方法无法同时约束两个条件
drop table if exists t_user; create table t_user( id int(4), name varchar(20) not null, email varchar(20) , unique(name,email) ); 例如: INSERT INTO t_user(id,name,email) values (1,'lis','wsi@123.com'); INSERT INTO t_user(id,name,email) values (2,'lis','wsi@123.com'); 同时执行上面两条语句不会成功,但是 INSERT INTO t_user(id,name,email) values (1,'li','wsi@123.com'); INSERT INTO t_user(id,name,email) values (2,'lis','wsi@123.com'); 或 INSERT INTO t_user(id,name,email) values (1,'lis','wsi@123.com'); INSERT INTO t_user(id,name,email) values (2,'lis','si@123.com'); 会执行成功给唯一约束条件起别名,方便删除等一些其他操作
drop table if exists t_user; create table t_user( id int(4), name varchar(20) not null, email varchar(20) , CONSTRAINT t_user_name_email_unique unique(name,email) );添加主键primary key的字段既不能重复也不能为空,效果和 not null unique 相同,但本质不同,主键不仅有not null unique作用,而且主键字段还会自动添加索引“索引—index”。
同时使用主键和外键
drop table if exists t_student; create table t_student( sno int(4) PRIMARY KEY , sname varchar(20), classno int(5) , CONSTRAINT t_student_classno_fk foreign key(classno) references t_class(cno) ); drop table if exists t_class; create table t_class( cno int(5) primary key , cname varchar(25) ); insert into t_class(cno,cname) values (100,'高三一班'); insert into t_class(cno,cname) values (200,'高三二班'); insert into t_class(cno,cname) values (300,'高三三班'); //可以运行 insert into t_student(sname,classno) values ('张三',100); insert into t_student(sname,classno) values ('李四',200); insert into t_student(sname,classno) values ('王五',300); //不可以运行,因为外键约束条件,在t_class表中没有400所以无法进行插入数据 insert into t_student(sname,classno) values ('xiaoer',400);添加外键
alter table t_student add constraint t_student_classno_fk foreign key(classno) references t_class(cno) on delete cascade;删除外键
alter table t_student drop foreign key t_student_classno_fk;更新
alter table t_student add constraint t_student_classno_fk foreign key(classno) references t_class(cno) on update cascade;添加索引
create index t_student_sanme_index on t_student(sname);删除索引
drop index t_student_sanme_index on t_student;