尝试创建多对多关系时出现 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
) 参考permiso
(idpermiso
)在更新级联时删除级联)引擎= 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
自跟踪实体 SaveChanges() 在多对多关系中添加实体时出现异常