Mysql中的觸發器

來源:互聯網
上載者:User

標籤:

什麼是觸發器

簡單的說,就是一張表發生了某件事(插入、刪除、更新操作),然後自動觸發了預先編寫好的若干條SQL語句的執行;

特點及作用

特點:觸發事件的操作和觸發器裡的SQL語句是一個事務操作,具有原子性,要麼全部執行,要麼都不執行;

作用:保證資料的完整性,起到約束的作用;

例子:建立觸發器,記錄表的增、刪、改操作記錄

接下來將建立user和user_history表,以及三個觸發器tri_insert_user、tri_update_user、tri_delete_user,分別對應user表的增、刪、改三件事;

  • 建立user表;
DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `account` varchar(255) DEFAULT NULL,  `name` varchar(255) DEFAULT NULL,  `address` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 建立對user表操作曆史表;
DROP TABLE IF EXISTS `user_history`;CREATE TABLE `user_history` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `user_id` bigint(20) NOT NULL,  `operatetype` varchar(200) NOT NULL,  `operatetime` datetime NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 建立user表插入事件對應的觸發器tri_insert_user;

幾點說明:

DELIMITER:改變輸入的結束符,預設情況下輸入結束符是分號;,這裡把它改成了兩個分號;;,這樣做的目的是把多條含分號的語句做個封裝,全部輸入完之後一起執行,而不是一遇到預設的分號結束符就自動執行;

new:當觸發插入和更新事件時可用,指向的是被操作的記錄

old: 當觸發刪除和更新事件時可用,指向的是被操作的記錄

DROP TRIGGER IF EXISTS `tri_insert_user`;DELIMITER ;;CREATE TRIGGER `tri_insert_user` AFTER INSERT ON `user` FOR EACH ROW begin    INSERT INTO user_history(user_id, operatetype, operatetime) VALUES (new.id, ‘add a user‘,  now());end;;DELIMITER ;
  • 建立user表更新事件對應的觸發器tri_update_user;
DROP TRIGGER IF EXISTS `tri_update_user`;DELIMITER ;;CREATE TRIGGER `tri_update_user` AFTER UPDATE ON `user` FOR EACH ROW begin    INSERT INTO user_history(user_id,operatetype, operatetime) VALUES (new.id, ‘update a user‘, now());end;;DELIMITER ;
  • 建立user表刪除事件對應的觸發器tri_delete_user;
DROP TRIGGER IF EXISTS `tri_delete_user`;DELIMITER ;;CREATE TRIGGER `tri_delete_user` AFTER DELETE ON `user` FOR EACH ROW begin    INSERT INTO user_history(user_id, operatetype, operatetime) VALUES (old.id, ‘delete a user‘, now());end;;DELIMITER ;
  • 至此,全部表及觸發器建立完成,開始驗證結果,分別做插入、修改、刪除事件,執行以下語句,觀察user_history是否自動產生操作記錄;
INSERT INTO user(account, name, address) VALUES (‘user1‘, ‘user1‘, ‘user1‘);INSERT INTO user(account, name, address) VALUES (‘user2‘, ‘user2‘, ‘user2‘);UPDATE user SET name = ‘user3‘, account = ‘user3‘, address=‘user3‘ where name=‘user1‘;DELETE FROM `user` where name = ‘user2‘;
  • 觀察結果user表和user_history表的結果,操作記錄已產生,說明觸發器工作正常;

 

Mysql中的觸發器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.