1.唯一索引
create table t1(
id int ....,
num int,
xx int,
unique 唯一索引名称 (列名,列名),
constraint ....
)
唯一索引可以标记多列,即多列不能同时重复,被称作联合唯一索引,以下情况是可以的(第一列为自增,二三列为唯一索引)
#
1 1 1
2 1 2
PS:
唯一:
约束不能重复(可以为空)
加速查找
PS:
主键
不能重复(不能为空)
加速查找
2.外键的变种
外键表示为一种约束关系,即一个表中某一列的值,只能是另一个表中某列已有的值,不存在的值不可使用,但是,可以重复。
外键的定义:constraint fk_abc(外键名) foreign key (自己表中的外键列) references table1(引用表的外键列) //table1 是被引用的表
create table userinfo(
uid int auto_increment primary key,
name varchar(32),
department_id int,
xx_id int,
constraint fk_user_depar foreign key (department_id) references color(id)
)engine=innodb default charset=utf8;
create table department(
id bigint auto_increment primary key,
title char(15)
)engine=innodb default charset=utf8;
那么如果不想重复时,如何制定约束关系呢?
这时通常采用外键+唯一索引的方式进行指定。
create table userinfo1(
id int auto_increment primary key,
name char(10),
gender char(10),
email varchar(64)
)engine=innodb default charset=utf8;
create table admin(
id int not null auto_increment primary key,
username varchar(64) not null,
password VARCHAR(64) not null,
user_id int not null,
unique uq_u1 (user_id),
CONSTRAINT fk_admin_u1 FOREIGN key (user_id) REFERENCES userinfo1(id)
)engine=innodb default charset=utf8;
此种情况可以称为一对一
那么接下来多对多的情况。
create table userinfo2(
id int auto_increment primary key,
name char(10),
gender char(10),
email varchar(64)
)engine=innodb default charset=utf8;
create table host(
id int auto_increment primary key,
hostname char(64)
)engine=innodb default charset=utf8;
create table user2host(
id int auto_increment primary key,
userid int not null,
hostid int not null,
unique uq_user_host (userid,hostid),
CONSTRAINT fk_u2h_user FOREIGN key (userid) REFERENCES userinfo2(id),
CONSTRAINT fk_u2h_host FOREIGN key (hostid) REFERENCES host(id)
)engine=innodb default charset=utf8;