1. 程式人生 > >mysql 觸發器,對同張表觸發update

mysql 觸發器,對同張表觸發update

觸發器語句中使用了兩種特殊的表:old 表和 new 表。
old 表用於儲存 DELETE 和 UPDATE 語句所影響的行的複本。在執行 DELETE 或 UPDATE 語句時,行從觸發器表中刪除,並傳輸到 deleted 表中。old 表和觸發器表通常沒有相同的行。Inserted 表用於儲存 INSERT 和 UPDATE 語句所影響的行的副本。在一個插入或更新事務處理中,新建行被同時新增到 new 表和觸發器表中。new 表中的行是觸發器表中新行的副本。
1.插入操作(Insert) 
new表有資料,old表無資料

2.刪除操作(Delete)
new表無資料,old表有資料

3.更新操作(Update)
new表有資料(
新資料
),old表有資料(舊資料)
例子:對integration表更新,觸發該表其他欄位更新
 
create trigger integration_trigger
before UPDATE 
on integration
for each row begin
update integration
   set new.score = 3
where integration.user_id = new.user_id;
end
此時建立觸發器成功,

當對integration表執行更新操作時卻報錯了,報錯資訊:

Can't update table 'integration' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.


這是因為觸發器裡面對剛剛插入的資料進行了 insert/update, 則出現這個問題。因為會造成迴圈的呼叫.

應該使用set操作,而不是在觸發器裡使用 update,修改為:

create trigger integration_trigger
before UPDATE 
on integration
for each row begin
   set new.score = 3;
end
執行更新操作,成功!

相關推薦

mysql 觸發器觸發update

觸發器語句中使用了兩種特殊的表:old 表和 new 表。old 表用於儲存 DELETE 和 UPDATE 語句所影響的行的複本。在執行 DELETE 或 UPDATE 語句時,行從觸發器表中刪除,並傳輸到 deleted 表中。old 表和觸發器表通常沒有相同的行。Ins

oracle增量指令碼(記錄)建立觸發器監控的增刪改

