--什么是约束
-- 约束是在表上强制执行的数据校验规则
-- 约束主要用于保证数据库的完整性。
-- 当表中数据有相互依赖性时,可以保护相关的数据不被删除
-- 大部分数据库支持下面五类完整性约束:
-- 1.not null非空,标识字段的值不能为空
-- 2.unique key唯一键,标识
-- 3.primary key主键
-- 4.foreign key外键,外键是构建于一个表的两个字段或者两个表的两个字段之间的关系
-- 5.check检查,检查数据
------------------------------以下是在建表的时候,添加约束,在本例中,tb_emp中的外键约束没有起作用,可能mysql不支持这样
--创建员工表
CREATE TABLE tb_emp(
id INT PRIMARY KEY AUTO_INCREMENT, --主键,和自动增长
NAME VARCHAR(18) NOT NULL, --非空约束
sex VARCHAR(2) CHECK(sex='男' OR sex='女'), --检查约束
age INT CHECK(age > 0 AND age < 120), --约束
address VARCHAR(200) NOT NULL, --非空约束
email VARCHAR(100) UNIQUE, --唯一约束
dapt_id INT REFERENCES tb_dapt(id) --部门ID号,tb_emp(员工表)字段引用了tb_dapt(部门表)的id字段
);
--创建部门表
CREATE TABLE tb_dapt(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18),
address VARCHAR(40) --部门地址
);
--插入数据
INSERT INTO tb_emp(NAME,sex,age,address,email,dapt_id) VALUES('李枫','男',22,'成都','249438054a@qq.com',2);
INSERT INTO tb_dapt (NAME,address) VALUES('S1T160','成都');
DROP TABLE tb_emp;
DROP TABLE tb_dapt;
----------------------------以下代码,在建表后,创建约束
--=========第一种方式,在建表的最后,去登陆约束
--创建员工表
CREATE TABLE tb_emp(
id INT,
NAME VARCHAR(18), --Id号
sex VARCHAR(2), --名称
age INT, --性别
address VARCHAR(200), --年龄
email VARCHAR(100), --邮箱
dapt_id INT, --部门ID号,
--在键表之后,创建一个外键,tb_maple_fk是外键的名称,REFERENCES 指向了 tb_dapt的id字段
CONSTRAINT FOREIGN KEY tb_maple_fk (dapt_id) REFERENCES tb_dapt(id) --CONSTRAINT FOREIGN KEY 外键名(外键) REFERENCES 主表(字段)
--为ID添加主键
CONSTRAINT PRIMARY KEY id;
);
--创建部门表
CREATE TABLE tb_dapt(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18),
address VARCHAR(40) --部门地址
);
--=========第二种方式
--创建员工表
CREATE TABLE tb_emp(
id INT,
NAME VARCHAR(18), --Id号
sex VARCHAR(2), --名称
age INT, --性别
address VARCHAR(200), --年龄
email VARCHAR(100), --邮箱
dapt_id INT --部门ID号,
)
--创建部门表
CREATE TABLE tb_dapt(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18),
address VARCHAR(40) --部门地址
);
--在外面来添加主外键关联,给dapt_id字段添加外键,指向了tb_dapt表的id
ALTER TABLE tb_emp ADD CONSTRAINT FOREIGN KEY tb_maple_fk (dapt_id) REFERENCES tb_dapt(id)
--为name添加主键
ALTER TABLE tb_emp ADD CONSTRAINT PRIMARY KEY(id);
--为email添加唯一键
ALTER TABLE tb_emp ADD CONSTRAINT UNIQUE (email);
--为name添加非空约束,添加不了
ALTER TABLE tb_emp ADD CONSTRAINT NOT NULL(NAME);
--为sex添加检查约束
ALTER TABLE tb_emp ADD CONSTRAINT CHECK(sex='男' AND sex='女');
--删除约束
ALTER TABLE tb_emp MODIFY NAME VARCHAR(20); --相当于将name字段更新了
--删除主键
ALTER TABLE tb_emp DROP PRIMARY KEY;
--删除外键
ALTER TABLE tb_emp DROP FOREIGN KEY;
--删除唯一约束
ALTER TABLE tb_emp DROP INDEX email;