【问题标题】:Translating MySQL trigger to SQLite将 MySQL 触发器转换为 SQLite
【发布时间】:2016-11-11 00:08:19
【问题描述】:

我想知道是否有人可以帮助我将更新前触发器从 MySQL 转换为 SQLite。这是 MySQL 触发器:

CREATE TRIGGER trigger_name 
  BEFORE UPDATE ON `table_name` 
  FOR EACH ROW
BEGIN
  IF (NEW.fk IS NOT NULL AND NEW.status < 50) 
  THEN
    BEGIN
      DECLARE obj_count INT(11); 
      SELECT COUNT(*) 
      INTO obj_count
      FROM (SELECT id FROM table_name
                            WHERE `status` < 50 AND fk = NEW.fk
                            LIMIT 1) AS objs;
      IF (obj_count > 0) 
      THEN
        SIGNAL SQLSTATE '23000' SET MESSAGE_TEXT = "Error.";
      END IF;
    END;
  END IF;
END

我的理解是 SIGNAL 语句需要像这样重写:SELECT RAISE(ABORT, 'Error.')

但还有其他我很难理解的语法错误。

【问题讨论】:

    标签: mysql sql sqlite


    【解决方案1】:

    SQLite triggers 既没有 IF 也没有 DECLARE:

    CREATE TRIGGER trigger_name
    BEFORE UPDATE ON table_name
    FOR EACH ROW
    WHEN NEW.fk IS NOT NULL
     AND NEW.status < 50
    BEGIN
        SELECT RAISE(ABORT, "Error.")
        WHERE EXISTS (SELECT id
                      FROM table_name
                      WHERE status < 50
                        AND fk = NEW.fk);
    END;
    

    BEFORE UPDATE OF fk, status ON table_name 可能效率更高。)

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      相关资源
      最近更新 更多