约束
1.主键约束(primary key)
2.唯一约束(unique)
3.非空约束(not null)
4.默认约束(default)
5.外键约束(foreign key)
主键约束(PRIMARY KEY)
关键字:PRIMARY KEY
主键是一个表中能标识唯一行的标志,主键修饰列,列内的数据不能重复,拥有唯一性且不能为空。
自增列AUTO_INCREMENT特点
- 只有整型数据才可以设置为自增列;
- 只有主键才能设置为自增列;
- 自动增长,新增数据时可以不赋值;
- 初始值默认为1,增量为1;
用法
主键约束:
CREATE TABLE demo(
id INT PRIMARY KEY,
name VARCHAR(50)
);
主键约束且设置自增:
CREATE TABLE demo(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
);
唯一约束(UNIQUE)
关键字:UNIQUE
唯一约束修饰的列,数据唯一,不能重复。与主键类似,没有主键级别高,一个表中可以有多个用唯一约束修饰的列,并且唯一约束的列允许为空。
用法:
//添加表
CREATE TABLE demo(
id INT PRIMARY KEY AUTO_INCREMENT, --主键自增
name VARCHAR(50) UNIQUE --唯一约束
);
//添加元素,验证可以为空
insert into demo(name)values('张飞'),('项羽'),(null);
insert into demo(name)values(null);
非空约束(NOT NULL)
关键字:NOT NULL
NOT NULL约束的列,不能为空,必须要填字段。
用法
CREATE TABLE demo(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) UNIQUE ,
startDate DATE NOT NULL --非空约束
);
默认约束(DEFAULT)
关键字:DEFAULT
默认约束修饰的列,如果不给值,会使用自己设置的默认值。
用法
//添加表
CREATE TABLE demo(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) UNIQUE ,
startDate DATE NOT NULL ,
sex CHAR(2) DEFAULT '男'
);
//添加元素
insert into demo(name,startDate,sex)values('貂蝉','20210104','女');
insert into demo(name,startDate)values('张飞','20210104');
外键约束(FOREIGN KEY)
关键字:FOREIGN KEY
外键约束用来在两个表的数据之间建立关联。表与表之间存在关系,这种关系我们就称为外键关系。
表关系有三种:
- 一对一
- 一对多
- 多对多
一对一关联
存在两张表A,B,分别添加主键,在其中任意一张表中设置外键关联另外一张表的主键,而外键添加到当前表的主键上,即两张表的主键进行关联,相互制约。
例如:丈夫表与妻子表
//妻子表
CREATE TABLE wife(
wid INT PRIMARY KEY ,
wname VARCHAR(10) NOT NULL
);
//丈夫表
CREATE TABLE husband(
hid INT PRIMARY KEY ,
hname VARCHAR(10) NOT NULL,
FOREIGN KEY(hid)REFERENCES wife(wid) --外键约束
);
一对多
一对多关系中,一方的表称为主表,多方的表成为从表。
例如:部门表和员工表(部门表为主表,员工表为从表,在员工表的创建外键与部门表关联)
#创建部门表
CREATE TABLE dept(
did INT PRIMARY KEY, #部门号
dname VARCHAR(10) NOT NULL#部门名
);
#创建员工表
CREATE TABLE emp(
eid INT PREPARE KEY, #员工号
did INT, #部门号
ename VARCHAR(10), #员工名
FOREIGN KEY(did) REFERENCES dept(did)
);
多对多
两张表A,B想要实现多对多关系,需要借助一张中间表C,在C中设置两个外键,分别关联A,B表的主键。
例如:学生与课程(学生表,课程表,选课表)
#学生表
CREATE TABLE stu(
sid INT PRIMARY KEY,
sname VARCHAR(10)
);
#课程表
CREATE TABLE course(
cid INT PRIMARY KEY,
cname VARCHAR(10)
);
#选课表
CREATE TABLE stu_conn_course(
sid INT,
cid INT,
FOREIGN KEY(sid) REFERENCES stu(sid),
FOREIGN KEY(cid) REFERENCES course(cid)
);