数据库表的约束
概述
约束作用
对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加约束,不正确的数据将无法插入表中。约束在创建表的时候添加较为合适。
约束种类
约束名 | 关键字 |
---|---|
主键 | primary key |
唯一 | unique |
非空 | not null |
默认值 | default |
外键 | foreign key |
主键约束
创建主键
主键的特点:非空,唯一。
在创建表的时候添加主键
字段名 字段类型 PRIMARY KEY
在已有字段添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
示例
-- 创建表学⽣表 st5, 包含字段(id, name, age)将 id 做为主键
create table st5 (
id int primary key, -- id 为主键
name varchar(20),
age int
);
删除主键
示例
-- 删除 st5 表的主键
alter table st5 drop primary key;
-- 添加主键
alter table st5 add primary key(id);
主键自增
AUTO_INCREMENT表示自动增长
创建表时指定起始值
CREATE TABLE 表名(
列名 int primary key AUTO_INCREMENT
) AUTO_INCREMENT=起始值;
示例
-- 指定起始值为 1000
create table st4 (
id int primary key auto_increment,
name varchar(20)
) auto_increment = 1000;
创建好以后修改起始值
ALTER TABLE 表名 AUTO_INCREMENT=起始值;
示例
alter table st4 auto_increment = 2000;
delete和truncate对自增长影响
delete:删除所有记录后,自增长无影响
truncate:删除以后,自增长重新开始
唯一约束
示例
-- 创建学⽣表 st7, 包含字段(id, name),name 这⼀列设置唯⼀约束, 不能出现同名的学⽣
create table st7 (
id int,
name varchar(20) unique
);
非空约束
示例
-- 创建表学⽣表 st8, 包含字段(id, name, gender)其中 name 不能为 NULL
create table st8 (
id int,
name varchar(20) not null,
gender char(1)
);
默认值
示例
-- 创建⼀个学⽣表 st9, 包含字段(id, name, address), 地址默认值是⼴州
create table st9 (
id int,
name varchar(20),
address varchar(20) default '⼴州'
);
外键约束
外键约束概述
外键:在从表中与主表与主表主键对应的那一列。
主表:一方,用来约束别人的表
从表:多方,被别人约束的表
外键创建
新增表的外键
[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
已有表添加外键
ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);
示例
-- 2) 创建从表employee并添加外键约束emp_depid_fk
-- 多⽅,从表
create table employee(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int, -- 外键对应主表的主键
-- 创建外键约束
constraint emp_depid_fk foreign key (dep_id) references department(id)
);
删除外键
ALTER TABLE 从表 drop foreign key 外键名称;
示例
-- 删除 employee 表的 emp_depid_fk 外键
alter table employee drop foreign key emp_depid_fk;
-- 在 employee 表情存在的情况下添加外键
alter table employee add constraint emp_depid_fk
foreign key (dep_id) references department(id);
外键级联
在修改和删除表的主键时,同时更新或删除副表的外键值,称为级联操作。
级联操作语法 | 描述 |
---|---|
on update case | 级联更新,只能创建表的时候创建级联关系。更新主表中的主键,从表的外键也同步更新 |
on delete case | 级联删除 |
示例
create table employee(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int, -- 外键对应主表的主键
-- 创建外键约束
constraint emp_depid_fk foreign key (dep_id) references
department(id) on update cascade on delete cascade
);