1. 约束,非空
唯一性约束语法:
单一属性约束
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)
);
2. 主键,外键
添加主键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);
3. 级联更新,级联删除
添加外键
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;
4. 添加删除索引
添加索引
create index t_student_sanme_index on t_student(sname);
删除索引
drop index t_student_sanme_index on t_student;