最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL如何創(chuàng)建觸發(fā)器(CREATE TRIGGER)

 更新時(shí)間:2023年08月30日 09:03:19   作者:blog.Mysql  
這篇文章主要介紹了MySQL如何創(chuàng)建觸發(fā)器(CREATE TRIGGER)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

基本語(yǔ)法

語(yǔ)法格式如下

  • CREATE <觸發(fā)器名> < BEFORE | AFTER >
  • <INSERT | UPDATE | DELETE >
  • ON <表名> FOR EACH Row<觸發(fā)器主體>

語(yǔ)法說(shuō)明如下

1) 觸發(fā)器名

觸發(fā)器的名稱,觸發(fā)器在當(dāng)前數(shù)據(jù)庫(kù)中必須具有唯一的名稱。

如果要在某個(gè)特定數(shù)據(jù)庫(kù)中創(chuàng)建,名稱前面應(yīng)該加上數(shù)據(jù)庫(kù)的名稱。

2) INSERT | UPDATE | DELETE

觸發(fā)事件,用于指定激活觸發(fā)器的語(yǔ)句的種類。

注意:三種觸發(fā)器的執(zhí)行時(shí)間如下。

  • INSERT:將新行插入表時(shí)激活觸發(fā)器。例如,INSERT 的 BEFORE 觸發(fā)器不僅能被 MySQL 的 INSERT 語(yǔ)句激活,也能被 LOAD DATA 語(yǔ)句激活。
  • DELETE:從表中刪除某一行數(shù)據(jù)時(shí)激活觸發(fā)器,例如 DELETE 和 REPLACE 語(yǔ)句。
  • UPDATE:更改表中某一行數(shù)據(jù)時(shí)激活觸發(fā)器,例如 UPDATE 語(yǔ)句。

3) BEFORE | AFTER

BEFORE 和 AFTER,觸發(fā)器被觸發(fā)的時(shí)刻,表示觸發(fā)器是在激活它的語(yǔ)句之前或之后觸發(fā)。

若希望驗(yàn)證新數(shù)據(jù)是否滿足條件,則使用 BEFORE 選項(xiàng);若希望在激活觸發(fā)器的語(yǔ)句執(zhí)行之后完成幾個(gè)或更多的改變,則通常使用 AFTER 選項(xiàng)。

4) 表名

與觸發(fā)器相關(guān)聯(lián)的表名,此表必須是永久性表,不能將觸發(fā)器與臨時(shí)表或視圖關(guān)聯(lián)起來(lái)。

在該表上觸發(fā)事件發(fā)生時(shí)才會(huì)激活觸發(fā)器。同一個(gè)表不能擁有兩個(gè)具有相同觸發(fā)時(shí)刻和事件的觸發(fā)器。

例如,對(duì)于一張數(shù)據(jù)表,不能同時(shí)有兩個(gè) BEFORE UPDATE 觸發(fā)器,但可以有一個(gè) BEFORE UPDATE 觸發(fā)器和一個(gè) BEFORE INSERT 觸發(fā)器,或一個(gè) BEFORE UPDATE 觸發(fā)器和一個(gè) AFTER UPDATE 觸發(fā)器。

5) 觸發(fā)器主體

觸發(fā)器動(dòng)作主體,包含觸發(fā)器激活時(shí)將要執(zhí)行的 MySQL 語(yǔ)句。如果要執(zhí)行多個(gè)語(yǔ)句,可使用 BEGIN…END 復(fù)合語(yǔ)句結(jié)構(gòu)。

6) FOR EACH ROW

一般是指行級(jí)觸發(fā),對(duì)于受觸發(fā)事件影響的每一行都要激活觸發(fā)器的動(dòng)作。

例如,使用 INSERT 語(yǔ)句向某個(gè)表中插入多行數(shù)據(jù)時(shí),觸發(fā)器會(huì)對(duì)每一行數(shù)據(jù)的插入都執(zhí)行相應(yīng)的觸發(fā)器動(dòng)作。

注意:

  • 每個(gè)表都支持 INSERT、UPDATE 和 DELETE 的 BEFORE 與 AFTER,因此每個(gè)表最多支持 6 個(gè)觸發(fā)器。
  • 每個(gè)表的每個(gè)事件每次只允許有一個(gè)觸發(fā)器。單一觸發(fā)器不能與多個(gè)事件或多個(gè)表關(guān)聯(lián)。

