天天看點

如何寫sqlite的trigger

近日在做sqlite的資料庫。

寫一個觸發器。碰到問題了,

根據sqlite的文檔。引用目前行的代碼是 new.columnname,

可我的如何寫都報錯,郁悶,将腳本貼在這兒,希望有哪位高人指點一下。

create table atv (

modid int,

chno int ,

jmno int ,

moddate date ,

primary key (modid)

);

create trigger update_modify_date

before insert on atv

BEGIN

  update atv set new.moddate = date('now') ;

END ;

運作後出現:

SQL error near line XX,no such column:new.moddate

其中 update atv set new.moddate = date('now') ;

我寫成

"new.moddate"還是'new.moddate' 都不能正确執行。

求高人指點。

測試一夜,解決了。

after insert on atv

  update atv set moddate = date('now') where chno = new.chno ;

可是我還有問題, 如何讓用觸發器使modid自動增長,

我用了下面的文法,

create trigger add_id

before insert on atv

begin

   update atv set  modid =  max(modid) +1  ; 

end;

運作

 sqlite> insert into atv (jmno ,chno ) values (767,68);

出現。

SQL error: misuse of aggregate function max()

sqlite>

更改中。,

原來是for each row 這句話的問題。指定 for each row .後。就不再報錯了。

before insert on atv for each row

it worked.