刪除表 drop table test_1; drop table test_1_log; drop table A1; drop table B1; drop table C1; –建立測試表 CREATE TABLE test_1( t_id NUMBER

MySQL 觸發器例子(兩同步增加和刪除)

以下兩個例子來自: http://www.cnblogs.com/nicholas_f/archive/2009/09/22/1572050.html 實測有效,但是原帖的分隔符不正確,因此稍作修改。 例子1: 建立兩個表,目的是在一個表裡新增一條記錄,另一個表也

中同時查詢兩個字段顯示一個字段兩個字段進行按時間排序

principal mount sel con AC code rom inter nbsp select b.bid_name as bidName,bd.repayment_way as depict,r.exact_repayment_time as time, r

mysql 獲取一 另一不存在的資料

   編寫sql語句中,經常需要編寫獲取一張資料表中不存在與另一張表的資料,相關編寫方法如下:  方法1: 使用not in ,效率低下,在資料較小的情況下可以採用如下編寫    SELECT * FROM a WHERE 1=1 AND a.Id NOT IN( SELECT

Mysql 一條update語句更新多(存在關聯的

 UPDATE table1     LEFT JOIN table2 ON table1.xx=table2.xx (關聯的欄位)    SET table1.xx=value,table2.xx=value (update value)WHERE table1.xx=xx

Java鏈接HBASE數據庫創建一個刪除一修改輸出插入修改數據刪除數據獲取顯示信息過濾查詢分頁查詢地理hash

can charat nfa true 目錄結構 dfa byte sin extra 準備工作 1、創建Java的Maven項目 創建好的目錄結構如下: 另外註意junit的版本,最好不要太高,最開始筆者使用的junit4.12的,發現運行的時候會報錯。最後把Junit

同一讀寫頻繁如何避免鎖

lag 發短信 查詢 rom 進行 time order lock In 如果是update多,建議支持臟讀with(nolock)這樣,寫不會影響讀。 如果都是insert,建議分成兩個表,一個歷史表,一個當前表,每天把當前表移到歷史表。 今天遇到一個發短信接

EXPDP導出數據排除某

開始 with clu min export 過濾 2.0 表數 今天 EXPDP導出表數據,排除某個表,遇到的問題今天測試了這個命令,剛開始我是這樣寫的 $ expdp hed directory=backdir dumpfile=he201807041505.dmp e

Mysql資料庫如何檢視某table被哪些儲存過程procedure使用過

一、摘要 由於程式碼重構,修改了表結構,開發人員修改完java後臺程式碼並內測沒問題後提交業務部門測試時發現,新客戶取不到產品價格,原因是儲存過程呼叫的還是舊資料表。為此,需要先找出哪些儲存過程使用了這些表,然後修改。那麼問題來了,mysql資料庫如何檢視哪些儲存過程使用了這些資料表呢?

Atitit Spring事務配置不起作用可能出現的問題: .是否是資料庫引擎設定不對造成的【筆者就遇到了這個問題由於筆者使用的是mysql資料但是在建立的時候引擎預設(mysql中引擎預設為

Atitit Spring事務配置不起作用可能出現的問題:   .是否是資料庫引擎設定不對造成的【筆者就遇到了這個問題,由於筆者使用的是mysql資料,但是在建立表的時候引擎預設(mysql中引擎預設為MyISAM,是不支援事務操作的),需要修改為InnoDB,就可以支援事務操作了

檢視mysql資料庫是否存在某

通過information_schema查詢資料庫是否存在某張表 select t.table_name from information_schema.TABLES t where t.TABLE_SCHEMA ='".$database."' and t.TABLE_NAME ='".$table

如何實現一個表字段資料變化另一中資料隨著變化

資料表1(db_integrityevent): 資料表2:(db_corporatecreditscore): navicat觸發器寫法: 可以實現表中相關資料變化,表中其他跟隨這變化。 mysql命令列寫法: delimiter $$ for each row B

sql 中怎麼將A插入B去除兩 中含有的重複資料

insert into B(欄位列表) select 欄位列表 from A  where not exists(select * from B where a.keycol1 = b.keycol1) keycol1為A表和B 表中的欄位,可能帶有主鍵,可以此欄位來判斷A表和B表中是

Mysql資料庫內連線多查詢

student表 Result表 subject表 組合查詢三個表中不同的列(外來鍵):StudentNo,StudentName,SubjectName,StudentResult SELECT student.StudentNo,studentname,SubjectNam

使用註解自動解釋orm從而實現無xml配置的jdbc泛型介面dao資料庫單增刪查改

一、獲取資料庫連線和關閉資源 package cn.itdoer.base.utils.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepa

java 連帶操作(兩關聯插入一條新資料另外一也跟著插入一條新資料)

以角色許可權模組中增加功能為例子:a) 概念: 連帶操作:首先先在Role表中插入一條資料,接著拿到rid,往Role-Acl表中插入一條資料b)資料庫設計:Role表:Role-Acl表:c) 程式碼實現:RoleMap:/**  *  * @Description: 新增

ORACLE中觸發器實現刪除一中資料同時刪除另一中相關資料

這是我的第一篇部落格。 有兩張表:BOOK、PGEVIEW,分別有一個名為BOOKID的欄位 想實現的功能:刪除BOOK表中的一行資料時刪除與PAGEVIEW表中BOOKID相等的資料行 實現方法:在BOOK表中建立一個觸發器BOOK_TRG_DELETE,具體實現語句如下

oracle 簡答建立一個監聽器記錄的操作記錄

需求:         在工作中遇到個需求,就是為了強化資料的安全性,需要建立一個監聽器來監聽對某一張表的操作記錄。 方案: 建立一個監聽器tri_SM_MOBILE_SOFTVERSION: cre

資料庫欄位存JSON何不弄行轉列

今天對專案進行優化,原有的資料庫中,有一張表A,裡面有個欄位,存了一段JSON格式配置引數,可能會很長。頁面端要對這個表進行展示和管理。那麼在管理這個欄位的時候就比較麻煩了,要把JSON轉成List放到頁面遍歷,儲存時再轉成JSON。楊老提出說搞一張表,同一個主鍵對就多個J