MySQL 尝试截断表时出错

标签 mysql

我在截断 MySQL Server 5.5 上的表时遇到问题。

我尝试截断的表有一列充当另一个表中的外键。

涉及的两个表的CREATE TABLE如下:

CREATE TABLE `tbluser` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `creationDate` datetime NOT NULL,
  `creationUserId` int(11) NOT NULL,
  `updateDate` datetime NOT NULL,
  `updateUserId` int(11) NOT NULL,
  `lastAccess` datetime NOT NULL,
  `enabled` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`),
  UNIQUE KEY `email_UNIQUE` (`email`),
  KEY `FK_tbluser_creationUserId` (`creationUserId`),
  KEY `FK_tbluser_updateUserId` (`updateUserId`),
  CONSTRAINT `FK_tbluser_updateUserId` FOREIGN KEY (`updateUserId`) REFERENCES `tbluser` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_tbluser_creationUserId` FOREIGN KEY (`creationUserId`) REFERENCES `tbluser` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

CREATE TABLE `tblpost` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `content` mediumtext NOT NULL,
  `creationDate` datetime NOT NULL DEFAULT '1901-01-01 00:00:00',
  `creationUserId` int(11) NOT NULL,
  `updateDate` datetime NOT NULL DEFAULT '1901-01-01 00:00:00',
  `updateUserId` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_tblpost_creationUserId` (`creationUserId`),
  KEY `FK_tblpost_updateUserId` (`updateUserId`),
  CONSTRAINT `FK_tblpost_updateUserId` FOREIGN KEY (`updateUserId`) REFERENCES `tbluser` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_tblpost_creationUserId` FOREIGN KEY (`creationUserId`) REFERENCES `tbluser` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

请注意,所有约束均设置为 DELETEUPDATE ON CASCADE

当我尝试截断表时:

TRUNCATE TABLE `<databasename>`.`tbluser`;

我收到以下错误消息:

Cannot truncate a table referenced in a foreign key constraint
(`<databasename>`.`tblpost`, 
CONSTRAINT `FK_tblpost_updateUserId` 
FOREIGN KEY (`updateUserId`) 
REFERENCES `<databasename>`.`tbluser` (`id`))

除了这些信息之外,还有一个事实是,当在 MySQL Server 5.1 上尝试执行上述操作时,它会起作用!

有人知道为什么会发生这种情况吗?

最佳答案

检查here 。在这种情况下,TRUNCATE TABLE 会引发错误,这是有道理的;糟糕的是它没有记录在案。

关于MySQL 尝试截断表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41217493/

相关文章:

mysql - CakePHP 的多表通用查询模型

php - XAMPP 中的 phpMyAdmin 错误 #1146

javascript - 将参数从 JavaScript 函数传递到 JSP

php - 为什么这个页面添加号码和重定向失败?

mysql - 反优化 MySQL

php - if 语句在 echo?

如果表 1 中缺少记录,则 MySQL 查询将值插入表 2

mysql - 对具有不同列数/名称的表组合多个 select * 查询,以便导出到不同的数据库

mysql - SQL ORDER BY 与数字的困境

MySQL:当 'flag' 列的值为 1 时,从 SUM 函数中删除行