【发布时间】:2018-11-20 02:14:47
【问题描述】:
我有那两张桌子...
CREATE TABLE `Mail` (
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`sender` varchar(255) NOT NULL DEFAULT '',
`receiver` varchar(255) NOT NULL DEFAULT '',
`text` longtext ,
PRIMARY KEY (`timestamp`,`sender`,`receiver`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
...和...
CREATE TABLE `MailHeader` (
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`sender` varchar(255) NOT NULL DEFAULT '',
`receiver` varchar(255) NOT NULL DEFAULT '',
`title` varchar(45) DEFAULT NULL,,
`seen` int(11) DEFAULT '0',
`reply` int(11) DEFAULT '0',
PRIMARY KEY (`timestamp`, `sender`, `receiver`),
CONSTRAINT `MailHeader_ibfk_1` FOREIGN KEY (
`timestamp`, `sender`, `receiver`) REFERENCES
`Mail` (`timestamp`, `sender`, `receiver`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
当我尝试像这样更新非键列时:
UPDATE MailHeader
SET `title` = ?, `seen` = ?, `reply` = ?
WHERE `sender` = ? and `receiver` = ?;
比我总是得到那个错误:
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException:
无法添加或更新子行:外键约束失败 (
usr_web4930_1.MailHeader, 约束MailHeader_ibfk_1外键 (timestamp,sender,receiver) 参考timestamp,sender,receiver)
我尝试了最简单的方法,在两个表中都有一条记录,并使用“MySQL-Workbench”工具更改非键列。有完全相同的错误。 我真的不明白...
【问题讨论】:
-
请发布样本数据和更新查询以重现该问题。
-
也请用实际代码替换
...。如果timestamp列有ON UPDATE CURRENT_TIMESTAMP- 这就是问题所在。 -
你们真的很快,伙计们。 :) 阅读“ON UPDATE CURRENT_TIMESTAMP”后,一切都变得清晰了。谢谢! ;)
标签: mysql sql mysql-error-1452