1、常用的约束
主键约束:primary key
非空约束:not null
唯一约束:unique
外键约束:foreign key
——————————————————————————————————————
2、约束的添加与删除
主键、唯一、非空约束的添加删除都可以直接modify字段属性来完成。
主键约束:
alter table [table_name] add constraint [constraint_name] [unique| primary key|foreign key] ([column_name])
alter table person add [constraint] primary key(pid);添加主键约束
alter table person modify pname varchar(50) primary key;添加
alter table person drop primary key;删除主键约束
唯一性约束
alter table person add unique(pname); 添加唯一性约束
alter table person drop index pname;删除唯一性约束
alter table person modify pname varchar(49) unique;直接alter添加
非空约束:
alter table person modify pname varchar(45) not null;添加非空约束
alter table person modify pname varchar(45) null; 删除非空约束
外键约束:
alter table student add foreign key(lesson_id) references lesson(lesson_id) on delete cascade; 添加外键约束
alter table student drop foreign key student_ibfk_1; 删除外键约束,如无指定名称系统会自动创建约束名称
外键约束使用最多的两种情况:
1) 父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败。
2)父表更新时子表也更新,父表删除时子表匹配的项也删除。
要求:
1. 建立外键关系的对应列数据类型应一致(或相似?)。
2. 建立外键关系的对应列(references列)必须建立了索引(唯一性约束)。
3. 添加约束事可以给出key_name,但key_name在数据库中必须是唯一的。否则,引擎会自动的创建。
——————————————————————————————————————
3、级联删除、级联置空
添加外键约束的时候,需要级联删除,或者级联设置为null
外键的添加可以使用如下两种方式:
级联删除:(删除部门表中数据的同时会删除雇员表中关联的记录)
alter table emp add foreign key (dept_id) references dept(id) on delete cascade;
级联置空:(删除部门表中数据同时将雇员表中关联记录外键的值设置为null;)
alter table emp add foreign key (dept_id) references dept(id) on delete set null;
create table company (
id int primary key auto_increment,
name varchar(100)
);
create table stock(
id int primary key auto_increment,
code varchar(50),
cid int unique
);
——————————————————————————————————————
4、数据关系
关系:一对一,一对多,多对多
1)、one2many关系通常借助:FK实现
外键要建立在多的一端,由many维护关系
2)、one2one 关系的实现通常借助:FK+UK
对于次关系而言,外键建立在那一端,取决于具体业务。
3)、many2many需要借助中间表来实现
create table stu(
id int primary key,
sname varchar(20) not null
);
create table course(
id int primary key,
cname varchar(20) not null
);
建立中间表s_c通常叫关系表
create table s_c(
sid int ,
cid int,
primary key(sid, cid)
);复合主键
一般不建议在建表的时候设置外键
alter table s_c add foreign key (sid) references stu(id) on delete cascade;
alter table s_c add foreign key (cid) references course(id) on delete cascade;
insert into stu values(1, ‘SA‘),(2, ‘SC‘);
insert into course values(1, ‘CA‘),(2, ‘CC‘);
insert into s_c values(1,1),(1,2),(2,1),(2,2);
——————————————————————————————————————
本文出自 “一剑围城” 博客,请务必保留此出处http://weijiancheng.blog.51cto.com/10190955/1700048
原文:http://weijiancheng.blog.51cto.com/10190955/1700048