另外,在 MySQL 中,若需要查看數(shù)據(jù)庫(kù)中已有的觸發(fā)器,則可以使用 SHOW TRIGGERS 語(yǔ)句。

創(chuàng)建 BEFORE 類型觸發(fā)器

在 test_db 數(shù)據(jù)庫(kù)中,數(shù)據(jù)表 tb_emp8 為員工信息表,包含 id、name、deptId 和 salary 字段,數(shù)據(jù)表 tb_emp8 的表結(jié)構(gòu)如下所示。

mysql> SELECT * FROM tb_emp8;
Empty set (0.07 sec)
mysql> DESC tb_emp8;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(22) | YES  | UNI | NULL    |       |
| deptId | int(11)     | NO   | MUL | NULL    |       |
| salary | float       | YES  |     | 0       |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.05 sec)

【實(shí)例 1】

創(chuàng)建一個(gè)名為 SumOfSalary 的觸發(fā)器,觸發(fā)的條件是向數(shù)據(jù)表 tb_emp8 中插入數(shù)據(jù)之前,對(duì)新插入的 salary 字段值進(jìn)行求和計(jì)算。

輸入的 SQL 語(yǔ)句和執(zhí)行過(guò)程如下所示。

mysql> CREATE TRIGGER SumOfSalary
    -> BEFORE INSERT ON tb_emp8
    -> FOR EACH ROW
    -> SET @sum=@sum+NEW.salary;
Query OK, 0 rows affected (0.35 sec)

觸發(fā)器 SumOfSalary 創(chuàng)建完成之后,向表 tb_emp8 中插入記錄時(shí),定義的 sum 值由 0 變成了 1500,即插入值 1000 和 500 的和,如下所示。

SET @sum=0;
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO tb_emp8
    -> VALUES(1,'A',1,1000),(2,'B',1,500);
Query OK, 2 rows affected (0.09 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> SELECT @sum;
+------+
| @sum |
+------+
| 1500 |
+------+
1 row in set (0.03 sec)

創(chuàng)建 AFTER 類型觸發(fā)器

在 test_db 數(shù)據(jù)庫(kù)中,數(shù)據(jù)表 tb_emp6 和 tb_emp7 都為員工信息表,包含 id、name、deptId 和 salary 字段,數(shù)據(jù)表 tb_emp6 和 tb_emp7 的表結(jié)構(gòu)如下所示。

mysql> SELECT * FROM tb_emp6;
Empty set (0.07 sec)
mysql> SELECT * FROM tb_emp7;
Empty set (0.03 sec)
mysql> DESC tb_emp6;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  | MUL | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> DESC tb_emp7;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | 0       |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)

【實(shí)例 2】

創(chuàng)建一個(gè)名為 double_salary 的觸發(fā)器,觸發(fā)的條件是向數(shù)據(jù)表 tb_emp6 中插入數(shù)據(jù)之后,再向數(shù)據(jù)表 tb_emp7 中插入相同的數(shù)據(jù),并且 salary 為 tb_emp6 中新插入的 salary 字段值的 2 倍。

輸入的 SQL 語(yǔ)句和執(zhí)行過(guò)程如下所示。

mysql> CREATE TRIGGER double_salary
    -> AFTER INSERT ON tb_emp6
    -> FOR EACH ROW
    -> INSERT INTO tb_emp7
    -> VALUES (NEW.id,NEW.name,deptId,2*NEW.salary);
Query OK, 0 rows affected (0.25 sec)

觸發(fā)器 double_salary 創(chuàng)建完成之后,向表 tb_emp6 中插入記錄時(shí),同時(shí)向表 tb_emp7 中插入相同的記錄,并且 salary 字段為 tb_emp6 中 salary 字段值的 2 倍,如下所示。

mysql> INSERT INTO tb_emp6
    -> VALUES (1,'A',1,1000),(2,'B',1,500);
