天天看點

對比MySQL與SQL SERVER2005的觸發器寫法

最近給從前的項目做了資料庫的移植,發現不同公司的産品,還真是差别甚大啊。

下面是原來用在MS SQL2005上的一個觸發器:

CREATE TRIGGER [TG_Update_Current] ON [dbo].[CurrentLocation] 
FOR UPDATE
AS
BEGIN
      INSERT INTO dbo.HistoryLocation
      SELECT c.cl_time,c.lo_phone,c.cl_lng,c.cl_lat
      FROM inserted i,CurrentLocation c
      WHERE i.lo_phone=c.lo_phone
END
go
           

移植到MySQL 5.01上就成這樣子了:

drop trigger if exists TG_Update_Current ;
delimiter|
createtrigger TG_Update_Current 
after update ON CurrentLocation 
for each row begin
      insert into HistoryLocation(lo_phone,hl_lng,hl_lat,hl_time) 
      select NEW.lo_phone, NEW.cl_lng, NEW.cl_lat, NEW.cl_time
end|
delimiter;
           

對比下,除了文法的差異,最大的不适應還是人性化問題,MYSQL的觸發器格式就得依上面得寫法,你搞錯一個詞的位置都報錯,對官方的文檔參詳了許久,才發現錯誤提示中syntax error就是“格式問題”。

繼續閱讀