mysql设置on set null_mysql – 多列外键:将单列设置为Null“ON D...

经过一些研究后,似乎特定要求无法使用外键实现.

最好的解决方案似乎是混合使用外键和触发器.

通过以下语句可以解决给定示例的问题:

CREATE TABLE lectures (

lectureId INT NOT NULL,

title VARCHAR(10) NOT NULL,

PRIMARY KEY (lectureId)

);

CREATE TABLE groups (

lectureId INT NOT NULL,

groupNo INT NOT NULL,

title VARCHAR(10) NOT NULL,

PRIMARY KEY (lectureId,groupNo),

FOREIGN KEY (lectureId) REFERENCES lectures (lectureId)

ON UPDATE CASCADE ON DELETE CASCADE

);

CREATE TABLE studentListed (

studentId INT NOT NULL,

lectureId INT NOT NULL,

groupNo INT NULL,

PRIMARY KEY (studentId,lectureId),

FOREIGN KEY (lectureId) REFERENCES lectures (lectureId)

ON UPDATE CASCADE ON DELETE CASCADE,

FOREIGN KEY (lectureId,groupNo) REFERENCES groups (lectureId,groupNo)

ON UPDATE CASCADE ON DELETE CASCADE

);

CREATE TRIGGER GroupDelete BEFORE DELETE ON groups

FOR EACH ROW

UPDATE studentListed SET studentListed.groupNo = NULL

WHERE studentListed.lectureId = OLD.lectureId

AND studentListed.groupNo = OLD.groupNo;

请注意,最后一个外键的“ON DELETE CASCADE”将永远不会导致级联删除,因为Trigger已通过使相应行归零来删除外键引用.

增加:不使用“ON DELETE CASCADE”,而是可以使用相同触发器的“ON DELETE SET NULL”,但是“lectureId”必须是可空的,并且应该包含“CHECK(讲话不是空)”以确保它永远不会设置为null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值