MySql資料庫9 提公升 觸發器

2021-10-08 01:59:07 字數 3733 閱讀 8293

觸發器是與表相關的資料庫物件,在insert/update/delete之前或之後,觸發並執行觸發器中定義的sql語句集合。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性,日誌記錄,資料校驗等操作。

使用別名old和new來引用觸發器中發生變化的記錄內容,當前觸發器僅支援行即觸發,不支援語句級觸發。

觸發器型別

new和old的使用

insert觸發器

new表示將要或者已經新增的資料

update觸發器

old表示修改之前的資料,new表示將要或者已經修改後的資料

delete觸發器

old表示將要或者已經刪除的資料

create

trigger 觸發器名稱

before|

after

insert

|update

|delete

on 表名

[for each row

]# 行級觸發器

begin

觸發器內容

end

需求:在插入學生資訊的時候,自動查詢出老師的資訊,然後插入到學生老師對應關係表中

delimiter $

create

trigger auto_add_teacher

after

insert

on student_info

for each row

begin

declare teachername varchar(32

)default

'沒有賦值成功'

;# 根據學生的班級好查詢出老師姓名放到teachername這個變數中

select t.t_name into teachername

from teacher_info t where t.class = new.class;

# 插入學生姓名和老師姓名

insert

into student_teacher_info(s_name, t_name)

values

(new.s_name,teachername)

;end$

在mysql客戶端執行

建立觸發器

mysql>

create

trigger auto_add_teacher

->

after

insert

->

on student_info

->

for each row

->

begin

->

declare teachername varchar(32

)default'';

->

select t.t_name into teachername

->

from teacher_info t where t.class = new.class;

->

insert

into student_teacher_info(s_name, t_name)

values

(new.s_name,teachername);-

>

end$

query ok,

0rows affected (

0.01 sec)

插入一條學生資訊

mysql>

insert

into student_info(key_id, s_name, age, class)

values

(null

,'xiaohua',17

,'002');$

query ok,

1row affected (

0.01 sec)

學生資訊插入成功

mysql>

select

*from student_info $

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

| key_id | s_name | age | class |

+--------+---------+------+-------+|1

| xiaohua |17|

002|

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

1row

inset

(0.00 sec)

學生老師對應關係資訊插入成功

mysql>

select

*from student_teacher_info $

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

| s_name | t_name |

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

| xiaohua | 張老師 |

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

1row

inset

(0.00 sec)

show triggers;
使用\g格式化查詢結果:

mysql>

show triggers \g $**

****

****

****

****

****

****

*1.row***

****

****

****

****

****

****

trigger: auto_add_teacher

event: insert

table: student_info

statement: begin

declare teachername varchar(32

)default'';

select t.t_name into teachername

from teacher_info t where t.class = new.class;

insert

into student_teacher_info(s_name, t_name)

values

(new.s_name,teachername)

;end

timing: after

created: 2020-07

-1207:42:45.05

sql_mode: only_full_group_by,strict_trans_tables,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_auto_create_user,no_engine_substitution

definer: root@localhost

character_set_client: latin1

collation_connection: latin1_swedish_ci

database collation: utf8_general_ci

1row

inset

(0.00 sec)

drop

trigger

[schema_name]

.trigger_name

# 如果沒有指定schema,則預設為當前資料庫

資料庫 MySQL觸發器

觸發器 trigger 監視某種情況,並觸發某種操作。觸發器建立語法四要素 1.監視地點 table 2.監視事件 insert update delete 3.觸發時間 after before 4.觸發事件 insert update delete 語法 create trigger trigg...

九 資料庫mysql觸發器

9.1觸發器作用 當操作了某張表時,希望同時觸發一些動作 行為,可以使觸發器完成!例如 當向員工表插入一條記錄時,希望同時往日誌表插入資料 select from emp create table test log id int primary key auto increment,content ...

mysql資料庫的觸發器 Mysql資料庫觸發器

我還是msyql資料庫觸發器的新手.我想問一下我的台詞 create trigger secure dml3 before delete on t pembelian begin if select to char sysdate,dy in sun or select to char sysdat...