约束
约束关键字 | 含义 |
---|---|
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键,不可以为空 |
UNIQUE | 唯一,保证该字段具有唯一性,可以为空 |
CHECK | 检查约束 |
FOREIGN KEY | 外键约束 |
AUTO_INCREMENT | 自增长列 |
示例
CREATE TABLE major(
id INT UNIQUE,#唯一
majorName VARCHAR(20)
);
CREATE TABLE stuinfo(
id INT,
stuName VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorid INT,
PRIMARY KEY (id,stuName),#主键
UNIQUE(seat),#唯一
CHECK(gender='男' OR gender='女'),#检查
FOREIGN KEY(majorid) REFERENCES major(id)#外键约束
)
主键和唯一
- 不同点
- 一个表至多有一个主键,但可以有多个唯一
- 主键不允许为空,唯一可以为空
- 相同点
- 都具有唯一性
- 都支持组合键,但不推荐
外键
用于限制两个表的关系,从表的字段值引用了主表的某字段值
外键列和主表的被引用列要求类型一致,意义一样,名称无要求
主表的被引用列要求是一个key(一般就是主键)
插入数据,先插入主表;删除数据,先删除从表
#可以通过以下两种方式来删除主表的记录 #方式一:级联删除 ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE; #方式二:级联置空 ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;
创建表时添加约束
create table 表名(
字段名 字段类型 not null,#非空
字段名 字段类型 primary key,#主键
字段名 字段类型 unique,#唯一
字段名 字段类型 default 值,#默认
constraint 约束名 foreign key(字段名) references 主表(被引用列)
)
类型 | 支持类型 | 可以起约束名 |
---|---|---|
列级约束 | 除了外键 | 不可以 |
表级约束 | 除了非空和默认 | 可以,但对主键无效 |
- 列级约束可以在一个字段上追加多个,中间用空格隔开,没有顺序要求
修改表时添加或删除约束
非空
添加非空 alter table 表名 modify column 字段名 字段类型 not null; 删除非空 alter table 表名 modify column 字段名 字段类型 ;
默认
添加默认 alter table 表名 modify column 字段名 字段类型 default 值; 删除默认 alter table 表名 modify column 字段名 字段类型 ;
主键
添加主键 alter table 表名 add【 constraint 约束名】 primary key(字段名); 删除主键 alter table 表名 drop primary key;
唯一
添加唯一 alter table 表名 add【 constraint 约束名】 unique(字段名); 删除唯一 alter table 表名 drop index 索引名;
外键
添加外键 alter table 表名 add【 constraint 约束名】 foreign key(字段名) references 主表(被引用列); 删除外键 alter table 表名 drop foreign key 约束名;
自增长列(auto_increment_increment)
注意
- 不用手动插入值,可以自动提供序列值,默认从1开始,步长为1
auto_increment_increment- 如果要更改起始值:手动插入值
- 如果要更改步长:更改系统变量
set auto_increment_increment=值;
- 一个表至多有一个自增长列
- 自增长列只能支持数值型
- 自增长列必须为一个key
操作
#创建表时设置自增长列
create table 表(
字段名 字段类型 约束 auto_increment
)
#修改表时设置自增长列
alter table 表 modify column 字段名 字段类型 约束 auto_increment
#删除自增长列
alter table 表 modify column 字段名 字段类型 约束