Mysql 使用外键约束更新值
我对SQL有点陌生,所以我不确定我是否做了正确的事情。我有两张表是这样构建的:Mysql 使用外键约束更新值,mysql,constraints,Mysql,Constraints,我对SQL有点陌生,所以我不确定我是否做了正确的事情。我有两张表是这样构建的: CREATE TABLE `TableA` ( `id_A` int(11) NOT NULL, `name` varchar(100) NOT NULL, PRIMARY KEY (`id_A`), UNIQUE KEY `name_UNIQUE` (`name`) ); CREATE TABLE `TableB` ( `id_B` int(11) NOT NULL, `id_A` in
CREATE TABLE `TableA` (
`id_A` int(11) NOT NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id_A`),
UNIQUE KEY `name_UNIQUE` (`name`)
);
CREATE TABLE `TableB` (
`id_B` int(11) NOT NULL,
`id_A` int(11) NOT NULL,
PRIMARY KEY (`id_B`),
KEY `id_A` (`id_A`),
CONSTRAINT `fk_id_A` FOREIGN KEY (`id_A`) REFERENCES `TableA` (`id_A`),
);
因此,这些表由字段id_A和表b中所示的约束链接。现在,由于一些外部原因,我必须更新TableA中字段id_A的一些值,当然我必须更新TableB中的相关行
我的第一次尝试是直接使用更新查询,但我得到了一个错误,说约束不允许更改,因为TableB(doh!)正在使用id_A:
错误代码:1451。无法删除或更新父行:外键
约束失败('myserver/TableB',约束'k_id_A'外键
('id_A')引用了'TableA'('id_A'))
所以我的第一个想法是禁用约束,修改表并再次设置约束。然而,这意味着是一个设计用于编辑数据库中的某些东西的工具,我希望避免禁用(或删除)约束,因为有人可能会在更新的中间关闭工具或某些东西,而不使用它就离开表。
我一直在尝试使用一个包含我需要的查询的事务,而不是只执行几个查询,但是我仍然得到了前面的错误。到目前为止,我的想法是:
谢谢大家。首先,编辑一行的ID键通常是个坏主意,但我不会质疑这一点 您应该对约束使用
CASCADE
行为,更改当前表
[...] CONSTRAINT `fk_id_A` FOREIGN KEY (`id_A`) REFERENCES `TableA` (`id_A`) ON UPDATE CASCADE
[编辑]中有关此主题的详细信息