欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql創(chuàng)建觸發(fā)器時(shí)報(bào)1064錯誤問題及解決

 更新時(shí)間:2023年08月26日 15:48:42   作者:牧野風(fēng)涼  
這篇文章主要介紹了mysql創(chuàng)建觸發(fā)器時(shí)報(bào)1064錯誤問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

mysql創(chuàng)建觸發(fā)器時(shí)報(bào)1064錯誤

1.這里有兩張表,book和enterbook,book表中的bookid是enterbook的外鍵,這里想創(chuàng)建一個insert觸發(fā)器,實(shí)現(xiàn)向enterbook表中添加一條數(shù)據(jù)時(shí),同時(shí)也會向book中添加一條數(shù)據(jù)。

book:

在這里插入圖片描述

enterbook:

在這里插入圖片描述

2.通常百度的mysql創(chuàng)建觸發(fā)器的語句是這樣的,

CREATE TRIGGER
  觸發(fā)器名
  BEFORE (AFTER) 
  觸發(fā)事件
ON
  表名
FOR EACH ROW 
BEGIN
  執(zhí)行語句列表
END

所以就這兩個表來說,創(chuàng)建的語句應(yīng)該是這樣的,

create trigger trigger_1
after insert on enterbook for each row
begin
	insert into book(bookid,bookname,writer,publisher,publishdate,quantity,price)
	values(bookid,bookname,writer,publisher,publishdate,quantity,price);
end;

雖然運(yùn)行結(jié)果顯示的是沒錯誤,但在添加數(shù)據(jù)的時(shí)候,就會一直報(bào)錯。

在sql語法中有兩張表,對于insert操作來說,inserted存放的是要插入的數(shù)據(jù),deleted表存放的是被刪除的記錄。

但是在mysql的語法中,不是inserted表和deleted表,而是new和old表,所以此處觸發(fā)器語句應(yīng)該改成:

create trigger trigger_1
after insert on enterbook for each row
begin
	insert into book(bookid,bookname,writer,publisher,publishdate,quantity,price)
	values(new.bookid,new.bookname,new.writer,new.publisher,new.publishdate,new.quantity,new.price);
end;

劃重點(diǎn)!??!千萬不能漏了分號

mysql觸發(fā)器for each row解釋

create trigger mytrigger alert insert on t_a for each row
begin
? ? ? ? insert into t_b
? ? ? ? ? ? set name=new.name,
? ? ? ? ? ? set number=new number;

程序體或者是

? ? set @name=new.name;
? ? set @number=new.number;
? ? insert into t_b (name,number) values (@name,@number);
end
  • foreachrow每行受影響,觸發(fā)器都執(zhí)行,叫行級觸發(fā)器。
  • oracle觸發(fā)器中分行級觸發(fā)器和語句級觸發(fā)器,可不寫foreachrow,無論影響多少行都只執(zhí)行一次。
  • mysql不支持語句觸發(fā)器,所以必須寫foreachrow;

觸發(fā)器的old和new

after觸發(fā)器—是在記錄操縱之后觸發(fā),是先完成數(shù)據(jù)的增刪改,再觸發(fā),觸發(fā)的語句晚于監(jiān)視的增刪改操作,無法影響前面的增刪改動作

before觸發(fā)器—是在記錄操縱之前觸發(fā),是先完成觸發(fā),再增刪改,觸發(fā)的語句先于監(jiān)視的增刪改,我們就有機(jī)會判斷,修改即將發(fā)生的操作,如:我們在觸發(fā)之前需要判斷new值和old值的大小或關(guān)系,如果滿足要求就觸發(fā),不通過就修改再觸發(fā);如:表之間定義的有外鍵,在刪除主鍵時(shí),必須要先刪除外鍵表,這時(shí)就有先后之分,這里before相當(dāng)于設(shè)置了斷點(diǎn),我們可以處理刪除外鍵。

  • 對于INSERT語句, 只有NEW是合法的;
  • 對于DELETE語句,只有OLD才合法;
  • 對于UPDATE語句,NEW、OLD可以同時(shí)使用。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論