歡迎您光臨本站 註冊首頁

mysql 觸發器語法與應用示例

←手機掃碼閱讀     madbeef @ 2020-05-19 , reply:0

本文實例講述了mysql 觸發器語法與應用。分享給大家供大家參考,具體如下:

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

//創建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;


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

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

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

INSERT:

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 ;


UPDATE:

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 ;


DELETE:

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 ;



[madbeef ] mysql 觸發器語法與應用示例已經有368次圍觀

http://coctec.com/docs/mysql/show-post-235025.html