SQL触发器和外键连用

起因:为防止数据冗余,我建立了两个表,一个用户表user(表里面只存放了id(主键)、用户名、密码)和用户信息表usr_Info(表中有手机号、邮箱、姓名、家庭地址等字段)。

问题来了:我的想法是每向user里新增加一条数据,相应的usrInfo也会增加一条数据,作为user表的扩展字段。

第一步我在usr_Info表中添加了外键,目的是当主表user数据发生变化时(如删除数据),usr_Info表中相应的数据也会被删除。

第二步:也是我产生的问题,当主表删除数据时,外键会有变化,但是当主表插入数据时,外键不会有任何相应的操作,自然也就无法做主表的扩展表。所以我使用了触发器,当主表插入数据时,主表会产生一个新的id,然后通过触发器向usr_Info插入相应的id,这样主表id就和外键id是一致的,之后就可以通过关联查询使usr_Info表作为user的扩展表了。

解决方案:

1、首先建立两张表:

1)user表:

 

2)usr_Info表:

2、为user表建立触发器

AFTER:执行语句在insert操作之后执行

insert into usr_Info(usr_id) values(new.id):触发器触发的语句

new.id:当user表插入数据时,由于id是主键且自增长,所以id会变化,new.id即为新增字段的id

3、为usr_Info表建立外键

CASCADE:当主表发生变化时,外键会发生相应的变化

4、插入效果:

主表:

从表:

5、删除效果:

主表:

从表:

6、最后通过user.id=usr_Info进行关联查询

关联查询结果:

 

参考:https://www.cnblogs.com/zhangzhongxian/p/7070277.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值