建表约束
主键约束
- 可以唯一确定一张表的一条记录
- 通过给某个字段添加约束,使得该字段不可重复、不可为空
create table 表名(
id int primary key,
name varchar(20));
create table 表名(
id int,
name varchar(20));
alter table 表名 add primary key(id);
alter table 表名 modify id int primary key;
alter table 表名 drop primary key;
唯一约束
- 约束修饰的字段的值不可以重复
- 有多个唯一约束,加起来不重复、不可为空
create table user(
id int unique,
name varchar(20)
);
create table user(
id int,
name varchar(20),
unique(id,name)
);
create table user(
id int,
name varchar(20)
);
alter table user add unique(id);
alter table 表名 modify id int unique;
alter table user drop index id;
自增约束
create table user( id int primary key auto_increment, name varchar(20));
insert into user (name) values('张三');
非空约束
create table user( id int not null, name varchar(20));
默认约束 default
create table user( id int default 1, name varchar(20));
检查约束CHECK
USE testdb;CREATE TABLE IF NOT EXISTS parts ( cost DECIMAL(10 , 2 ) NOT NULL CHECK (cost > 0), price DECIMAL(10 , 2 ) NOT NULL CHECK (price > 0), CHECK (price >= cost));SQL
联合主键
create table 表名( id int, name varchar(20) primary key(id,name) );
外键约束
- 涉及到两张表:主表、副表
- 副表中的外键值,必须在主表中存在
- 主表中被副表所引的项,不可以删除
create table class( id int, name varchar(20));
create table students( id int, name varchar(20), class_id int, foreign key(class_id) references class(id));
两张表的关联关系 | 外键存放 |
---|
1:1 | 外键可以放在任何一方 |
1:N | 外键放在多方 |
N:N | 创建关联关系表 |
模式 | | |
---|
restrict | 严格模式 | |
cascade | 级联模式 | |
set null | 设置为null | |
foreign key(class_id) references class(id) on delete 模式 on update 模式