1. 程式人生 > 資料庫 >mysql 觸發器語法與應用示例

mysql 觸發器語法與應用示例

本文例項講述了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,'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,operatetime) VALUES (old.id,'delete a user',now());
end
;;
DELIMITER ;

更多關於MySQL相關內容感興趣的讀者可檢視本站專題:《MySQL查詢技巧大全》、《MySQL事務操作技巧彙總》、《MySQL儲存過程技巧大全》、《MySQL資料庫鎖相關技巧彙總》及《MySQL常用函式大彙總》

希望本文所述對大家MySQL資料庫計有所幫助。