mysql創(chuàng)建觸發(fā)器時報1064錯誤問題及解決
mysql創(chuàng)建觸發(fā)器時報1064錯誤
1.這里有兩張表,book和enterbook,book表中的bookid是enterbook的外鍵,這里想創(chuàng)建一個insert觸發(fā)器,實現(xiàn)向enterbook表中添加一條數(shù)據(jù)時,同時也會向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;
雖然運行結(jié)果顯示的是沒錯誤,但在添加數(shù)據(jù)的時候,就會一直報錯。
在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;
劃重點?。。∏f不能漏了分號
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)視的增刪改,我們就有機會判斷,修改即將發(fā)生的操作,如:我們在觸發(fā)之前需要判斷new值和old值的大小或關(guān)系,如果滿足要求就觸發(fā),不通過就修改再觸發(fā);如:表之間定義的有外鍵,在刪除主鍵時,必須要先刪除外鍵表,這時就有先后之分,這里before相當(dāng)于設(shè)置了斷點,我們可以處理刪除外鍵。
- 對于INSERT語句, 只有NEW是合法的;
- 對于DELETE語句,只有OLD才合法;
- 對于UPDATE語句,NEW、OLD可以同時使用。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Navicat Premium15連接云服務(wù)器中的數(shù)據(jù)庫問題及遇到坑
這篇文章主要介紹了Navicat Premium15連接云服務(wù)器中的數(shù)據(jù)庫問題及遇到坑,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03數(shù)據(jù)結(jié)構(gòu)-樹(三):多路搜索樹B樹、B+樹
這篇文章主要介紹了多路搜索樹B樹、B+樹,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04mysql中主鍵索引和聯(lián)合索引的原理與區(qū)別
索引是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),本文主要介紹了mysql中主鍵索引和聯(lián)合索引的原理與區(qū)別,具有一定的參考價值,感興趣的可以了解一下2024-04-04myeclipse中連接mysql數(shù)據(jù)庫示例代碼
這篇文章主要為大家詳細介紹了MyEclipse連接MySQL數(shù)據(jù)庫圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10Mysql8.0密碼問題mysql_native_password和caching_sha2_password詳解
這篇文章主要介紹了Mysql8.0密碼問題mysql_native_password和caching_sha2_password,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08