【问题标题】:complex trigger on SQLiteSQLite 上的复杂触发器
【发布时间】:2013-09-26 09:24:24
【问题描述】:

可以在 SQLite 上创建“复杂”触发器吗?对于复杂的,我的意思是触发器主体应该提供对表中的行进行计数,然后如果计数大于固定值,则删除一些行以满足先前的条件

【问题讨论】:

  • SQLite 允许在触发器中使用nothing but UPDATE/INSERT/DELETE/SELECT statements。如果你描述得当,也许可以用它们来做你想做的事。
  • 我会在我的表中包含一个固定的最大行数,例如 100。如果插入后,行数大于 100,我会删除一些旧的以适应限制

标签: android sqlite triggers


【解决方案1】:

您应该能够使用触发器定义的 WHERE 子句来做到这一点,例如 WHERE count(*>100。然后在触发器的操作部分,定义一个带有 WHERE 子句的 DELETE 语句,该子句标识哪个“最旧”您要删除的条目。

【讨论】:

    【解决方案2】:

    假设 ID 是一个自动递增列,以下查询将找到具有 100 个最高 ID 值的记录,即那些应该被删除的记录:

    SELECT *
    FROM MyTable
    ORDER BY ID DESC
    LIMIT 100
    

    这允许编写以下触发器:

    CREATE TRIGGER DeleteOldestMoreThan100
    AFTER INSERT ON MyTable
    -- WHEN (SELECT COUNT(*) FROM MyTable) > 100  -- not needed
    BEGIN
        DELETE FROM MyTable
        WHERE ID NOT IN (SELECT ID
                         FROM MyTable
                         ORDER BY ID DESC
                         LIMIT 100);
    END;
    

    【讨论】:

      猜你喜欢
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      相关资源
      最近更新 更多