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

MySql數(shù)據(jù)庫觸發(fā)器使用教程

 更新時間:2022年05月31日 11:15:49   作者:SportSky  
MySQL從5.0.2版本開始支持觸發(fā)器,MySQL的觸發(fā)器和存儲過程一樣,都是嵌入到MySQL服務(wù)器的一段程序,這篇文章主要給大家介紹了關(guān)于MySql數(shù)據(jù)庫觸發(fā)器使用的相關(guān)資料,需要的朋友可以參考下

一、介紹

1、觸發(fā)器是一種特殊的存儲過程。觸發(fā)器和存儲過程一樣,是一個能夠完成特定功能、存儲在數(shù)據(jù)庫服務(wù)器上的SQL片段,但是觸發(fā)器無語調(diào)用,當對數(shù)據(jù)庫表中的數(shù)據(jù)執(zhí)行DML操作時自動觸發(fā)這個SQL片段的執(zhí)行,無需手動調(diào)用。

2、在MySql中,只有執(zhí)行insert,delete,update操作時才能觸發(fā)觸發(fā)器的執(zhí)行

3、觸發(fā)器的這種特性可以協(xié)助應(yīng)用在數(shù)據(jù)庫端確保數(shù)據(jù)的完整性,日志記錄,數(shù)據(jù)校驗等操作

4、使用別名OLD和NEW來引用觸發(fā)器中發(fā)生變化的記錄內(nèi)容,這與其他的數(shù)據(jù)庫是相似的,現(xiàn)在觸發(fā)器只支持行級觸發(fā),不支持語句級觸發(fā)

二、操作

1、表數(shù)據(jù)準備

