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

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

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

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

小table:

  1. id | name
  2. 1 | a
  3. 2 | b

----更新较大的一个---大表:

  1. id | name | price
  2. 1 | y | 10
  3. 2 | b | 12
  4. 3 | c | 13

小表应自动变为(更新大表后):

  1. id | name
  2. 1 | y
  3. 2 | b
  4. 3 | c

你知道怎么做吗?

6tdlim6h

6tdlim6h1#

要做到你所要求的,你可以使用触发器。触发器是在某些事件发生时自动执行的sql。要镜像数据,需要创建update、insert和delete触发器(我目前无法访问mysql示例进行测试,因此可能会出现输入错误)

  1. CREATE TRIGGER big_to_small_insert
  2. AFTER INSERT ON big
  3. FOR EACH ROW
  4. INSERT INTO small (id, name) VALUES (NEW.id, NEW.name)
  5. CREATE TRIGGER big_to_small_update
  6. AFTER UPDATE ON big
  7. FOR EACH ROW
  8. UPDATE small SET name = NEW.name WHERE id = NEW.id
  9. CREATE TRIGGER big_to_small_delete
  10. AFTER DELETE ON big
  11. FOR EACH ROW
  12. DELETE FROM small WHERE id = OLD.id

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

  1. CREATE VIEW small AS
  2. SELECT id, name FROM big
展开查看全部

相关问题