MySQL Trigger

最近把資料儲存引擎從 MyISAM 改成 InnoDB,會遇到複合鍵 AUTO_INCREMENT 而無法轉換的問題。
後來想到可以試試改用觸發器來達成一樣的效果。
DELIMITER |
CREATE TRIGGER <trigger_name> BEFORE INSERT ON <table_name>
FOR EACH ROW
BEGIN
    SET NEW.id = (SELECT IFNULL(MAX(id),0) + 1 FROM <table_name> WHERE created_at = NEW.created_at);
END
|
DELIMITER ;
說明:
  • 第一行和最後一行很重要,他會改變 SQL 的結束符號(預設是「;」),如果不改的話會因為中間出現的分號而導致錯誤。
  • 最後一行 DELIMITER 後面要有空格再分號,否則會發生錯誤,雖然觸發器有新增成功。

留言