# 用戶表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用戶名',
  `sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '性別',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;


# 用戶操作日志表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user_log
-- ----------------------------
DROP TABLE IF EXISTS `user_log`;
CREATE TABLE `user_log`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `create_time` datetime(0) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

2、觸發(fā)器格式

# 創(chuàng)建只有一個執(zhí)行語句的觸發(fā)器

create trigger 觸發(fā)器名 before|after 觸發(fā)事件
on 表名 for each row
執(zhí)行語句;

# 創(chuàng)建有多個執(zhí)行語句的觸發(fā)器

create trigger 觸發(fā)器名 before|after 觸發(fā)事件
on 表名 for each row
begin  
   執(zhí)行語句列表
end;

3、操作

drop TRIGGER if EXISTS TRIGGER_test;
-- 需求1:當users表添加一行數(shù)據(jù),則會自動在user_log添加日志記錄
delimiter $$
CREATE TRIGGER TRIGGER_test after INSERT
on users FOR EACH ROW
BEGIN
INSERT INTO user_log(content,create_time) VALUES('添加了一條數(shù)據(jù)',NOW());
end $$
delimiter ;

INSERT INTO users(user_name,sex) VALUES('xiaohemaio','男');


-- 需求2:當users表修改一行數(shù)據(jù),則會自動在user_log添加日志記錄
drop TRIGGER if EXISTS TRIGGER_test1;

delimiter $$
CREATE TRIGGER TRIGGER_test1  BEFORE UPDATE
on users FOR EACH ROW
BEGIN
INSERT INTO user_log(content,create_time) VALUES('修改了一條數(shù)據(jù)',NOW());
end $$
delimiter ;

update users set user_name='迪麗熱巴' WHERE id=3;

三、觸發(fā)器NEW和OLD的使用

MySql中定義了NEW和OLD,用來表示觸發(fā)器的所在表中,觸發(fā)了觸發(fā)器的那一行數(shù)據(jù),來引用觸發(fā)器中發(fā)生變化的記錄內(nèi)容。

使用方法:NEW.columnName (columnName為相應(yīng)數(shù)據(jù)表某一列名)

1、案例

-- 案例一
drop TRIGGER if EXISTS TRIGGER_test2;

delimiter $$
CREATE TRIGGER TRIGGER_test2 after INSERT
on users FOR EACH ROW
BEGIN
INSERT INTO user_log(content,create_time) VALUES(CONCAT('添加的用戶信息為:',NEW.user_name,' 性別為:',NEW.sex ),NOW());
end $$
delimiter ;

INSERT INTO users(user_name,sex) VALUES('xiaohemaio','男');


-- 案例二 
drop TRIGGER if EXISTS TRIGGER_test3;

delimiter $$
CREATE TRIGGER TRIGGER_test3  BEFORE UPDATE
on users FOR EACH ROW
BEGIN
INSERT INTO user_log(content,create_time) VALUES(CONCAT('將:',OLD.user_name,' 修改為:',NEW.user_name ),NOW());
end $$
delimiter ;

update users set user_name='迪麗熱巴' WHERE id=4;

-- 案例三
drop TRIGGER if EXISTS TRIGGER_test4;

delimiter $$
CREATE TRIGGER TRIGGER_test4  BEFORE DELETE
on users FOR EACH ROW
BEGIN
INSERT INTO user_log(content,create_time) VALUES(CONCAT('將id為:',OLD.user_name,' 已刪除' ),NOW());
end $$
delimiter ;

DELETE FROM  users WHERE id=4;

四、其他操作

-- 查看觸發(fā)器
SHOW TRIGGERS;

-- 刪除觸發(fā)器
drop TRIGGER if EXISTS 觸發(fā)器名;

五、注意事項

1、觸發(fā)器中不能對本表進行insert,update,delete操作,以免遞歸循環(huán)觸發(fā)

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

3、觸發(fā)器是針對每一行的數(shù)據(jù),對增刪改非常頻繁的表上切記不要使用觸發(fā)器,因為非常消耗資源。

補充:驗證觸發(fā)器

向用戶表users插入數(shù)據(jù)。

mysql> INSERT INTO users (userName, password, name, nickName, sex, email, isManager) VALUE ('itbilu', 'e10adc3949ba59abbe56e057f20f883e', 'IT筆錄', 'itbilu', 1, 'cn.liuht@gmail.com', 0);

users原來沒有數(shù)據(jù),剛插入的數(shù)據(jù)userId為1。向用戶表角色表userRoles插入數(shù)據(jù),使觸發(fā)器觸發(fā):

mysql> INSERT INTO userRoles (userId, roleId) VALUE (1, 1);

剛才插入的數(shù)據(jù)已經(jīng)使觸發(fā)器觸發(fā),查看結(jié)果如下:

mysql> select isManager from users;
+-----------+
| isManager |
+-----------+
|         1 |
+-----------+

總結(jié)

到此這篇關(guān)于MySql數(shù)據(jù)庫觸發(fā)器使用的文章就介紹到這了,更多相關(guān)MySql觸發(fā)器使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql臨時表用法分析【查詢結(jié)果可存在臨時表中】

    mysql臨時表用法分析【查詢結(jié)果可存在臨時表中】

    這篇文章主要介紹了mysql臨時表用法,結(jié)合實例形式分析了MySQL將查詢結(jié)果存儲在臨時表中的相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • MySQL中Like模糊查詢速度太慢該如何進行優(yōu)化

    MySQL中Like模糊查詢速度太慢該如何進行優(yōu)化

    在業(yè)務(wù)場景中經(jīng)常會用到like模糊查詢,但是大家都知道,like是用不到索引的,所以當數(shù)據(jù)量非常大時,速度會非常慢,這篇文章主要給大家介紹了關(guān)于MySQL中Like模糊查詢速度太慢該如何進行優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • MySQL插入時間差八小時問題的解決方法

    MySQL插入時間差八小時問題的解決方法

    這篇文章主要給大家介紹了關(guān)于MySQL插入時間差八小時問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-12-12
  • 有關(guān)mysql優(yōu)化的一些東東整理

    有關(guān)mysql優(yōu)化的一些東東整理

    有關(guān)mysql優(yōu)化的一些東東,自己整理的,網(wǎng)上搜集的,供朋友們學習參考吧
    2013-02-02
  • MySQL實現(xiàn)批量插入以優(yōu)化性能的教程

    MySQL實現(xiàn)批量插入以優(yōu)化性能的教程

    這篇文章主要介紹了MySQL實現(xiàn)批量插入以優(yōu)化性能的教程,文中給出了運行時間來表示性能優(yōu)化后的對比,需要的朋友可以參考下
    2015-04-04
  • MySQL 8.0 新特性之檢查約束的實現(xiàn)

    MySQL 8.0 新特性之檢查約束的實現(xiàn)

    這篇文章主要介紹了MySQL 8.0 新特性之檢查約束的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • MySQL?InnoDB?存儲引擎的底層邏輯架構(gòu)

    MySQL?InnoDB?存儲引擎的底層邏輯架構(gòu)

    這篇文章主要為大家介紹了MySQL?InnoDB?存儲引擎的底層邏輯架構(gòu)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • MySQL安全設(shè)置圖文教程

    MySQL安全設(shè)置圖文教程

    MySQL安全設(shè)置,跟mssql差不多都是以普通用戶權(quán)限運行mysql。其它的也需要注意下。
    2011-01-01
  • 小白安裝登錄mysql-8.0.19-winx64的教程圖解(新手必看)

    小白安裝登錄mysql-8.0.19-winx64的教程圖解(新手必看)

    這篇文章主要介紹了安裝登錄mysql-8.0.19-winx64的教程圖解,非常適合新手學習參考,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Linux下rpm方式安裝mysql教程

    Linux下rpm方式安裝mysql教程

    這篇文章主要為大家詳細介紹了Linux下rpm方式安裝mysql教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評論

云林县| 莱州市| 开化县| 屏东县| 赣榆县| 克山县| 垦利县| 张家港市| 高平市| 海伦市| 凯里市| 洛隆县| 长顺县| 正安县| 焦作市| 江孜县| 托克托县| 肇州县| 开化县| 徐州市| 武清区| 双柏县| 普兰店市| 青龙| 朝阳县| 灵台县| 分宜县| 修水县| 高雄县| 宝应县| 澄迈县| 厦门市| 达州市| 乌兰浩特市| 呈贡县| 涡阳县| 理塘县| 临汾市| 乌兰县| 开封县| 普宁市|