数据库的约束(mysql)
1)约束概念:
为表中字段定义相关的数据存储限制条件
2)约束分类:
a. 主键约束:primary key
b. 外键约束: foreign key
c. 唯一约束: unique
d. 非空约束: not null
e. 默认约束: default
f. 检查约束: check(mysql不支持,oracle支持)
3)约束定义
a.创建表语法里面定义约束
b.修改表语法里面定义约束
4)创建表约束
Create table 表名(
列名 数据类型 约束,
列名 数据类型 约束,
列名 数据类型 约束
)
–主键约束:唯一不可以重复;且不能为空
create table mds_user(
u_id int primary key,
u_name char(20)
)
–外键约束(foreign key)
–父表和子表在关系上的定义
–规则:父表必须有主键,子表里面会创建一个字段,这个字段就是外键。而这个外键是关联父表主键。
–外键约束定义
CREATE TABLE school( -- 父表
school_id INT PRIMARY KEY,
school_name CHAR(20)
)
CREATE TABLE teacher( -- 子表
teacher_id INT PRIMARY KEY,
teacher_name CHAR(20),
school_id INT, -- 外键一定是在子表里面
FOREIGN KEY(school_id) REFERENCES school(school_id)
)
--下面这一句是查询语句
SELECT school_name, teacher_name FROM school, teacher
WHERE school.`school_id` = teacher.`school_id`
–外键需要注意事项
1)不能直接删除父表 drop table 父表
2)如果父表数据已经引用子表里面,则不能直接删除父表数据 delete from 父表
3)先删除子表数据,然后才能删除父表的数据
– 唯一约束
CREATE TABLE mds_user(
u_id INT PRIMARY KEY,
u_name CHAR(20) UNIQUE -- 唯一约束
)
-- 非空约束
CREATE TABLE mds_user(
u_id INT PRIMARY KEY,
u_name CHAR(20) UNIQUE, -- 唯一约束
u_address CHAR(50) NOT NULL -- 非空约束
)
-- 默认约束
CREATE TABLE mds_user(
u_id INT PRIMARY KEY,
u_name CHAR(20) UNIQUE, -- 唯一约束
u_address CHAR(50) NOT NULL, -- 非空约束
u_sex CHAR(2) DEFAULT '男'
)
– 可以在一个列上面定义多个约束
CREATE TABLE mds_product(
p_id INT PRIMARY KEY,
p_name CHAR(50) NOT NULL DEFAULT '华为手机'
)
5)通过alter命令来操作约束
– 添加主键约束
Alter table 表名 add primary key(字段)
SHOW KEYS FROM mds_user -- 查看表里面的键
ALTER TABLE mds_user ADD PRIMARY KEY(u_id);
– 删除主键约束
Alter table 表名 drop primary key
ALTER TABLE mds_user DROP PRIMARY KEY
– 添加外键约束
Alter table 表名 add constraint 约束名 foreign key(子表_字段) references 父表名(父表_字段)
CREATE TABLE school( -- 父表
school_id INT PRIMARY KEY,
school_name CHAR(20)
)
CREATE TABLE teacher( -- 子表
teacher_id INT PRIMARY KEY,
teacher_name CHAR(20),
school_id INT -- 外键一定是在子表里面
)
ALTER TABLE teacher ADD CONSTRAINT fk_teacher FOREIGN KEY(school_id) REFERENCES school(school_id);
– 删除外键约束
Alter table 表名 drop foreign key 约束名
ALTER TABLE teacher DROP FOREIGN KEY fk_teacher
– 添加非空约束
– 如果数据库里面已经有数据,则必须去检查字段里面是否含有null,如果有null,则非空约束不能添加成功
Alter table teacher modify 字段 数据类型 not null
ALTER TABLE teacher MODIFY teacher_name CHAR(20) NOT NULL;
ALTER TABLE teacher MODIFY teacher_name CHAR(20) NULL;