前面我们介绍了:
今天来介绍下如何通过唯一索引来约束外键不可以重复。
一、场景说明
需要开发有个博客系统,要求用户注册的用户名不能重复,同时每个用户对应一个博客的目录uri地址,用户名和博客目录uri都不可以重复,如何实现?
这里就用到我们今天要介绍的通过唯一索引来约束外键了。
二、实现
2.1、创建用户表
create table users( #创建用户表
uid int not null auto_increment primary key,
username char(8)
)ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
insert into users(username) values("zmr"),("ouyang"),("admin"); #插入三条数据
2.2、创建博客uri目录表
create table bloglist( #创建博客uri表
bid int not null auto_increment primary key,
bloguri char(18)
)ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
insert into bloglist(bloguri) values("zhuimengren"),("admin5"),("ouyang2019"); #插入三条数据
2.3、创建外键关联
create table user_blog_uri( #用户与博客uri关系表
id int not null auto_increment primary key,
user_id int not null,
bloguri_id int not null,
unique user_blogs (user_id,bloguri_id), #联合唯一索引,即user_id,bloguri_id的数据不可以重复
constraint fk_user_id_userlist foreign key (user_id) references users(uid), #外键1:本表的user_id跟users表的uid关联
constraint fk_bloguri_bloglist foreign key (bloguri_id) references bloglist(bid) #外键2:本表的bloguri_id跟bloglist表的bid关联
)ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
insert into user_blog_uri(user_id,bloguri_id) values(1,1),(2,3),(3,2); #插入关联数据
说明:
通过unique(唯一索引关键字)将用户与博客uri关系表(user_blog_uri)的user_id和bloguri_id字段创建为联合唯一索引,这样用户与博客uri关系表的user_id和bloguri_id数据列就不可以插入相同的数据了。