觸發器是與表相關的資料庫物件,在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...