Query OK, 2 rows affected (0.09 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM tb_emp6;
+----+------+--------+--------+
| id | name | deptId | salary |
+----+------+--------+--------+
|  1 | A    |      1 |   1000 |
|  2 | B    |      1 |    500 |
+----+------+--------+--------+
3 rows in set (0.04 sec)
mysql> SELECT * FROM tb_emp7;
+----+------+--------+--------+
| id | name | deptId | salary |
+----+------+--------+--------+
|  1 | A    |      1 |   2000 |
|  2 | B    |      1 |   1000 |
+----+------+--------+--------+
2 rows in set (0.06 sec)

總結(jié)

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

相關(guān)文章

  • Navicat連接mysql報(bào)錯(cuò)1251錯(cuò)誤的解決方法

    Navicat連接mysql報(bào)錯(cuò)1251錯(cuò)誤的解決方法

    這篇文章主要為大家詳細(xì)介紹了Navicat連接mysql報(bào)錯(cuò)1251錯(cuò)誤的解決方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • mysql的左右內(nèi)連接用法實(shí)例

    mysql的左右內(nèi)連接用法實(shí)例

    這篇文章主要介紹了mysql的左右內(nèi)連接用法,以一個(gè)完整實(shí)例較為詳細(xì)的分析了mysql的左右內(nèi)連接使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • MySQL時(shí)間格式化date_format使用語(yǔ)法

    MySQL時(shí)間格式化date_format使用語(yǔ)法

    這篇文章主要為大家介紹了MySQL時(shí)間格式化date_format使用語(yǔ)法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • MySQL使用Sequence創(chuàng)建唯一主鍵的實(shí)現(xiàn)示例

    MySQL使用Sequence創(chuàng)建唯一主鍵的實(shí)現(xiàn)示例

    Sequence提供了更多的靈活性,本文主要介紹了MySQL使用Sequence創(chuàng)建唯一主鍵的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • MySQL同步數(shù)據(jù)Replication的實(shí)現(xiàn)步驟

    MySQL同步數(shù)據(jù)Replication的實(shí)現(xiàn)步驟

    本文主要介紹了MySQL同步數(shù)據(jù)Replication的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • mysql免安裝版配置教程

    mysql免安裝版配置教程

    這篇文章主要為大家詳細(xì)介紹了mysql免安裝版配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 在linux服務(wù)器上配置mysql并開放3306端口的操作步驟

    在linux服務(wù)器上配置mysql并開放3306端口的操作步驟

    這篇文章主要介紹了在linux服務(wù)器上配置mysql并開放3306端口,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • 用于App服務(wù)端的MySQL連接池(支持高并發(fā))

    用于App服務(wù)端的MySQL連接池(支持高并發(fā))

    這篇文章主要介紹了用于App服務(wù)端的MySQL連接池,并支持高并發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-12-12
  • MySQL索引事務(wù)詳細(xì)解析

    MySQL索引事務(wù)詳細(xì)解析

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)索引事務(wù),索引是為了加速對(duì)表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散的存儲(chǔ)結(jié);事物是屬于計(jì)算機(jī)中一個(gè)很廣泛的概念,一般是指要做的或所做的事情,下面我們就一起進(jìn)入文章了解具體內(nèi)容吧
    2022-01-01
  • MySQL數(shù)據(jù)庫(kù)InnoDB引擎下服務(wù)器斷電數(shù)據(jù)恢復(fù)方法

    MySQL數(shù)據(jù)庫(kù)InnoDB引擎下服務(wù)器斷電數(shù)據(jù)恢復(fù)方法

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)InnoDB引擎下服務(wù)器斷電數(shù)據(jù)恢復(fù)方法,需要的朋友可以參考下
    2016-04-04

最新評(píng)論

漯河市| 盐池县| 临朐县| 江城| 寻乌县| 曲周县| 遂昌县| 玉林市| 肥乡县| 石狮市| 潜江市| 泌阳县| 阳东县| 东兰县| 木里| 如皋市| 临沭县| 南溪县| 青海省| 苏尼特右旗| 都安| 台南县| 翁牛特旗| 娄底市| 金门县| 顺义区| 麻阳| 平塘县| 正阳县| 乌拉特后旗| 馆陶县| 宣威市| 永康市| 东光县| 东莞市| 铜山县| 晴隆县| 阿城市| 景东| 郯城县| 白银市|