mysql变种_MySQL--外键的变种

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值