MySql 觸發(fā)器

觸發(fā)器是MySQL響應(yīng)一下任意語句而自動執(zhí)行的一條MySQL語句(或位于begin和end語句之間的一組語句):

  • delete
  • update
  • insert

其他MySQL語句不支持觸發(fā)器

創(chuàng)建觸發(fā)器

在創(chuàng)建觸發(fā)器時,需要給出4條信息:

  • 唯一的觸發(fā)器名;
  • 觸發(fā)器關(guān)聯(lián)的表
  • 觸發(fā)器應(yīng)該響應(yīng)的活動(delete、insert或update)
  • 觸發(fā)器何時執(zhí)行(處理之前或之后)

insert觸發(fā)器

  • insert觸發(fā)器代碼內(nèi),可引用一個名為new的虛擬表,訪問被插入的行
  • 在before insert觸發(fā)器中,new中的值也可以被更新(允許更改插入的值)
  • 對于auto_increment列,new在insert執(zhí)行之前包含0,在insert執(zhí)行之后包含新的自動生成值
//可以用來確定新生成值
create triger neworder after insert on orders
for each row select new.order_num;


注意:上面的例子在mysql 5.7(wamp下)測試不通過

delete觸發(fā)器

  • 在delete觸發(fā)器代碼內(nèi),你可以引用一個名為old的虛擬表,訪問被刪除的行
  • old中的值是只讀的
create trigger deleteorder before delete on orders
for each row
begin
  insert into archive_orders(order_num, order_date, cust_id)
  values(old.order_num, old,order_date, old.cust_id);
end;

update觸發(fā)器

  • 在update觸發(fā)器代碼內(nèi),你可以引用一個名為old的虛擬表訪問以前的值,引用一個名為new的虛擬表訪問新更新的值
  • 在before update觸發(fā)器內(nèi),new中的值可能也被更新(運(yùn)行更改將要用于update語句中的值)
  • old中值全都是只讀的
create trigger updatevendor before update on vendors
for each row set new.vend_state = upper(new.vend_state);


參考書籍:

  • MySQL必知必會
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容