【问题标题】:MySQL error when trying to create many to many relationship尝试创建多对多关系时出现 MySQL 错误
【发布时间】:2023-12-26 05:38:02
【问题描述】:

我正在尝试在“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 秒

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

【问题讨论】:

    标签: mysql database many-to-many mysql-workbench relationship


    【解决方案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”上的主键未签名,我更改了它并且它起作用了!谢谢!
    最近更新 更多