第12章 觸發器

2021-09-04 10:09:26 字數 3866 閱讀 3304

12.1 建立觸發器

12.1.1建立只有乙個執行語句的觸發器

建立乙個 觸發器的語法如下:

create trigger  trigger_name trigger_time trigger_event

on tb1_name for each row rtigger_stmt;

trigger_name:標識觸發器名稱

trigger_time:標識觸發時機

trigger_event:標識出發事件(包括insert、update和delete)

tb1_name:建立觸發器的表名(即在哪張表上建立表名)

trigger_stmt:觸發器程式體

例:建立乙個單執行語句的觸發器:

mysql> create database trigger_test;

query ok, 1 row affected (0.01 sec)

mysql> use trigger_test;

database changed

mysql> create table account (acc_num int,amount decimal(10,2));

query ok, 0 rows affected (0.29 sec)

mysql> create trigger ins_num before insert on account

-> for each row set @sum =@sum+new.amount;

query ok, 0 rows affected (0.22 sec)

mysql> set @sum=0;

query ok, 0 rows affected (0.00 sec)

mysql> insert into account values(1,1.00),(2,2.00);

query ok, 2 rows affected (0.17 sec)

records: 2 duplicates: 0 warnings: 0

mysql> select @sum;

+------+

| @sum |

+------+

| 3.00 |

+------+

1 row in set (0.00 sec)

12.1.2 建立多個執行語句的觸發器

mysql> create table test1(a1 int);

query ok, 0 rows affected (0.40 sec)

mysql> create table test2(a2 int);

query ok, 0 rows affected (0.34 sec)

mysql> create table test3(a3 int not null auto_increment primary key);

query ok, 0 rows affected (0.32 sec)

mysql> create table test4(a4 int not null auto_increment primary key,b4 int default 0);

query ok, 0 rows affected (0.29 sec)

mysql> delimiter //

mysql> create trigger testref before insert on test1

-> for each row begin

-> insert into test2 set a2=values(new.a1);

-> update test4 set b4=b4+1 where a4=new.a1;

-> end //

query ok, 0 rows affected (0.22 sec)

mysql> delimiter ;

mysql> insert into test3(a3) values

-> (null),(null),(null),(null),(null),(null),(null),(null),(null),(null);

query ok, 10 rows affected (0.14 sec)

records: 10 duplicates: 0 warnings: 0

mysql> insert into test4(a4) values

-> (0),(0),(0),(0),(0),(0),(0),(0),(0),(0);

query ok, 10 rows affected (0.04 sec)

records: 10 duplicates: 0 warnings: 0

12.2 檢視觸發器

select * from information_schema.triggers where condition;
(這裡的condition:trigger_name=『 』)

12.4 刪除觸發器

使用drop trigger語句。

例:

mysql> drop trigger ins_num;

query ok, 0 rows affected (0.01 sec)

12.5 綜合案例–觸發器的使用

01 建立乙個業務統計表persons

mysql> create table persons(name varchar(40),num int);

query ok, 0 rows affected (0.35 sec)

02 建立乙個銷售額表sales

mysql> create table sales(name varchar(40),sum int);

query ok, 0 rows affected (0.38 sec)

03 建立乙個觸發器

mysql> create trigger num_sum after insert on persons

-> for each row insert into sales values(new.name,7*new.num);

query ok, 0 rows affected (0.17 sec)

04 向persons表中插入記錄

mysql> insert into persons values('xiaoxiao',20),('xiaohua',69);

query ok, 2 rows affected (0.13 sec)

records: 2 duplicates: 0 warnings: 0

05 檢視表更新

mysql> select * from persons;

+----------+------+

| name | num |

+----------+------+

| xiaoxiao | 20 |

| xiaohua | 69 |

+----------+------+

2 rows in set (0.00 sec)

mysql> select * from sales;

+----------+------+

| name | sum |

+----------+------+

| xiaoxiao | 140 |

| xiaohua | 483 |

+----------+------+

2 rows in set (0.00 sec)

第8章 觸發器

重點一 觸發器 1.定義 觸發器是在對錶或檢視進行插入 更新或刪除操作是自動執行的儲存過程,有事務的特徵,可以跨表操作。2.分類 1 after觸發器 只能定義在表上 insert觸發器 update觸發器 delete觸發器 2 insert of觸發器 可以定義在表和檢視上 3.語法 creat...

PL SQL 第13章 使用觸發器

1.語句觸發器的語法如下 create or replace trigger trigger name timing event1 or event2 or event3 on table name pl sql block 如上所示,timing用於指定觸發時機 before或after even...

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...