MySql的主键和外键、索引、约束、非空的使用方法

it2022-05-05  157

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;

最新回复(0)