1,约束条件
-
约束:含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
-
分类:六大约束
NOT NULL:非空,用于保证该字段的值不能为空比如姓名、学号等
DEFAULT:默认,用于保证该字股有默认值比如性别
PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空比如学号,员工编号等
UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空比如座位号
CHECK:检查约束[mysq1中不支持]比如年龄、性别
FOREIGN KEY:外键 用于限制两个表的关系(在从表添加外键约束,用于引用主表中某列的值)
是否保证唯一性 | 是否允许为空 | 一个表中可以有多少个约束条件 | 是否允许组合 | |
---|---|---|---|---|
主键 | 是 | 不允许 | 至多有一个 | 是 |
唯一 | 是 | 允许 | 可以有多个 | 是 |
外键特点:
1、要求在从表设置外键关系 (语法: FOREIGN KEY(字段) references 外键表名(外键列名)?
2、从表的外键列的类型和主表的外键列的类型要求一致或兼容,名称无要求
3、主表的关联列必须是一个key (一般是主健或唯一)
4、插入数据时,先插入主表,再插入从表
5,删除数据时,先删除从表,再删除主表
外键应用场景:
a b 两个表
a表中存有 客户号,客户名称
b表中存有 每个客户的订单
有了外键后
你只能在确定b 表中没有客户x的订单后,才可以在a表中删除客户x
————————————————————————————
外键特点演示:创建客户,和订单两个表并用外键关联
创建customer表语法:
CREATE TABLE customer(
name VARCHAR(10) NOT NULL,
id INT UNSIGNED UNIQUE,
cid INT PRIMARY KEY
)
customer表(主表)
创建order表的语法:
CREATE TABLE orders(
number INT UNIQUE,
oid INT,
FOREIGN KEY(oid) REFERENCES customer(cid)
);
order表(从表)
这时主表从表建立了关系
——————————————————
- 添加约束的时机:
1:创建表时
2:修改表时
- 约束的添加分类
列级约束:六大约束都支持,但外键约束没有效果
表级约束:除了非空,默认,其他约束都支持
1.1约束条件——创建表时添加列级约束和表级约束
列级约束语法:直接在字段和类型后面追加约束类型即可
表级约束语法:在各个字段的最后面加 constraint 约束名 约束类型(字段名); (constraint 约束名 可以省略)
————————————————————
演示:创建test3表,用上列级约束语法和表级约束语法
创建语法:
CREATE TABLE test3(
name VARCHAR(10) NOT NULL,
id INT PRIMARY KEY auto_increment,
oid INT,
UNIQUE KEY(oid)
);
查看test3表的结构语法:DESC test3;
————————————————————————
1.2 约束条件——修改表时添加列级约束和表级约束
添加列级约束语法:
alter table 表名 modify column 字段名 字段类型 新约束;
添加表级约束
alter table 表名 add【constraint 约束名】 新约束类型(字段名)【外键的引用】;
————————————————————————
演示:分别修改test3表中的name为UNIQUE
test3表的结构
修改语法:
ALTER TABLE test3 MODIFY COLUMN id INT UNIQUE;
结果:
——————————————————
2,标识列
含义:可以不用手动插入值,系统提供默认的序列
语法:只可以在键的后面加入 auto_increment
特点:1:标识列必须和键搭配(主键,外键,唯一)
2:一个表只可以有一个标识列
3:标识列类型只可以是数值型
——————————————
演示:在test3表中运用标识列
创建语法:
CREATE TABLE test3(
name VARCHAR(10) NOT NULL,
id INT PRIMARY KEY auto_increment,
oid INT,
UNIQUE KEY(oid)
);
查看test3表的结构语法:DESC test3;
——————————————————————-