我想创建一个更大的表的小副本并将它们链接在一起。 每当我在较大的数据库中进行更新时,我都希望较小的数据库也进行更新。 例如,我有以下数据:
大桌子:
id | name | price
1 | a | 10
2 | b | 12
小桌子:
id | name
1 | a
2 | b
----更新更大的一个--- 大表:
id | name | price
1 | y | 10
2 | b | 12
3 | c | 13
小桌子应该自动(在我更新了更大的桌子之后):
id | name
1 | y
2 | b
3 | c
你知道怎么做吗?
答案 0 :(得分:0)
要完全按照您的要求进行操作,可以使用触发器。触发器是在某些事件发生时自动执行的SQL。要镜像数据,您将需要创建UPDATE,INSERT和DELETE触发器。 (我目前无法访问MySQL实例进行测试,因此可能会有错别字)
CREATE TRIGGER big_to_small_insert
AFTER INSERT ON big
FOR EACH ROW
INSERT INTO small (id, name) VALUES (NEW.id, NEW.name)
CREATE TRIGGER big_to_small_update
AFTER UPDATE ON big
FOR EACH ROW
UPDATE small SET name = NEW.name WHERE id = NEW.id
CREATE TRIGGER big_to_small_delete
AFTER DELETE ON big
FOR EACH ROW
DELETE FROM small WHERE id = OLD.id
但是,如果“小”表实际上只是具有数据子集的大表,则视图可能是更好的选择。视图不会存储数据的副本,因此,如果更新表(大),它将反映在视图(小)中,但相反的情况也是如此。如果在视图(小)上执行INSERT,UPDATE或DELETE,则实际上会在表(大)中发生。
CREATE VIEW small AS
SELECT id, name FROM big