MySQL | 约束

MySQL | 约束

约束

  • 概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。
  • 分类:
    1. 主键约束:primary key
    2. 非空约束:not null
    3. 唯一约束:unique
    4. 外键约束:foreign key

非空约束

非空约束:not null,值不能为 null

-- 建表时对字段添加非空约束
CREATE TABLE stu( 
	id INT,
	NAME VARCHAR(20) NOT NULL -- name 为非空
);

-- 创建完表后,添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

-- 删除指定字段的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);

唯一约束

唯一约束:unique,值不能重复,注意 MySQL 中,唯一约束限定的字段的值可以有多个 NULL

-- 建表时对字段添加唯一约束
CREATE TABLE stu(
	id INT,
	phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束

);

-- 创建完表后,添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

-- 删除唯一约束,注意不是使用 modify
-- 错误:alter table stu modify phone_number
ALTER TABLE stu DROP INDEX phone_number;

主键约束

主键约束:primary key,非空且唯一

  • 一张表只能有一个字段为主键
  • 主键就是表中记录的唯一标识
-- 在创建表时,添加主键约束
create table stu(
	id int primary key, -- 给id添加主键约束
	name varchar(20)
);

-- 创建完表后,添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY;

-- 删除主键
-- 错误:alter table stu modify id int ;
ALTER TABLE stu DROP PRIMARY KEY;

-- 自动增长:如果某一字段是数值类型的,可以使用 auto_increment 来完成该字段值的自动增长,一般用在主键上
-- 设置为自动增长的字段也可以手动添加值
-- 自动增长的值只和上一行的值相关
-- 在创建表时,添加主键约束,并且完成主键自增长
create table stu(
	id int primary key auto_increment,-- 给id添加主键约束
	name varchar(20)
);

-- 建表后,添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

-- 删除自动增长
ALTER TABLE stu MODIFY id INT;

外键约束

考虑一张员工表,可能存在多个员工来自同一部门,如果把员工信息和部门信息放在同一张表,会导致数据冗余,可以把部门信息提取,分成另外一张表,此时,部门表作为主表,员工表作为从表.

外键约束:foreign key,让表和表产生关系,从而保证数据的正确性

-- 在创建表时,添加外键
create table 表名(
    field1 type1,
    field2 type2,
    ...
    field3 type3,
    constraint 外键名称 foreign key (外键字段名称) references 主表名(主表主键)
);

-- 创建表之后,添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名(主表主键); 

-- 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

级联

在修改和删除主表的主键时,同时更新或删除从表的外键值,称为级联操作

-- 添加级联
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名(主表主键) ON UPDATE CASCADE ON DELETE CASCADE;
-- ON UPDATE CASCADE:级联更新
-- ON DELETE CASCADE:级联删除

参考

黑马 JavaWeb
数据库复习笔记