MYSQL的约束
说明:本文是在观看黑马57期视频做的笔记。
1、 约束的概念
约束:对表中的数据进行限定,保证数据的正确性、有效性和完整性。
2、约束的分类
主键约束:primary key
非空约束:not null
唯一约束:unique
外键约束:foreign key
2.1 非空约束——not null
1.添加非空约束
--1、创建表时添加约束
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) NOT NULL
);
--2、创建表结束之后添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL ;
2、删除非空约束
--删除name的非空约束
--1、修改列
ALTER TABLE stu MODIFY NAME VARCHAR(20);
DESC stu;
SELECT * FROM stu;
--插入非空数据时,不会报错
INSERT INTO stu (id,NAME) VALUES (1,'wang');
INSERT INTO stu (id,NAME) VALUES (2,DEFAULT);
2.2 唯一约束——unique
```sql
--1、创建时添加唯一约束
CREATE TABLE stu(id INT,
phone_number VARCHAR(20) UNIQUE
);
INSERT INTO stu (id,phone_number) VALUES (1,'18855128920');
INSERT INTO stu (id,phone_number) VALUES (3,'18855128920');
INSERT INTO stu (id,phone_number) VALUES (2,'18867808920');
--2、删除phone_number的唯一约束
ALTER TABLE stu drop index phone_number;
--3、添加phone_number的唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
SELECT * FROM stu;
注意:
- 唯一约束所在的列可以添加null,但只可以添加一个。
- 添加唯一约束之前确保之前插入的数据没有重复。
2.3主键约束——primary key
注意:
- 含义:唯一且非空 .
- 一张表只能有一个主键。
- 主键是表中记录的唯一标识
1、在创建表时添加主键
#主键约束
--1、在创建表时添加主键约束
CREATE TABLE stu(id INT PRIMARY KEY,
phone_number VARCHAR(20) NOT NULL
);
INSERT INTO stu(id, phone_number) VALUES (1,'18855128920');
INSERT INTO stu(id, phone_number) VALUES (2,'18855120920');
#报错,主键唯一:Duplicate entry '2' for key 'PRIMARY'
INSERT INTO stu(id, phone_number) VALUES (2,'18855128340');
#报错,主键不为空:Column 'id' cannot be null
INSERT INTO stu(id, phone_number) VALUES (NULL,'18855128340');
--2、删除主键
ALTER TABLE stu DROP PRIMARY KEY;
#没有报错
INSERT INTO stu(id, phone_number) VALUES (2,'18855128340');
INSERT INTO stu(id, phone_number) VALUES (NULL,'18855128340');
--3、在创建完表之后添加主键
CREATE TABLE stu(id INT ,
phone_number VARCHAR(20) NOT NULL
);
ALTER TABLE stu MODIFY id INTO PRIMARY KEY;
INSERT INTO stu(id, phone_number) VALUES (1,'18855128920');
INSERT INTO stu(id, phone_number) VALUES (2,'18855120920');
#报错,主键唯一:Duplicate entry '2' for key 'PRIMARY'
INSERT INTO stu(id, phone_number) VALUES (2,'18855128340');
#报错,主键不为空:Column 'id' cannot be null
INSERT INTO stu(id, phone_number) VALUES (NULL,'18855128340');
SELECT * FROM stu;
2、删除主键primary key
--2、删除主键
ALTER TABLE stu DROP PRIMARY KEY;
#没有报错
INSERT INTO stu(id, phone_number) VALUES (2,'18855128340');
INSERT INTO stu(id, phone_number) VALUES (NULL,'18855128340');
自动增长:
1、概念
使用auto_increment完成值得自动增长。
2、创建表时添加在主键primary key 之后。
CREATE TABLE stu(id INT PRIMARY KEY AUTO_INCREMENT, phone_number VARCHAR(20) NOT NULL );
3、删除自动增长
ALTER TABLE stu MODIFY id VARCHAR(20);
2.4 外键约束——foreign key
1、外键约束
- 在从表中与主表主键对应的那一列
- 主表: 一方,用来约束别人的表
- 从表: 多方,被别人约束的表
2、添加外键
方式一:
ALTER TABLE 从表 ADD CONSTRAINT [外键约束名称] FOREIGN KEY (外键字段名) ==REFERENCES ==主表(主键字段名);
方式二:
CONSTRAINT [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
3、删除外键
ALTER TABLE 从表 DROP FOREIGN KEY 外键名称;
4、代码记录
#创建部门表(id, dep_name, dep_location)
CREATE TABLE department(
id INT PRIMARY KEY AUTO_INCREMENT,
dep_name VARCHAR(20),
dep_location VARCHAR(20)
);
-- 创建员工表(id,name,age,dep_id)
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)
#constraint emp_depid_fk foreign key (dep_id) references department(id)
);
#删除 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);