在实际开发中,我们创建表和表之间关联的时候很少用到外键,但是有时候需要用到外键,准确地说是用到外键的级联动作,例如你有一张用户表,存了一些用户的基本信息user表,如果这张表中的属性过多,我们可能需要另一张表也用来存储用户的信息,比如存一些登录信息,就叫login_user表,很明显这时候在login_user中设置一个外键去关联user表更合适,虽然不用外键也可以达到效果(使用触发器当然也行),为什么要设置外键呢?是因为我想在user表中删除一条记录的时候同时把user_login相应的记录也删除掉。好了于是我们在login_user表中添加了一个外键列user_id关联user表中的id,这时user表就叫父表,我们现在研究的是父表的删除和更新操作对子表的影响
这种影响有四个分类:cascade、set null 、restrict、no action。
1、cascade,如果你设置外键的更新或删除时设置为cascade,那么你对父表的删除或更新操作同时会删除或更新到子表,就以上面的两张表为例,你如果在user表中删除了一条id=1,001的记录,那么user_login中外键列user_id=1001 的记录都会被删除掉(如果没有的话当然不会删喽)。如果你把user表中的id=1002的记录改为id=100002那么在user_login表中外键列user_id=1002的记录也会全部改为100002,如果你不修改user表中的对照列id,去修改别的属性,那当然不会影响子表什么。这就是cascade。
2、no action 和 restrict 相同,