Вы можете каскадно обновлять одну таблицу (см. Пример кода), используя первичные и внешние ключи;к сожалению, вы не можете сделать это с более чем одной таблицей из каждой исходной таблицы, если внешние ключи для двух целевых таблиц не совпадают (это также немного уродливо с точки зрения первичного ключа в исходной таблице !!).
Вы также можете использовать триггеры здесь (осторожно!).
Вот код для каскада из таблицы3 в таблицу1 в любом случае:
-- Set up Data
CREATE TABLE table1 (
sno SMALLINT,
sname VARCHAR(3),
amount INT,
CONSTRAINT PK_table1 PRIMARY KEY (
sno,
amount
)
)
INSERT INTO table1 VALUES (1, 'aaa', 23)
INSERT INTO table1 VALUES (2, 'bbb', 34)
INSERT INTO table1 VALUES (3, 'ccc', 98)
CREATE TABLE table2 (
sno SMALLINT,
sprice INT,
CONSTRAINT PK_table2 PRIMARY KEY (
sno,
sprice
)
)
INSERT INTO table2 VALUES (1, 34)
INSERT INTO table2 VALUES (2, 78)
INSERT INTO table2 VALUES (3, 87)
CREATE TABLE table3 (
sno SMALLINT,
amount INT,
sprice INT,
CONSTRAINT PK_table3 PRIMARY KEY (
sno,
amount
)
)
-- Data same as table1 and table2 for starting
INSERT INTO table3 VALUES (1, 23, 34)
INSERT INTO table3 VALUES (2, 34, 78)
INSERT INTO table3 VALUES (3, 98, 87)
-- Cascading updates between foreign keyed tables
ALTER TABLE table1 ADD CONSTRAINT FK_table1_table3 FOREIGN KEY (sno, amount) REFERENCES table3 (sno, amount) ON UPDATE CASCADE
-- Original Table 1
SELECT * FROM table1
-- Updates table 3 (cascades to table 1)
UPDATE table3
SET amount = 65,
sprice = 78
WHERE sno = 1
UPDATE table3
SET amount = 43,
sprice = 76
WHERE sno = 2
UPDATE table3
SET amount = 34,
sprice = 45
WHERE sno = 3
-- Prove cascade
SELECT *
FROM table1
--Tidy Up
DROP TABLE table1
DROP TABLE table2
DROP TABLE table3