如何复制表(mysql)并自动更新新表?

sshcrbum  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(425)

我想创建一个大表的小副本,并链接它们。每次我更新一个大的,我希望小的也更新。例如,我有以下数据:
大table:

id | name | price
1  |  a   |  10
2  |  b   |  12

小table:

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

你知道怎么做吗?

6tdlim6h

6tdlim6h1#

要做到你所要求的,你可以使用触发器。触发器是在某些事件发生时自动执行的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

但是,如果“小”表实际上只是包含数据子集的大表,那么视图可能是更好的选择。视图不会存储数据的副本,因此如果更新表(大),它将反映在视图(小)中,但情况正好相反。如果在视图(小)上执行插入、更新或删除操作,它将实际发生在表(大)中。

CREATE VIEW small AS
SELECT id, name FROM big

相关问题