MySQL INSERT-SELECT版本化表中的多行

时间:2012-04-17 17:12:34

标签: mysql versioning insert-select

我有两个版本化的表格如下:

产品:

  • ID
  • rev_id
  • 名称
  • 删除

子项:

  • ID
  • rev_id
  • 名称
  • PARENT_ID
  • 删除

我从http://kristiannielsen.livejournal.com/6745.html了解到,从我的表中获取所有最新版本的对象非常容易和快速:

SELECT a.name, a.id, a.rev_id, a.deleted FROM Items a
INNER JOIN (SELECT id, MAX(rev_id) AS rev_id FROM Items GROUP BY id) b
ON (a.id= b.id AND a.rev_id b.rev_id)

但是当用户删除记录时,如果我可以插入已删除的新记录为1作为新记录,那将会很酷。我在这里找到:https://stackoverflow.com/a/4039781/672989我可以插入这样的东西:

INSERT INTO table (id, rev_id, name, deleted)
SELECT id, rev_id, name, 1 FROM Items WHERE id = 1 ORDER BY rev_id DESC LIMIT 1

但是如果Items表中的一个项被删除= 1,我想为subitems表中parent_id == items.id的所有子项添加deleted = 1的新记录。什么是简单的方法来实现这一点,是否可以使用一个查询?如果我甚至有另一个子子目录表怎么办呢?

1 个答案:

答案 0 :(得分:0)

您需要创建一个“on insert”触发器,如果​​父标记已被标记,则会覆盖deleted的值:

DELIMITER ;;

CREATE TRIGGER foo BEFORE INSERT ON Items FOR EACH ROW
  IF (SELECT deleted FROM Items WHERE id = NEW.parent_id) THEN
    SET NEW.deleted := 1;
  END IF;;

DELIMITER ;