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,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 ;

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总》

希望本文所述对大家MySQL数据库计有所帮助。

(0)

相关推荐

  • MySQL触发器使用详解

    MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 创建触发器 在MySQL中,创建触发器语法如下: 复制代码 代码如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 其中: trigger_name:标识触发器名称,用户自行指定: trigger_tim

  • Mysql中的触发器简单介绍及使用案例

    什么是触发器? 触发器是数据库的一个程序,他是用来监听着数据表的某个行为,一旦数据表的这个行为发生了,马上执行相应的sql语句 触发器的语法结构: create trigger 触发器的名称触发器事件 on 监听的表名 for each row 行为发生后执行的sql语句 触发器事件组成::两部分组成: 触发器事件发生的时间-----是在监听的表的行为 after before 常用的是after 触发器执行的内容:增删改 创建order 表的时候,需要注意,因为order在mysql中是一个关

  • mysql 触发器用法实例详解

     MySQL触发器语法详解: 触发器 trigger是一种特殊的存储过程,他在插入(inset).删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力.触发器不是由程序调用,而是由某个事件来触发的.在有数据修改时自动强制执行其业务规则,经常用于加强数据的完整性约束和业务规则等.触发器可以查询其他表,而且包含复制的sql语句.触发器也可用于强制引用完整性.触发器可以强制比用check约束定义的约束更为复杂的约束. (一).CREAT

  • MySQL中触发器的基础学习教程

    0.触发器的基本概念 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力. 数据库触发器有以下的作用: (1).安全性.可以基于数据库的值使用户具有操作数据库的某种权利. # 可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据. # 可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%. (2).审计.可以跟踪用户对数据库的操作. # 审计用户操作数据库的语句. # 把用户对数

  • MySQL中触发器入门简单实例与介绍

    创建触发器.创建触发器语法如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 其中trigger_name标识触发器名称,用户自行指定: trigger_time标识触发时机,用before和after替换: trigger_event标识触发事件,用insert,update和delete替换: tbl_name标识建立触发器的表名,即在哪张表上建立触发

  • 如何测试mysql触发器和存储过程

    1. 为了测试触发器和存储过程,首先建立一张简单的表: 复制代码 代码如下: CREATE TABLE `airuser` ( `userId` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(128) NOT NULL, PRIMARY KEY (`userId`) )ENGINE=InnoDB DEFAULT CHARSET=utf8 2. 为该表的插入操作,创建一张记录表: 复制代码 代码如下: CREATE TABLE `airus

  • MySQL触发器概念、原理与用法详解

    本文实例讲述了MySQL触发器概念.原理与用法.分享给大家供大家参考,具体如下: 1.触发器的概念 触发器(trigger)是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete, update)时就会激活它执行.--百度百科 上面是百度给的触发器的概念,我理解的触发器的概念,就是你执行一条sql语句,这条sql语句的执行会自动去触发执行其他的s

  • MySQL触发器简单用法示例

    本文实例讲述了MySQL触发器简单用法.分享给大家供大家参考,具体如下: mysql触发器和存储过程一样,是嵌入到mysql的一段程序,触发器是由事件来触发的,这些事件包括,INSERT,UPDATE,DELETE,不包括SELECT 创建触发器 CREATE TRIGGER name,time,event ON table_name FOR EACH ROW trigger_stmt 例如 复制代码 代码如下: CREATE TRIGGER ins_sum BEFORE INSERT ON a

  • MySQL 5.0触发器参考教程第1/4页

    Conventions and Styles约定和编程风格 每次我想要演示实际代码时,我会对mysql客户端的屏幕就出现的代码进行调整,将字体改成Courier,使他们看起来与普通文本不一样(让大家区别程序代码和正文).在这里举个例子: mysql> DROP FUNCTION f; Query OK, 0 rows affected (0.00 sec) 如果实例比较大,则需要在某些行和段落间加注释,同时我会用将"<--"符号放在页面的右边以表示强调.例如: mysql&

  • MySQL如何创建触发器

    本文实例为大家分享了MySQL创建触发器的具体代码,供大家参考,具体内容如下 先来个实例: #建表 DROP TABLE IF EXISTS t_attendance; CREATE TABLE t_attendance ( job_no VARCHAR(30) DEFAULT '', operateTime VARCHAR(20) DEFAULT '', INDEX index_operateTime(operateTime), INDEX index_jobNo(job_no) ) ENGI

  • MySQL与SQL的触发器的不同写法

    <触发器作用> 当在SQL.MySQL数据库中一张表中插入一条记录时,触动触发器,使同一数据库的另一张表插入相同记录. 在学习的过程中,发现两者的写法是不同的. <触发器作用> 1.在SQL中建立两张表sql_test,sql_tem.(两张表的字段是一样的) 复制代码 代码如下: create table sql_test ( id int, name varchar(16) ) create table sql_tem ( id int, name varchar(16) )

随机推荐