我有两张桌子:
CREATE TABLE `osoby_dane` (
`os_id` int(6) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`imie` text,
`status` int(1)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `osoby_rank` (
`os_id` int(6) NOT NULL PRIMARY KEY,
`os_rank` int DEFAULT 1000,
`status` int(1),
CONSTRAINT `fk_rank` FOREIGN KEY (os_id) REFERENCES osoby_dane(os_id) on update cascade on delete restrict
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
示例:
osoby_dane:
os_id | imie | status | 1 |John |1 |
osoby_rank:
os_id | os_rank | status | 1 | 1400 | 1 |
我的问题是我怎样才能(如果我可以......)一对一地连接相同行(状态列)中的字段(如果我在一个表中编辑状态字段,那么在第二个中它将自动更改)。而且我不想使用触发功能
答案 0 :(得分:1)
如果您不想使用触发器或外键,则无法自动使osoby_rank.status
更新以匹配osoby_dane.status
。
更改后,您必须明确更改两列中的status
。
例如,您可以执行多表更新:
UPDATE osoby_dane INNER JOIN osoby_rank USING (os_id)
SET osoby_dane.status = 2,
osoby_rank.status = 2
WHERE osoby_dane.os_id = 1;
正如@MarcusAdams建议的那样,另一个解决方案是将status
存储在一个表或另一个表中,以避免冗余列。
答案 1 :(得分:0)
make in osoby_rank CONSTRAINT
and osoby_dane make fk_status
FOREIGN KEY (os_id, status) REFERENCES osoby_dane(os_id, status) on update cascadefk_status
它应该正常工作