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

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

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

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

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

book:

在這里插入圖片描述

enterbook:

在這里插入圖片描述

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

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

所以就這兩個(gè)表來(lái)說(shuō),創(chuàng)建的語(yǔ)句應(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é)果顯示的是沒(méi)錯(cuò)誤,但在添加數(shù)據(jù)的時(shí)候,就會(huì)一直報(bào)錯(cuò)。

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

但是在mysql的語(yǔ)法中,不是inserted表和deleted表,而是new和old表,所以此處觸發(fā)器語(yǔ)句應(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)?。?!千萬(wàn)不能漏了分號(hào)

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í)行,叫行級(jí)觸發(fā)器。
  • oracle觸發(fā)器中分行級(jí)觸發(fā)器和語(yǔ)句級(jí)觸發(fā)器,可不寫(xiě)foreachrow,無(wú)論影響多少行都只執(zhí)行一次。
  • mysql不支持語(yǔ)句觸發(fā)器,所以必須寫(xiě)foreachrow;

觸發(fā)器的old和new

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

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

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

總結(jié)

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

相關(guān)文章

最新評(píng)論