成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL中創建觸發器需要執行哪些操作?

數據庫 MySQL
觸發器,就是一種特殊的存儲過程。觸發器和存儲過程一樣是一個能夠完成特定功能、存儲在數據庫服務器上的SQL片段,但是觸發器無需調用,當對數據庫表中的數據執行DML操作時自動觸發這個SQL片段的執行,無需手動調用。

什么是觸發器

觸發器,就是一種特殊的存儲過程。觸發器和存儲過程一樣是一個能夠完成特定功能、存儲在數據庫服務器上的SQL片段,但是觸發器無需調用,當對數據庫表中的數據執行DML操作時自動觸發這個SQL片段的執行,無需手動調用。觸發器的這種特性可以協助應用在數據庫端確保數據的完整性 , 日志記錄 , 數據校驗等操作 。在MySQL中,只有執行insert,delete,update操作時才能觸發觸發器的執行。

使用別名 OLD 和 NEW 來引用觸發器中發生變化的記錄內容,這與其他的數據庫是相似的。現在觸發器還只支持行級觸發,不支持語句級觸發。

創建觸發器

創建只有一個執行語句的觸發器,具體代碼如下:

create trigger 觸發器名 before|after 觸發事件
on 表名 for each row 
執行語句;

創建有多個執行語句的觸發器的具體代碼如下:

create trigger 觸發器名 before|after  觸發事件 
on 表名 for each row
begin
     執行語句列表
end;
-- 數據準備
create database if not exists mydb10_trigger;
use mydb10_trigger;
 
-- 用戶表
create table user(
    uid int primary key ,
    username varchar(50) not null,
    password varchar(50) not null
);
-- 用戶信息操作日志表
create table user_logs(
    id int primary key auto_increment,
    time timestamp,
    log_text varchar(255)
);
-- 如果觸發器存在,則先刪除
drop trigger if  exists trigger_test1;
 
-- 創建觸發器trigger_test1
create trigger trigger_test1
after insert on user -- 觸發時機:當添加user表數據時觸發
for each row
insert into user_logs values(NULL,now(), '有新用戶注冊');
 
-- 添加數據,觸發器自動執行并添加日志代碼
insert into user values(1,'張三','123456');
-- 如果觸發器trigger_test2存在,則先刪除
drop trigger if exists trigger_test2;

-- 創建觸發器trigger_test2
delimiter $$
create trigger trigger_test2
after update on user  -- 觸發時機:當修改user表數據時觸發
for each row -- 每一行
begin
insert into user_logs values(NULL,now(), '用戶修改發生了修改');
end $$
 
delimiter ;
 
-- 添加數據,觸發器自動執行并添加日志代碼
update user set password = '888888' where uid = 1;

操作-NEW與OLD

MySQL 中定義了 NEW 和 OLD,用來表示觸發器的所在表中,觸發了觸發器的那一行數據,來引用觸發器中發生變化的記錄內容,具體地:

使用方法:NEW.columnName (columnName為相應數據表某一列名)示例代碼如下:

create trigger trigger_test3 after insert
on user for each row
insert into user_logs values(NULL,now(),concat('有新用戶添加,信息為:',NEW.uid,NEW.username,NEW.password));
 
-- 測試
insert into user values(4,'趙六','123456');

查看觸發器可以使用入下代碼:

show triggers;

刪除觸發器可以使用入下代碼:

-- drop trigger [if exists] trigger_name 
drop trigger if exists trigger_test1;

注意:

1.MYSQL中觸發器中不能對本表進行 insert ,update ,delete 操作,以免遞歸循環觸發。

2.盡量少使用觸發器,假設觸發器觸發每次執行1s,insert table 500條數據,那么就需要觸發500次觸發器,光是觸發器執行的時間就花費了500s,而insert 500條數據一共是1s,那么這個insert的效率就非常低了。

3. 觸發器是針對每一行的;對增刪改非常頻繁的表上切記不要使用觸發器,因為它會非常消耗資源。

責任編輯:華軒 來源: 今日頭條
相關推薦

2010-05-18 15:36:44

MySQL觸發器

2010-10-11 14:52:43

Mysql觸發器

2010-06-13 09:46:44

MySQL5觸發器

2009-12-24 17:52:05

WPF觸發器

2010-05-18 14:35:06

MySQL觸發器

2010-04-23 12:50:46

Oracle觸發器

2010-04-15 15:32:59

Oracle操作日志

2011-05-20 14:06:25

Oracle觸發器

2021-07-30 10:33:57

MySQL觸發器數據

2010-05-18 15:58:39

MySQL觸發器

2010-05-31 18:06:07

MySQL 觸發器

2010-10-12 10:04:15

MySQL觸發器

2010-10-12 10:24:58

mysql觸發器

2010-07-16 10:19:31

2010-05-19 11:25:46

MySQL觸發器

2010-05-26 17:57:44

MySQL 觸發器

2010-10-12 10:10:55

mysql觸發器

2010-07-05 11:09:55

SQL Server觸

2010-10-12 09:41:26

mysql觸發器

2010-10-12 10:38:29

mysql觸發器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产亚洲一区二区三区在线观看 | 91视频麻豆 | 日日干夜夜操天天操 | 99视频在线免费观看 | 男女视频在线看 | 婷婷丁香在线视频 | 日韩有码一区 | 亚洲协和影视 | 999久久久久久久久6666 | 91精品国产91久久综合桃花 | 日韩在线观看中文字幕 | 成人午夜精品一区二区三区 | 一区二区三区亚洲 | 欧美日韩电影一区二区 | 色呦呦网站 | 日韩精品一区二区三区在线观看 | 美女黄视频网站 | 日韩成人免费 | 欧美国产日本一区 | 在线观看av网站永久 | www.色.com| 成人欧美一区二区三区在线观看 | 精品国产乱码久久久久久果冻传媒 | 99久久婷婷 | 全部免费毛片在线播放网站 | 亚洲区中文字幕 | 一二三四av | 成人免费观看男女羞羞视频 | 亚洲高清在线 | 免费视频中文字幕 | 瑟瑟激情| 亚洲成年影院 | 99成人| 97久久精品午夜一区二区 | 免费精品久久久久久中文字幕 | 日韩一区二区福利视频 | 日韩欧美一区二区三区免费观看 | 91麻豆精品一区二区三区 | 亚洲成年在线 | 一区二区精品视频 | 91影片|