MySQL创建关联表可以理解为是两个表之间有个外键关系,但这两个表必须满足三个条件
1.两个表必须是InnoDB数据引擎
2.使用在外键关系的域必须为索引型(Index)
3.使用在外键关系的域必须与数据类型相似
例如:
1、建立s_user表
create table s_user(
u_id int auto_increment primary key,
u_name varchar(15),
u_pwd varchar(15),
u_truename varchar(20),
u_role varchar(6),
u_email varchar(30)
)
2、
插入几条数据
insert into s_user values
(1,"wangc","aaaaaa","wangchao","buyer","[email protected]"),
(2,"huangfp","bbbbbb","huangfp","seller","[email protected]"),
(3,"zhang3","cccccc","zhangsan","buyer","[email protected]"),
(4,"li4","dddddd","lisi","seller","[email protected]")
3、
建立s_orderform表
create table s_orderform(
o_id int auto_increment primary key,
o_buyer_id int,
o_seller_id int,
o_totalprices double,
o_state varchar(50),
o_information varchar(200),
foreign key(o_buyer_id) references s_user(u_id), #外链到s_user表的u_id字段
foreign key(o_seller_id) references s_user(u_id) #外链到s_user表的u_id字段
)
Alter table[] drop forienkey[标示符]
alter table[] add foreign key(o_buyer_id) references s_user(u_id) on delete set null
on update restrict
再添加
建立外键后,有什么影响呢?
1>如果所指向的s_user 的u_id不存在时, 在insert从表时是不成功的
2>主表增加记录是不受从表影响
3>当主表对应的实体数据发生改变时,从表该怎么处理?
主表删除 on delete
casecade 关联操作,主表删除或者删除时,那么从表也会执行相应的操作(主表删除,从表也删出,由于数据不可逆,慎用)
set null 设置为null,表示从表不指向任何主表记录(经常用,数据也安全)
restrict ,拒绝主表的相关操作
主表更新 on update
更新的时候,只有主表的主键发生改变的时候,从表才有影响
实际工作中:一般很少建立实际外键,是名义上的外键关联,并不进行逻辑的外键关联,
一般级联操作都是执行多条sql操作,再此看来,外键有点有名无实,一般数据管理员会使用