Mysql主键约束简介
概述
- 主键遵守规则每个表只能定义一个主键。
- 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。
- 一个列名只能在复合主键列表中出现一次。
- 复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。
约束分类
非空约束:primary key
1、创建表时添加约束
create table stu(
id int,
name varchar(20) not null --name 为非空
);
2、创建完表、添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL
3、删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20)
唯一约束:unique
1、注意
唯一约束可以有NULL值、但是只能有一条记录为null
2、创建表时、条件唯一约束
create table stu(
id int,
name varchar(20) UNIQUE --name 为非空
);
3、删除唯一约束
ALTER TABLE stu DROP INDEX phone_number;
4、建完表后、添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
主键约束:primary key
1、注意
1、含义:非空且唯一
2、一张表只能有一个字段为主键
3、主键就是表中记录的唯一标识
2、在创建表时、添加主键约束
create table stu(
id int primary key, -- 给id添加主键约束
name varchar(20)
);
3、删除主键
ALTER TABLE stu DROP PRIMARY KEY
4、创建完表后、添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY
5、自动增长
CREATE TABLE stu(
id int primary key auto_increment,
name varchar(20)
);
外键约束:foreign key
1、创建表时添加外键
CREATE TABLE department(
id INT PRIMARY KEY AUTO_INCREMENT,
dep_name VARCHAER(20),
dep_location VARCHAR(20)
);
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT,
dep_id INT,
CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id)
);
2、删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
3、创建表之后、添加外键
ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dept_id) REFERENCES department(id) ON UPDATE CASCADE ON DELETE CASCADE;