常见约束
NOT NULL | 非空约束 | 保证该字段不为空,姓名 |
DEFAULT | 默认约束 | 保证该字段有默认值,比如性别 |
PRIMARY KEY | 主键 | 用于保证该字段单位唯一性,并非空。 |
UNIQUE | 唯一约束 | 保证字段唯一性。 |
CHECK | 检查约束 | mysql不支持 |
FOREIGN KEY | 外键约束 | 用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值 在从表添加外键约束,用于引用主表中某列的值 主键的关联列,必须是一个key(一般为主键或唯一键) 插入数据时,先插主表再插从表。删除数据,先删从表再删主表 |
/*
添加约束的时机:
1. 创建表时
2. 修改表时
约束添加分类
列级约束:六大约束都支持,但是外键约束没有效果
表级约束:除了非空,默认,其他都支持
CREATE TABLE 表名(
字段名 字段类型 列级约束,
字段名 字段类型,
表级约束
)
*/
#列级约束
CREATE TABLE stu_info(
id INT PRIMARY KEY AUTO_INCREMENT,#主键 AUTO_INCREMENT 自增长
stu_name VARCHAR(20) NOT NULL,#非空
gender CHAR(1) CHECK(gender='男' OR gender='女'),#检查
seat INT UNIQUE,#唯一
age INT DEFAULT 18,#默认约束
major_id INT FOREIGN KEY REFERENCES major(id)#外键
)
#表级约束
CREATE TABLE stu_info(
id INT ,#主键
stu_name VARCHAR(20) NOT NULL,#非空
gender CHAR(1) ,#检查
seat INT ,#唯一
age INT DEFAULT 18,#默认约束
major_id INT,#外键
CONSTRAINT pk PRIMARY KEY(id),
CONSTRAINT uk UNIQUE(seat),
CONSTRAINT ck CHECK(gender='男' OR gender='女'),
CONSTRAINT fk_stuinfo_major FOREIGN KEY(major_id) REFERENCES major(id)
)
#表级约束
CREATE TABLE stu_info(
id INT,
stu_name VARCHAR(20) NOT NULL,
gender CHAR(1),
seat INT,
age INT DEFAULT 18,
major_id INT,
FOREIGN KEY(id),
UNIQUE(seat),
CHECK(gender='男' OR gender='女'),
FOREIGN KEY(major_id) REFERENCES major(id)
)
#修改表约束
ALTER TABLE stu_info MODIFY COLUMN stu_name VARCHAR(20) NOT NULL;
ALTER TABLE stu_info MODIFY COLUMN seat INT UNIQUE;
ALTER TABLE stu_info id INT FOREIGN KEYE;
ALTER TABLE stu_info ADD PRIMARY KEY(id);
ALTER TABLE stu_info ADD FOREIGN KEY(major_id) REFERENCES major(id);
#删除表约束
ALTER TABLE stu_info MODIFY COLUMN seat NULL;#删除非空
ALTER TABLE stu_info MODIFY COLUMN age INT;#删除默认
ALTER TABLE stu_info DROP PRIMARY KEY;#删除主键
ALTER TABLE stu_info DROP INDEX seat;#删除唯一键
ALTER TABLE stu_info DROP FOREIGN KEY major_id;#删除外键约束
唯一性 | 空值 | 一个表中是否可为多个 | 是否允许组合 | |
---|---|---|---|---|
主键索引 | Y | N | N | Y |
唯一索引 | Y | Y | Y | Y |