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

SQL Error 1452 while UPDATE non key columns

我有那两个表...

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 table 中删除 DEFAULT CURRENT_TIMESTAMP,因为您总是希望从 parent table.[=22 中插入正确的时间戳=]

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

此外,我建议使用 AUTO_INCREMENT PRIMARY KEY

也不清楚您为什么需要 MailHeader table。您也可以将 titleseenreply 列添加到 Mail table。 (我想没有 header 邮件就不可能存在。)