gpt4 book ai didi

mysql - 更新非键列时出现 SQL 错误 1452

转载 作者:行者123 更新时间:2023-11-29 17:29:06 27 4
gpt4 key购买 nike

我有那两张 table ...

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:

Cannot add or update a child row: a foreign key constraint fails (usr_web4930_1.MailHeader, CONSTRAINT MailHeader_ibfk_1 FOREIGN KEY (timestamp, sender, receiver) REFERENCES Mail (timestamp, sender, receiver)

我尝试了最简单的方法,两个表中都有一条记录,并使用“MySQL-Workbench”工具更改非键列。具有完全相同的错误。实在是没看懂……

最佳答案

正如您所发现的,您不仅更新非关键列ON UPDATE CURRENT_TIMESTAMP 属性还将更新 timestamp 列,该列是外键的一部分。

删除该属性将解决实际问题。但您还应该做更多改变:

MailHeader 表中删除 DEFAULT CURRENT_TIMESTAMP,因为您始终希望从父表插入正确的时间戳。

Mail 表中删除 ON UPDATE CURRENT_TIMESTAMP,以避免在您想要更新行时出现同样的问题。如果您从不更新,那么您也不需要该属性。

此外,我建议使用AUTO_INCRMENT PRIMARY KEY

也不清楚为什么您需要 MailHeader 表。您也可以将 titleseenreply 列添加到 Mail 表中。 (我猜邮件不能没有标题而存在。)

关于mysql - 更新非键列时出现 SQL 错误 1452,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50787388/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com