MySQL外键操作
MySQL外键操作
外键就是将两张或多张表,关联起来,使其一张表的某行数据与另一张表的某行数据关联起来。
使表1的外键与表2的主键关联,这样就可以通过表1的外键,找到表2的主键所在行的数据。
create table userinfo(
uid bigint auto_increment primary key,
name varchar(255),
department_id int,
constraint fk_userinfo_department foreing key (department_id) references department (id)
)engine = innodb default charset=utf8;
constraint是约束,fk_userinfo_department是外键的名称。
foreing key开始指定外键为department_id,references设置外键关联到表名department。
最后设置外键需要关联到的department表的字段,id字段。
create table department(
id bigint auto_increment primary key,
title varchar(255)
)engine = innodb default charset=utf8;
这样就使userinfo表中department_id成为了外键。和department表中的id关联了。
多个约束外键就是在UserInfo表中再多些一行constraint。
样例:
create table userinfo(
uid bigint auto_increment primary key,
name varchar(255),
department_id int,
xx_id int,
constraint fk_userinfo_department foreing key (department_id) references department (id),
constraint fk_xx_class foreing key (xx_id) references class (cid) #外键名为fk_xx_class,主表字段是xx_id,关联表为class,被关联字段为cid。
)engine = innodb default charset=utf8;
扩展:
一张表只能有一个主键,但是一个主键可以是多列。多列可以合起来做一个主键,只要多列合起来唯一就可以。
样例:
create table t1(
nid int(11) not null auto_increment ,
pid int(11) not null,
num int(11) default null,
primary key (nid,pid) #这样是创建了一个由nid和pid组合的一个主键。
)engine = innodb default charset=utf8;
create table t2(
id int auto_increment primary key,
name varchar(255),
id1 int,
id2 int,
constraint fk_t2_t1 foreing key (id1,id2) references t1 (nid,pid),
)engine = innodb default charset=utf8;
------ END ------