gpt4 book ai didi

MySQL:当 FK 启用删除级联时截断 `myTable` 时出错

转载 作者:搜寻专家 更新时间:2023-10-30 20:12:12 24 4
gpt4 key购买 nike

我有一个 mysql ERM 的问题,这让我抓狂。我有一个名为 usuaris_backoffice 的表用于存储后台用户,然后我还有一个名为 usuaris_backoffice_permisos 的表用于存储每个用户的权限。我还有一个名为 perfils 的表,其中我存储了一些可以由 backoffice users 编辑的配置文件,因此要有一个版本历史,有一个名为 perfils_usuari_backoffice< 的表 我存储哪个 profile 已被每个 user 修改。然后我还有一个名为 widgets 的表格,它也可以由用户编辑,因此 widgets 版本历史存储在 widgets_usuari_backoffice 中。 FK 启用级联删除,因此当用户从 usuaris_backoffice 中删除时,其权限也会从 usuaris_backoffice_permisos 中删除。当我尝试时出现问题:

 truncate usuaris_backoffice_permisos

这给了我以下错误:

 1701 - Cannot truncate a table referenced in a foreign key constraint (`test`.`usuaris_backoffice_permisos`, CONSTRAINT `FK_F8F850F3D001730C` FOREIGN KEY (`usuari_backoffice_id`) REFERENCES `test`.`usuaris_backoffice` (`id`)) 

由于这 6 个表是最大的 ERM 的一部分,我创建了一个小型测试环境以便能够运行一些测试,因此以下代码可用于创建填充:

CREATE TABLE perfils_usuari_backoffice (perfil_id INT NOT NULL, login VARCHAR(20) NOT NULL, updated_at DATETIME NOT NULL, INDEX IDX_870785D657291544 (perfil_id), INDEX IDX_870785D6AA08CB10 (login), PRIMARY KEY(perfil_id, login, updated_at)) ENGINE = InnoDB;CREATE TABLE usuaris_backoffice (id INT AUTO_INCREMENT NOT NULL, login VARCHAR(20) NOT NULL, password VARCHAR(32) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, UNIQUE INDEX UNIQ_95E4B6E5AA08CB10 (login), PRIMARY KEY(id)) ENGINE = InnoDB;CREATE TABLE usuaris_backoffice_permisos (id INT AUTO_INCREMENT NOT NULL, usuari_backoffice_id INT NOT NULL, es_admin TINYINT(1) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX IDX_F8F850F3D001730C (usuari_backoffice_id), PRIMARY KEY(id)) ENGINE = InnoDB;CREATE TABLE widgets_usuari_backoffice (widget_id INT NOT NULL, usuari_backoffice_id INT NOT NULL, updated_at DATETIME NOT NULL, INDEX IDX_43DA3B33FBE885E2 (widget_id), INDEX IDX_43DA3B33D001730C (usuari_backoffice_id), PRIMARY KEY(widget_id, usuari_backoffice_id, updated_at)) ENGINE = InnoDB;CREATE TABLE widgets (id INT AUTO_INCREMENT NOT NULL, classe VARCHAR(20) NOT NULL, updated_at DATETIME NOT NULL, UNIQUE INDEX UNIQ_9D58E4C18F87BF96 (classe), PRIMARY KEY(id)) ENGINE = InnoDB;CREATE TABLE perfils (id INT AUTO_INCREMENT NOT NULL, actiu TINYINT(1) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;ALTER TABLE perfils_usuari_backoffice ADD CONSTRAINT FK_870785D657291544 FOREIGN KEY (perfil_id) REFERENCES perfils (id) ON DELETE CASCADE;ALTER TABLE usuaris_backoffice_permisos ADD CONSTRAINT FK_F8F850F3D001730C FOREIGN KEY (usuari_backoffice_id) REFERENCES usuaris_backoffice (id) ON DELETE CASCADE;ALTER TABLE perfils_usuari_backoffice ADD CONSTRAINT FK_870785D6AA08CB10 FOREIGN KEY (login) REFERENCES usuaris_backoffice (login) ON DELETE CASCADE;ALTER TABLE widgets_usuari_backoffice ADD CONSTRAINT FK_43DA3B33D001730C FOREIGN KEY (usuari_backoffice_id) REFERENCES usuaris_backoffice (id) ON DELETE CASCADE;ALTER TABLE widgets_usuari_backoffice ADD CONSTRAINT FK_43DA3B33FBE885E2 FOREIGN KEY (widget_id) REFERENCES widgets (id) ON DELETE CASCADE;INSERT INTO `test`.`usuaris_backoffice` (`id` ,`login` ,`password` ,`created_at` ,`updated_at`)VALUES (NULL , 'edgar', '1234', '2011-10-06 00:00:00', '2011-10-06 00:00:00');INSERT INTO `test`.`usuaris_backoffice_permisos` (`id`, `usuari_backoffice_id`, `es_admin`, `created_at`, `updated_at`) VALUES (NULL, '1', '0', '2011-10-06 00:00:00', '2011-10-06 00:00:00');INSERT INTO `test`.`perfils` (`id`, `actiu`, `created_at`, `updated_at`) VALUES (NULL, '0', '2011-10-06 00:00:00', '2011-10-06 00:00:00');INSERT INTO `test`.`perfils_usuari_backoffice` (`perfil_id`, `login`, `updated_at`) VALUES ('1', 'edgar', '2011-10-06 00:00:00');INSERT INTO `test`.`widgets` (`id`, `classe`, `updated_at`) VALUES (NULL, 'hola', '2011-10-06 00:00:00');INSERT INTO `test`.`widgets_usuari_backoffice` (`widget_id`, `usuari_backoffice_id`, `updated_at`) VALUES ('1', '1', '2011-10-06 00:00:00');

Code which returns the error is:

TRUNCATE usuaris_backoffice_permisos;
TRUNCATE perfils_usuari_backoffice;
TRUNCATE widgets_usuari_backoffice;
TRUNCATE usuaris_backoffice;

非常感谢您的宝贵时间,希望有人能提供帮助:)

最佳答案

看看http://dev.mysql.com/doc/refman/5.5/en/truncate-table.html .它说

TRUNCATE TABLE fails for an InnoDB table if there are any FOREIGN KEY constraints from other tables that reference the table. Foreign key constraints between columns of the same table are allowed.

来自 here它看起来在一些以前的版本中有效

关于MySQL:当 FK 启用删除级联时截断 `myTable` 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7676407/

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