【问题标题】:SQLite Trigger to Autoincrement one column when another is not unique当另一列不唯一时,SQLite 触发器自动增加一列
【发布时间】:2011-03-12 20:17:09
【问题描述】:

我正在寻找一种方法来让触发器查看时间戳字段,如果找到匹配项,则自动递增插入另一列的记录。所以我会有一个时间戳字段和一个版本字段。如果插入的记录具有与表中已有记录匹配的时间戳,则自动递增版本字段。任何想法......

【问题讨论】:

    标签: database triggers sqlite


    【解决方案1】:

    假设您的版本列是ver,而您的时间戳列是ts

    CREATE TRIGGER foo AFTER INSERT ON sometable
    BEGIN
        UPDATE sometable SET
            ver=(SELECT MAX(ver)+1 FROM sometable WHERE ts=NEW.ts)
        WHERE rowid=NEW.rowid;
    END;
    

    如果您为 ver 列指定默认值 0,则条目将从 1 开始编号。

    【讨论】:

    • 你好,我对sqlite的TRIGGER操作非常困惑。我无法理解如何使用它。请参阅我创建了一个触发器语句。并将其放在我的数据库文件的 onCreate() 中。并且在更新中也放了一个,但是我在我的代码中做什么。如何触发我的触发代码。怎么会打到那里。我需要做点别的吗?
    • 如果您创建了一个触发器,那么它会在发生相应事件时自动运行。如果您还有其他问题,我建议您打开一个新的 StackOverflow 问题以获得完整答案。
    • 我已经发布了 2 个问题 Q.AQ.B 但很遗憾我没有得到任何回复
    • 此触发器似乎没有考虑 ver 列中的 Null 值
    【解决方案2】:

    我投票支持 Anthony Williams,但经过一些测试后,我发现它无法正常工作。

    我做了更多阅读,实际上,您可以通过将 INTEGER PRIMARY KEY 添加到您的 id 来创建 SQLite 内部 ROWID 的别名,或者只使用 ROWID 而无需添加您自己的字段。

    更多信息: http://www.sqlite.org/autoinc.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 2013-05-18
      • 2014-08-11
      相关资源
      最近更新 更多