MySQL--外键的变种
2019-06-23 20:15 风e逸 阅读(117) 评论(0) 收藏 举报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;
浙公网安备 33010602011771号