我有两个表,TABLE_1
和TABLE_2
。
TABLE_1
包含ID
和NAME
,其中ID
是主键。
TABLE_2
包含ID
和DATA
,其中ID
和DATA
构成复合主键。
我正在寻找一个SQL查询,当ID
更改TABLE_2
时,TABLE_1
更新ID NAME
100 LLL
101 KKK
102 JJJ
。
如何创建此表结构?
TABLE_1
ID DATA
100 HHHHHHH
100 MMMMMMM
100 ZZZZZZZ
101 IIIIIII
101 FFFFFFF
102 EEEEEEE
TABLE_2
{{1}}
感谢您的帮助。
答案 0 :(得分:1)
不知道为什么你需要这样做,但无论如何。
实现此目的的一种方法是使用InnoDB存储引擎中提供的foreign key constraints:
CREATE TABLE `TABLE_1` (
`ID` int NOT NULL,
`NAME` varchar(255) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB;
CREATE TABLE `TABLE_2` (
`ID` int(11) NOT NULL,
`DATA` varchar(255) NOT NULL,
PRIMARY KEY (`ID`,`DATA`),
CONSTRAINT `FK_ID` FOREIGN KEY (`ID`)
REFERENCES `TABLE_1` (`ID`)
ON UPDATE CASCADE
ON DELETE CASCADE
) ENGINE=InnoDB;
只要修改ID
中的TABLE_2
(ID
),上表结构就会更新TABLE_1
的所有匹配ON UPDATE CASCADE
。此外,每当您从ID
删除TABLE_1
时,TABLE_2
中的所有匹配条目也将被删除(ON DELETE CASCADE
)。由于此约束,ID
中的TABLE_2
必须存在于TABLE_1
中才能成功完成INSERT
。
另外请记住,外键会影响性能,但如果不确切知道为什么会这样,我就无法提出更好的解决方案。