尝试创建多对多关系时出现 MySQL 错误

Posted

技术标签:

【中文标题】尝试创建多对多关系时出现 MySQL 错误【英文标题】:MySQL error when trying to create many to many relationship 【发布时间】:2021-08-28 19:33:36 【问题描述】:

我正在尝试在“Rol”和“Permisos”之间创建多对多关系,这是我的代码

表'角色':

CREATE TABLE IF NOT EXISTS `tienda_v1`.`rol` (
  `idrol` INT NOT NULL AUTO_INCREMENT,
  `nombre_rol` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`idrol`))
ENGINE = InnoDB;

表'Permiso':

CREATE TABLE IF NOT EXISTS `tienda_v1`.`permiso` (
  `idpermiso` INT NOT NULL AUTO_INCREMENT,
  `nombre_permiso` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`idpermiso`))
ENGINE = InnoDB;

这是我正在尝试的:

CREATE TABLE `tienda_v1`.`rol_permiso`(
    `rol_id` INT NOT NULL,
    `permiso_id` INT NOT NULL,
    PRIMARY KEY(`rol_id`,`permiso_id`),
    CONSTRAINT `rol_permiso_rol`
        FOREIGN KEY `rol_table_fk` (`rol_id`) REFERENCES `rol` (`idrol`)
        ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `rol_permiso_permiso`
        FOREIGN KEY `permiso_table` (`permiso_id`) REFERENCES `permiso` (`idpermiso`)
        ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE = InnoDB;

然后抛出这个输出:

17:25:39 创建表 tienda_v1.rol_permiso( rol_id INT NOT NULL,permiso_id INT NOT NULL,PRIMARY KEY(rol_id,permiso_id), 约束rol_permiso_rol 外键 rol_table_fk (rol_id) 参考 rol (idrol) ON DELETE CASCADE ON UPDATE CASCADE, 约束rol_permiso_permiso 外键permiso_table (permiso_id) 参考permisoidpermiso)在更新级联时删除级联)引擎= InnoDB 错误代码:3780。引用列 'rol_id' 并引用 外键约束“rol_permiso_rol”中的“idrol”列是 不相容。 0.000 秒

有人知道发生了什么吗?请帮忙

【问题讨论】:

【参考方案1】:

提供的表格没有问题。

也许您在数据库中使用不同的表?

运行

 SHOW CREATE TABLE rol

并检查是否相同

CREATE TABLE IF NOT EXISTS `rol` (
  `idrol` INT NOT NULL AUTO_INCREMENT,
  `nombre_rol` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`idrol`))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `permiso` (
  `idpermiso` INT NOT NULL AUTO_INCREMENT,
  `nombre_permiso` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`idpermiso`))
ENGINE = InnoDB;
CREATE TABLE `rol_permiso`(
    `rol_id` INT NOT NULL,
    `permiso_id` INT NOT NULL,
    PRIMARY KEY(`rol_id`,`permiso_id`),
    CONSTRAINT `rol_permiso_rol`
        FOREIGN KEY `rol_table_fk` (`rol_id`) REFERENCES `rol` (`idrol`)
        ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `rol_permiso_permiso`
        FOREIGN KEY `permiso_table` (`permiso_id`) REFERENCES `permiso` (`idpermiso`)
        ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE = InnoDB;

db小提琴here

【讨论】:

天哪,谢谢!不知道该命令,由于某种原因,“Rol”上的主键未签名,我更改了它并且它起作用了!谢谢!

以上是关于尝试创建多对多关系时出现 MySQL 错误的主要内容,如果未能解决你的问题,请参考以下文章

保持多对多关系时出现 PropertyAccessException

向核心数据添加记录时出现 NSSet 错误(多对多关系)

自跟踪实体 SaveChanges() 在多对多关系中添加实体时出现异常

Json序列化,有多对一和多对多关系时出现的问题

如何在 Sonata Media Bundle 中实现多对多关系

打印多对多实体时出现异常