MySQL 尝试创建多对多关系时出错
MySQL error when trying to create many to many relationship
我正在尝试在 'Rol' 和 'Permisos' 之间创建多对多关系,这是我的代码
Table 'Rol':
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;
Table '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 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 Error Code: 3780. Referencing column 'rol_id' and referenced
column 'idrol' in foreign key constraint 'rol_permiso_rol' are
incompatible. 0.000 sec
有人知道发生了什么事吗?请帮忙
提供的表格没有问题。
也许您在数据库中使用了不同的表?
运行
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<>fiddle here
我正在尝试在 'Rol' 和 'Permisos' 之间创建多对多关系,这是我的代码
Table 'Rol':
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;
Table '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 CREATE TABLE
tienda_v1
.rol_permiso
(rol_id
INT NOT NULL,permiso_id
INT NOT NULL, PRIMARY KEY(rol_id
,permiso_id
), CONSTRAINTrol_permiso_rol
FOREIGN KEYrol_table_fk
(rol_id
) REFERENCESrol
(idrol
)
ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINTrol_permiso_permiso
FOREIGN KEYpermiso_table
(permiso_id
) REFERENCESpermiso
(idpermiso
) ON DELETE CASCADE ON UPDATE CASCADE )ENGINE = InnoDB Error Code: 3780. Referencing column 'rol_id' and referenced column 'idrol' in foreign key constraint 'rol_permiso_rol' are incompatible. 0.000 sec
有人知道发生了什么事吗?请帮忙
提供的表格没有问题。
也许您在数据库中使用了不同的表?
运行
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<>fiddle here