primary key(主键->not null unique)
- 单一唯一:不为空且唯一
create table user(
id int primary key, #写法一
no int,
primary key(no) #写法二
);
- 复合主键
create table service(
ip char(15),
port int,
primary key(ip,port)
);
unique(唯一)
- 单一唯一:
create table department (
id int unique, #写法一
no int,
unique(no) #写法二
);
- 联合唯一:unique(字段1,字段2) 字段1和字段2联合起来唯一
create table servers (
id int,
ip char(15),
port int,
unique(ip,port)
);
not null(不为空) default(默认值)
auto_increment(自增长)
```
create table user(
id int primary key auto_increment,
name char(16)
);
```
foreign(外键:用于建立表之间的关系)
- 外键的主要作用是保持数据的一致性、完整性、和两表自己的关联性
- 外键字段值来源固定(对应表的主键)
- 级联删除
- 级联更新
foreign key(字段) references 被关联表名(被关联字段名)
- 先创建被关联的表,且被关联字段唯一(unique)
create table department(
id int unique,
name char(15),
comm char(20)
);
- 再创建关联表
create table employee(
id int primary key auto_increment,
name char(10),
sex enum("man","woman") not null default "man",
dep_id int,
foreign key(dep_id) references department(id) on delete cascade on update cascade
#on delete cascade 级联删除(被关联表的记录删除本关联表关联的记录也跟着删除)
#on update cascade 级联更新(被关联表的记录更新本关联表关联的记录外键也跟着更新)
);
ps:因为foreign key的方式使得两张表之间的关系变得耦合性/关联性高,删除/更新都会有影响。
故一般正常项目开发尽量不使用fk方式。使用正常的字段关联关系的方式即可。