如果PREARY KEY由FOREIGN KEY引用,则MySQL REPLACE的行为与UPDATE不同
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如果PREARY KEY由FOREIGN KEY引用,则MySQL REPLACE的行为与UPDATE不同,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2022字,纯文字阅读大概需要3分钟。
内容图文
我有两张桌子:
CREATE TABLE `category` (
`category_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` mediumint(8) unsigned NOT NULL,
`name` varchar(20) CHARACTER SET ascii NOT NULL,
`description` varchar(100) DEFAULT NULL,
`repeat_interval` tinyint(3) unsigned NOT NULL DEFAULT '0',
`color` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`category_id`),
KEY `id` (`user_id`),
CONSTRAINT `category_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `event` (
`event_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`category_id` int(10) unsigned NOT NULL,
`name` varchar(20) CHARACTER SET ascii NOT NULL,
`description` varchar(100) DEFAULT NULL,
`repeat_interval` tinyint(3) unsigned NOT NULL DEFAULT '0',
`color` mediumint(8) unsigned NOT NULL,
`priority` tinyint(3) unsigned NOT NULL DEFAULT '0',
`start` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`end` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`done` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`event_id`),
KEY `category_id` (`category_id`),
CONSTRAINT `event_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果我在类别表(一行)中创建REPLACE,则将丢弃引用类别表中已修改行的事件表中的所有条目.
但是如果我在类别表中更新一行,那么事件表中的条目保持不变.
为什么会出现这种情况,为什么当我更新所有引用该列的条目时会被丢弃?
我尝试使用ON UPDATE CASCADE和默认的相同行为.
谷歌无法帮助我.
解决方法:
你有ON DELETE CASCADE外键,而替换只是“删除然后插入新版本” – 似乎ON DELETE触发器被触发.
来自Mysql文档:
REPLACE works exactly like INSERT, except that if an old row in the
table has the same value as a new row for a PRIMARY KEY or a UNIQUE
index, the old row is deleted before the new row is inserted. See
Section 12.2.5, “INSERT Syntax”.
我建议你读一下:http://dev.mysql.com/doc/refman/5.0/en/replace.html
要解决此问题,您可能希望使用ON DUPLICATE KEY UPDATE插入语法:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
内容总结
以上是互联网集市为您收集整理的如果PREARY KEY由FOREIGN KEY引用,则MySQL REPLACE的行为与UPDATE不同全部内容,希望文章能够帮你解决如果PREARY KEY由FOREIGN KEY引用,则MySQL REPLACE的行为与UPDATE不同所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。