日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 触发器不能同时 insert or update or delete_MySQL6:触发器

發布時間:2024/7/23 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 触发器不能同时 insert or update or delete_MySQL6:触发器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是觸發器

MySQL的觸發器(trigger)和存儲過程一樣,都是嵌入到MySQL中的一段程序。觸發器是由事件來觸發某個操作,這些事件包括INSERT、UPDATE和DELETE語句。如果定義了觸發程序,當數據庫執行這些語句的時候就會激發觸發器執行相應的操作,觸發程序是與表有關的命名數據庫對象,當表上出現特定事件時,將激活該對象。

創建觸發器

觸發器是個特殊的存儲過程,不同的是,執行存儲過程要使用CALL語句來調用,而觸發器的執行不需要使用CALL語句調用,也不需要手工啟動,只要當一個預定義的事件發生的時候,就會被MySQL自動調用。比如對student表進行操作(INSERT、DELETE或UPDATE)時就會激活它執行。

觸發器可以查詢其他表,而且可以包含復雜的SQL語句。它們主要用于滿足復雜的業務規則或要求。可以創建只有一條語句的觸發器,不過一般都是有多個執行語句的觸發器用得比較多,即使單條語句的觸發器,也可以使用多條語句的觸發器的寫法來寫,看下有多個執行語句的觸發器的基本寫法:

CREATE TRIGGER trigger_name trigger_time trigger_eventON tbl_name FOR EACH ROW trigger_stmt

解釋一下:

1、trigger_name標識觸發器名稱,用戶自行指定

2、trigger_time標識觸發時機,可以指定為before或after

3、trigger_event標識觸發事件,包括INSERT、UPDATE和DELETE

4、tbl_name標識建立觸發器的表名,即在哪張表上建立觸發器

5、trigger_stmt是觸發器程序體,觸發器程序可以使用begin和end作為開始和結束,中間包含多條語句

觸發器程序可以使用begin和end作為開始和結束,中間包含多條語句。舉個例子,還是以前的學生表:

create table student( studentId int primary key auto_increment not null, studentName varchar(10) not null, studentAge int, studentPhone varchar(15))

給學生表的studentName、studentAge、studentPhone三個字段都創建一個觸發器表:

create table triggerstudentname( t_studentName VARCHAR(10));create table triggerstudentAge( t_studentAge int);create table triggerstudentPhone( t_studentPhone VARCHAR(15));

創建一個觸發器,每次插入一條數據之后分別往三張表插字段:

CREATE TRIGGER trigger_student AFTER INSERT ON studentFOR EACH ROW BEGIN INSERT INTO triggerstudentname values(NEW.studentName); INSERT INTO triggerstudentAge values(NEW.studentAge); INSERT INTO triggerstudentPhone values(NEW.studentPhone);END

插入三條數據:

insert into student values(null,'Jack', '11', '55555555');insert into student values(null,'Dicky', '14', '66666666');insert into student values(null,'Coco', '19', '77777777');commit;

看一下三張表的情況:

沒什么問題,執行結果顯示,在向student表插入數據的同時,triggerstudentname、triggerstudentAge和triggerstudentPhone三張表里面的數據都發生了裱花,INSERT動作觸發了觸發器。

查看觸發器

查看觸發器是指查看數據庫中已存在的觸發器的定義、狀態和語法信息等。可以通過命令來查看已經創建的觸發器,有兩種方式可以查看觸發器,一一講解。

1、SHOW TRIGGERS語句查看觸發器

通過SHOW TRIGGERS查看觸發器的語句如下:

SHOW TRIGGERS;

用這個命令來查看一下觸發器:

有一部分沒截取完整,解釋一下主要部分的含義:

(1)Trigger表示觸發器的名稱,這里有兩個觸發器分別是tri_student和trigger_student

(2)Event表示激活觸發器的事件,這里的兩個觸發事件為插入操作INSERT

(3)Table表示激活觸發器的操作對象表,這里都為student表

(4)Statement表示激活觸發器之后執行的語句

(5)Timing表示觸發器觸發的時間,分別為插入操作之前(BEFORE)和插入操作之后(AFTER)

2、在triggers表中查看觸發器信息

SHOW TRIGGERS語句查看當前創建的所有觸發器信息,這在觸發器較少的情況下,使用該語句會很方便,如果要查看特定的觸發器信息,可以直接從infomation_schema數據庫中的triggers表中查找,通過SELECT命令查看,基本語法為:

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE condition;

比如:

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_NAME = 'trigger_student';

可以自己查看一下命令運行的效果

刪除觸發器

使用DROP TRIGGER語句可以刪除MySQL中已經定義的觸發器,刪除觸發器的基本語法為:

DROP TRIGGER [schema_name.]trigger_name;

schema_name表示數據庫名稱,是可選的,如果省略了schema_name,將從當前數據庫中刪除觸發器,trigger_name是要刪除的觸發器的名稱,比如:

DROP TRIGGER school.tri_student

觸發器tri_student刪除成功

使用觸發器的注意點

在使用觸發器的時候需要注意:對于相同的表,相同的事件只能創建一個觸發器

比如對表student創建了一個BEFORE INSERT觸發器,那么如果對表student再次創建一個BEFORE INSERT觸發器,MySQL將會報錯,此時,只可以在表student上創建AFTER INSERT或者BEFORE UPDATE類型的觸發器。靈活地運用觸發器將為操作省去很多麻煩。

總結

以上是生活随笔為你收集整理的mysql 触发器不能同时 insert or update or delete_MySQL6:触发器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。