1、NOT NULL 非空约束----字面意思
2、PRIMARY KEY 主键约束
|----只能有一个主键;
|----自动为NOT NULL;
|----保证数据的唯一性;
3、UNIQUE KEY 唯一约束
|----可以保证记录的唯一性;
|----并且可以为NULL;
|----一张表可以有多个唯一约束;
4、DEFAULT 默认约束
|----当没有明确赋值时,系统给当前字段附默认值
e.g.
CREATE TABLE tb1(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY ,
sex ENUM('男','女','保密') DEFAULT'保密'
);
INSERT INTO tb1(id) VALUES (1);
插入完后查询记录
SELECT * FROM tb1;
得到如下表所示:
5、FOREIGN KEY 外键约束
①、要求
|----父表和子表的搜索引擎必须为InnoDB,而且禁止使用临时表;
|----外键列和参照列必须为相似的数据类型(数字的长度、无符号位等必须相同,字符的长度不限制);
|----外键列和参照列必须创建索引,外键列系统会自动添加,而参照列如果不是就会出错;
e.g.
创建父表tb2(包含参照列的表)
CREATE TABLE tb2(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
pname VARCHAR(20) NOT NULL
);
SHOW COLUMNS FROM tb2;#查看父表tb2的表结构
可看到如图:
再创建子表users(包含外键列的表):
CREATE TABLE users(
id SMALLINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL,
pid SMALLINT UNSIGNED,#数据类型与父表tb2参照列id一样
FOREIGN KEY (pid) REFERENCES tb2 (id) #设置将tb2的id字段为当前表pid的外键
);
SHOW COLUMNS FROM users;#查看子表users表结构
可看到如图:
可以验证tb2的id字段由于是主键,故其是有索引的
SHOW INDEX FROM tb2;
得到下图:
还可以验证users表的pid字段也被系统自动添加了索引
SHOW INDEX FROM users;
得到下图:
②、外键约束的参照--即在更新父表是子表应该做的相应操作(具体)
③、我们在实际的项目开发中,不去定义物理的外键,所谓的逻辑外键指的是就是我们在定义两张表的结构的时候,我们是按照存在的某种结构的方式去定义,但是不去使用FOREIGN KEY这个关键词来定义