MySQL 合并重复键上的数据
MySQL merge data on duplicate key
我现在正在采用仪表板,我从前端为 selecting 创建了两个 table;
DATA_SELECTED_HISTORY
DATA_SELECTED_NOW
我的前端页面从 DATA_SELECTED_NOW
获取数据,我的后端算法将新数据放入该数据库。
我想把我的新数据放到DATA_SELECTED_NOW
,
和以前的数据在遇到重复键时被推送到DATA_SELECTED_HISTORY
。
我想我可以使用交换 table 解决方案或 insert(select subquery) + insert on duplicate key 解决方案,但我不知道了。
如何在 SQL 中使用此解决方案?
你可以在这种情况下使用触发器,在插入到 DATA_SELECTED_NOW 之前检查重复,如果重复插入 DATA_SELECTED_HISTORY,检查下面的代码
CREATE TRIGGER TRIGGER_Name
BEFORE INSERT ON DATA_SELECTED_NOW
FOR EACH ROW
BEGIN
IF (EXISTS(SELECT 1 FROM User WHERE key = NEW.Key)) THEN
-- you can replace "key = NEW.Key " with your logic to check
-- inset into DATA_SELECTED_HISTORY
END IF;
END$$
我现在正在采用仪表板,我从前端为 selecting 创建了两个 table;
DATA_SELECTED_HISTORY
DATA_SELECTED_NOW
我的前端页面从 DATA_SELECTED_NOW
获取数据,我的后端算法将新数据放入该数据库。
我想把我的新数据放到DATA_SELECTED_NOW
,
和以前的数据在遇到重复键时被推送到DATA_SELECTED_HISTORY
。
我想我可以使用交换 table 解决方案或 insert(select subquery) + insert on duplicate key 解决方案,但我不知道了。
如何在 SQL 中使用此解决方案?
你可以在这种情况下使用触发器,在插入到 DATA_SELECTED_NOW 之前检查重复,如果重复插入 DATA_SELECTED_HISTORY,检查下面的代码
CREATE TRIGGER TRIGGER_Name
BEFORE INSERT ON DATA_SELECTED_NOW
FOR EACH ROW
BEGIN
IF (EXISTS(SELECT 1 FROM User WHERE key = NEW.Key)) THEN
-- you can replace "key = NEW.Key " with your logic to check
-- inset into DATA_SELECTED_HISTORY
END IF;
END$$