我想创建一个大表的小副本,并链接它们。每次我更新一个大的,我希望小的也更新。例如,我有以下数据:大table:
id | name | price1 | a | 102 | b | 12
id | name | price
1 | a | 10
2 | b | 12
小table:
id | name1 | a2 | b
id | name
1 | a
2 | b
----更新较大的一个---大表:
id | name | price1 | y | 102 | b | 123 | c | 13
1 | y | 10
3 | c | 13
小表应自动变为(更新大表后):
id | name1 | y2 | b3 | c
1 | y
3 | c
你知道怎么做吗?
6tdlim6h1#
要做到你所要求的,你可以使用触发器。触发器是在某些事件发生时自动执行的sql。要镜像数据,需要创建update、insert和delete触发器(我目前无法访问mysql示例进行测试,因此可能会出现输入错误)
CREATE TRIGGER big_to_small_insertAFTER INSERT ON bigFOR EACH ROWINSERT 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.idCREATE TRIGGER big_to_small_deleteAFTER DELETE ON bigFOR EACH ROWDELETE FROM small WHERE id = OLD.id
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
UPDATE small SET name = NEW.name WHERE id = NEW.id
CREATE TRIGGER big_to_small_delete
AFTER DELETE ON big
DELETE FROM small WHERE id = OLD.id
但是,如果“小”表实际上只是包含数据子集的大表,那么视图可能是更好的选择。视图不会存储数据的副本,因此如果更新表(大),它将反映在视图(小)中,但情况正好相反。如果在视图(小)上执行插入、更新或删除操作,它将实际发生在表(大)中。
CREATE VIEW small ASSELECT id, name FROM big
CREATE VIEW small AS
SELECT id, name FROM big
1条答案
按热度按时间6tdlim6h1#
要做到你所要求的,你可以使用触发器。触发器是在某些事件发生时自动执行的sql。要镜像数据,需要创建update、insert和delete触发器(我目前无法访问mysql示例进行测试,因此可能会出现输入错误)
但是,如果“小”表实际上只是包含数据子集的大表,那么视图可能是更好的选择。视图不会存储数据的副本,因此如果更新表(大),它将反映在视图(小)中,但情况正好相反。如果在视图(小)上执行插入、更新或删除操作,它将实际发生在表(大)中。