1.主键约束
PRIMARY KEY:用于唯一的标识表中的每条记录。
被标识为主键的数据在表中是唯一的且其值不能为空。
字段默认添加索引。
单一主键:一个字段添加主键
create table student(
id int primary key,
name varchar(20)
);
或者
create table student2(
id int,
name varchar(20),
primary key(id)
);
复合主键:多个字段添加主键
create table student3(
id int,
name varchar(20),
primary key(id, name)
);
复合主键,单列主键字段可以重复,但组合在一起时必须唯一性
insert into student3 values(1,'yzm');
insert into student3 values(1,'yzm');
insert into student3 values(1,'yzm2');
insert into student3 values(2,'yzm');
2.唯一性约束
UNIQUE:约束的字段,具有唯一性,不可重复,但可以为null
create table student4(
id int,
name varchar(20) unique
);
create table student5(
id int,
name varchar(20),
unique(name)
);
多字段约束
create table student6(
id int,
name varchar(20),
email varchar(50),
unique(name,email)
);
约束命名
create table student7(
id int,
name varchar(20),
email varchar(50),
constraint uq_name_email unique(name,email)
);
约束的字段可以为null,但不能重复
insert into student7 values(0, null, null);
insert into student7 values(0, "yzm", "qq.com");
3.非空约束
NOT NULL:约束的字段不能为null值,必须给定具体的数据
create table student8(
id int,
name varchar(20) not null,
email varchar(50)
);
insert into student8(id, email) values(1, "qq.com");
4.默认值约束
DEFAULT:给约束的字段设置默认值,若插入数据时该字段没有赋值,那么系统会给该字段插入默认值
create table student9(
id int,
name varchar(20) default '默认值',
email varchar(50)
);
insert into student9(id, email) values(1, "qq.com");
5.外键约束
FOREIGN KEY:用来维护两个表之间数据一致性。
两张表:
class作为主表
student作为从表
CREATE TABLE class(
cid int PRIMARY KEY,
cname varchar(20)
);
DROP TABLE student;
CREATE TABLE student (
sid int PRIMARY KEY,
sname varchar(20),
cno int,
foreign key(cno) references class(cid)
);
给外键约束命名
DROP TABLE if exists student;
CREATE TABLE student (
sid int PRIMARY KEY,
sname varchar(20),
cno int,
constraint fk_student_class_cid foreign key(cno) references class(cid)
);
插入数据
insert into class values(103, "一年三班"), (305, "三年五班");
insert into student values(1, "小明", 103), (2, "小强", 103), (3, "小王", 305);
查找学生所在班级名称
select s.sname, c.cname from student s left join class c on s.cno = c.cid;
注意:
1.创建:先主表再从表
2.插入:先主表再从表
3.删除:先从表再主表
4.修改:需要注意数据一致性
5.从表里的外键通常为主表的主键
6.约束追加、删除
追加主键约束
alter table student4 add PRIMARY KEY(id);
删除主键约束
alter table student4 drop PRIMARY KEY;
主键约束命名是无效的,主键名称永远是:PRIMARY KEY
alter table student4 add CONSTRAINT pk_id PRIMARY KEY(id);
删除唯一性约束
alter table student4 drop KEY name;
添加唯一性约束
alter table student4 add UNIQUE (name);
添加唯一性约束并命名
alter table student4 add UNIQUE uq_name(name);
删除外键约束
alter table student drop FOREIGN KEY fk_student_class_cid;
追加外键约束
alter table student add constraint fk_student_class_cid foreign key(cno) references class(cid);