我有一张桌子叫usuario
. 我用来创建它的代码如下:
CREATE TABLE IF NOT EXISTS `cumplimiento`.`usuario` (
`idusuario` VARCHAR(10) NOT NULL,
`pass` VARCHAR(100) NOT NULL,
`rol` INT NOT NULL,
`activo` TINYINT(1) NOT NULL,
`pregunta` VARCHAR(55) NULL,
`respuesta` VARCHAR(200) NULL,
PRIMARY KEY (`idusuario`),
INDEX `fk_usuario_rol1_idx` (`rol` ASC),
CONSTRAINT `fk_usuario_rol1`
FOREIGN KEY (`rol`)
REFERENCES `cumplimiento`.`rol` (`rol`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
表创建成功,一切正常。情况如下。我需要做一个UPDATE
aidusuario
并且该更改反映在该字段是外键的表中。
我发现这样做的方法是使用以下语句:
ON UPDATE CASCADE
例如,我有这张其他人表,其代码如下:
CREATE TABLE IF NOT EXISTS `cumplimiento`.`persona` (
`cif` INT NOT NULL,
`idusuario` VARCHAR(10) NOT NULL,
`numero_impresiones` INT NULL,
INDEX `fk_persona_usuario1_idx` (`idusuario` ASC),
PRIMARY KEY (`cif`),
CONSTRAINT `fk_persona_usuario1`
FOREIGN KEY (`idusuario`)
REFERENCES `cumplimiento`.`usuario` (`idusuario`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
而我明白,在下REFERENCES
是我的领域idusuario
。我也明白,在这个表中,我必须将 更改ON UPDATE NO ACTION
为ON UPDATE CASCADE
,依此类推,在我将此字段作为外键的其他表中。
现在基本上我还没有这样做,因为我有点害怕我的桌子可能会发生一些事情,我想有一个简单的方法可以做到这一点。我该如何改变呢?我是否必须使用相同的脚本并且只更改每个表的那部分?或者,它可以在 Workbench 中以某种方式完成吗?
在我看来,没有办法更新约束,你要做的是两件事:
因此,您必须这样做:
您可以查阅有关使用FOREIGN KEY Constraints的文档。
的确,塞萨尔的答案是正确的。感谢 César 的回答,我能够以图形方式在 Workbench 中找到一种方法。
Alter Table
并在底部选择Foreign Keys
。