约束:一种限制,用于限制表中的数据,为了保证表中的数据准确性和可靠性。
六大约束:
- not null:非空约束,用于保证该字段的值不能为空。
- default:默认约束,用于保证该字段有默认值。
- primary key:主键约束,用于保证该字段的值具有唯一性,并且非空。
- unique:唯一约束,用于保证该字段的值具有唯一性,可以为空,但只能有一个值为空。
- check:检查约束【mysql 不支持】
- foreign key: 外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某列的值。
添加约束的时机:1)创建表时 2)修改表时
约束的添加分类:
- 列级约束:六大约束都支持;但外键约束没有效果。
- 表级约束:除了非空,默认,其他的都支持。
添加列级约束
语法:直接在字段名和类型后面追加约束类型即可。只支持:默认、非空、主键、唯一。
create table student( id int primary key, #主键 stuName varchar(20) not null, #非空 gender char(1) check(gender='男' or gender='女'), #检查 seat int unique, #唯一 age int default 18, #默认 majorid int references major(id) #外键 );
添加表级约束
语法:在各个字段的最下面,[constraint 约束名] 约束类型(字段名)
create table student( id int, stuName varchar(20), gender char(1), seat int, age int, majorid int, [constraint pk] primary key(id), #主键 [constraint uq] unique(seat), #唯一 [constraint ck] check(gender='m' or gender='f'), #检查 [constraint fk_stu] foreign key(majorid) references major(id) #外键 );
主键约束和唯一约束的区别
| 保证唯一性 | 是否允许为空 | 一个表中可以有多少个 | 是否允许为空 | |
| 主键 | 可以 | 不能 | 至多有1个 | 允许 |
| 唯一 | 可以 | 能 | 可以有多个 | 允许 |
外键:
- 要求在从表设置外键关系。
- 从表的外键列的类型和主表的关联列的类型要求一致或兼容。名称无要求。
- 主表的关联列必须是一个key(一般是主键或唯一)。
- 插入数据时,是先插入主表,再插入从表;删除数据时,先删除从表,再删除主表数据。
修改时添加约束
1,添加列级约束
#语法 alter table 表名 modify column 字段名 字段类型 新约束; #添加非空约束 alter table users modify column name varchar(10) not null; #添加默认约束 alter table users modify column age int default 18; #添加主键约束 alter table users modify column id int primary key; #添加唯一约束 alter table users modify column password unique;
2,添加表级约束
#语法 alter table 表名 add [constraint 约束名] 约束类型(字段名) [外键的引用] #添加主键 alter table users add primary key(id); #添加唯一约束 alter table users add unique(password); #添加外键 alter table users add foreign key(id) references employee(id);
修改表时删除约束
#一般语法 alter table 表名 modify column 字段名 数据类型; #删除非空约束 alter table users modify column name varchar(10) null; #删除默认约束 alter table users modify column age int; #删除主键约束 alter table users drop primary key; #删除唯一约束 alter table users drop index idx_password; #删除外键 alter table users drop foreign key employeeId;
posted on
浙公网安备 33010602011771号