mysql創(chuàng)建觸發(fā)器時(shí)報(bào)1064錯誤問題及解決
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)文章
Navicat Premium15連接云服務(wù)器中的數(shù)據(jù)庫問題及遇到坑
這篇文章主要介紹了Navicat Premium15連接云服務(wù)器中的數(shù)據(jù)庫問題及遇到坑,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03數(shù)據(jù)結(jié)構(gòu)-樹(三):多路搜索樹B樹、B+樹
這篇文章主要介紹了多路搜索樹B樹、B+樹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04mysql中主鍵索引和聯(lián)合索引的原理與區(qū)別
索引是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),本文主要介紹了mysql中主鍵索引和聯(lián)合索引的原理與區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04Mysql數(shù)據(jù)庫不同官方版本對比詳細(xì)分析
MySQL是一個流行的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),有多個版本,這篇文章主要介紹了Mysql數(shù)據(jù)庫不同官方版本對比的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01MySQL使用TEXT/BLOB類型的知識點(diǎn)詳解
在本篇文章里小編給大家整理的是關(guān)于MySQL使用TEXT/BLOB類型的幾點(diǎn)注意內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2020-03-03myeclipse中連接mysql數(shù)據(jù)庫示例代碼
這篇文章主要為大家詳細(xì)介紹了MyEclipse連接MySQL數(shù)據(jù)庫圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10Mysql8.0密碼問題mysql_native_password和caching_sha2_password詳解
這篇文章主要介紹了Mysql8.0密碼問題mysql_native_password和caching_sha2_password,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08