概念:
对表中的数据进行限定,保证数据的正确性、有效性和完整性。
分类:
主键约束:primary key
- 作用:
- 用来唯一标识数据库中的每一条记录
- 特点:
- 非空 not null
- 唯一
- 一张表只能有一个字段为主键
- 主键就是表中记录的唯一标识
- 创建主键方式:
- 在创建表的时候给字段添加主键
- 字段名 字段类型 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
);
desc st5;
- 删除主键
-- 删除st5表的主键
alter table st5 drop primary key;
- 添加主键
alter table st5 add primary key(id);
- 创建完表后,添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
- 自动增长:
- 如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长
-- 在创建表时,添加主键约束,并且完成主键自增长
create table stu(
id int primary key auto_increment,-- 给id添加主键约束
name varchar(20)
);
- 删除自动增长
ALTER TABLE stu MODIFY id INT;
- 添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
非空约束:not null,值不能为 null
- 创建表时添加约束
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) NOT NULL -- name为非空
);
- 创建表完后,添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
- 删除 name 的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
唯一约束:unique,值不能重复
- 创建表时,添加唯一约束
CREATE TABLE stu(
id INT,
phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束
);
注意 mysql 中,唯一约束限定的列的值可以有多个 null
- 删除唯一约束
ALTER TABLE stu DROP INDEX phone_number;
- 在创建表后,添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
外键约束:foreign key,让表于表产生关系,从而保证数据的正确性。
- 在创建表时,可以添加外键
格式如下:
create table 表名(
....
外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
举例:
-- 创建部门表(id,dep_name,dep_location)
-- 一方,主表
create table department(
id int primary key auto_increment,
dep_name varchar(20),
dep_location varchar(20)
);
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) )
insert into department values(null, '研发部','广州'),(null, '销售部', '深圳');
-- 正常添加数据
INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);
- 删除外键
ALTER TABLE 从表 drop foreign key 外键名称;
-- 删除employee表的emp_depid_fk外键
alter table employee drop foreign key emp_depid_fk;
- 创建表之后,添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
-- 在employee表情存在的情况下添加外键
alter table employee add constraint emp_depid_fk foreign key (dep_id) references department(id);
- 级联操作
- 在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
-- 添加级联操作
语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;
-- 分类:
级联更新:ON UPDATE CASCADE -- 只能是创建表的时候创建级联关系。更新主表中的主键,从表中的外键 列也自动同步更新
级联删除:ON DELETE CASCADE
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于