mysql建立外键约束

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","wang@163.com"),
      (2,"huangfp","bbbbbb","huangfp","seller","huang@126.com"),
      (3,"zhang3","cccccc","zhangsan","buyer","zhang@163.com"),
      (4,"li4","dddddd","lisi","seller","li@1256.com")

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操作,再此看来,外键有点有名无实,一般数据管理员会使用






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值