mysql
约束(全)
对表中的数据进行限定,保证数据的正确性、有效性和完整性
约束分类
主键约束
注意
- 含义:非空且唯一
- 一张表只能有一个字段为主键
- 主键就是表中记录的唯一标识
额嗯
- 创将表时添加主键
CREATE TABLE stu ( id INT PRIMARY KEY, -- 给id添加主键约束
NAME VARCHAR ( 20 ) );
- 删除主键
-- 错误 alter table stu modify id int ;
ALTER TABLE stu DROP PRIMARY KEY;
- 创建后修改主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
自动增长
某一列为数值类型,使用auto_increment可以来完成值的自动增长
- 创建表时添加
CREATE TABLE stu (
id INT PRIMARY KEY auto_increment,
stu_name VARCHAR(20) NOT NULL);
- 删除(删除的时候主键不会被删掉)
ALTER TABLE stu MODIFY id INT
- 添加
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
非空约束
- 创建表时添加约束
CREATE TABLE stu ( id INT, stu_name VARCHAR ( 20 ) NOT NULL );
- 创建完成后添加约束
ALTER TABLE stu MODIFY stu_name VARCHAR(20) NOT NULL;
- 删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
唯一约束
用unique修饰,值不能重复
- 创建表时添加约束
CREATE TABLE phone ( id INT, phone VARCHAR ( 15 ) UNIQUE );
mysql
有个问题,null是可以在unique中同时存在的
- 创建表后添加唯一约束
ALTER TABLE phone MODIFY phone VARCHAR(20) UNIQUE;
- 删除
unique也叫唯一索引,删除的方法有所不同
ALTER TABLE phone DROP INDEX phone
外键约束
(实际开发中基本上不会用物理主键,会在业务层完成数据约束,因为物理主键的效率较低)
语法:
create table 表名(
....
外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
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,
ename VARCHAR(20),
age INT,
dep_id INT,
CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id)
);
- 删除外键
ALTER TABLE employee DROP FOREIGN KEY emp_dep_fk;
- 创建表后添加外键
- 创建表后添加外键
ALTER TABLE employee ADD CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id);
-
分类
- 级联更新
ON UPDATE CASCADE
- 级联删除
ON DELETE CASCADE
声明:b站javaweb从入门到入土笔记