金沙国际平台登录-金沙国际会员登录

热门关键词: 金沙国际平台登录,金沙国际会员登录

例如不允许下班后和节假日修改数据库数据,1、

0.触发器的基本概念触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。

mysql手册

数据库触发器有以下的作用:

一、触发器

(1).安全性。可以基于数据库的值使用户具有操作数据库的某种权利。

1、触发器(trigger)是一种与表操作有关的数据库对象,该对象与编程语言中的函数非常类似,需要先声明后执行,并由事件来触发执行。

# 可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据。

2、触发器结构组成

# 可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%。

CREATE TRIGGER trigger_name #触发器名
trigger_time #触发时机,取值为 BEFORE 或 AFTER
trigger_event #触发事件,取值为 INSERT、UPDATE 或 DELETE
ON tbl_name #建立触发器的表名,即在哪张表上建立触发器
FOR EACH ROW
trigger_stmt #触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句

(2).审计。可以跟踪用户对数据库的操作。

  注意:1)trigger_event中的INSERT包括INSERT、LOAD DATA(用户高速的向数据库中做批量mysql导入数据load data infile用法)和REPLACE(向表中插入多条记录,如:replace into table (id,name) values('1','aa'),('2','bb'))语句,DELETE包括DELETE和REPLACE语句

# 审计用户操作数据库的语句。

     2)对于某一表,不能有两个BEFORE UPDATE触发程序。但可以有1个BEFORE UPDATE触发程序和1个BEFORE INSERT触发程序,或1个BEFORE UPDATE触发程序和1个AFTER UPDATE触发程序

# 把用户对数据库的更新写入审计表。

     3)tbl_name必须引用永久性表。不能将触发程序与TEMPORARY表(临时表)或视图关联起来

(3).实现复杂的数据完整性规则

     4)触发程序(trigger_stmt中)不能调用将数据返回客户端的存储程序(如SELECT查询),也不能使用采用CALL语句的动态SQL(允许存储程序通过参数将数据返回触发程序)。触发程序也不能使用以显式或隐式方式开始或结束事务的语句,如START TRANSACTION、COMMIT或ROLLBACK。

# 实现非标准的数据完整性检查和约束。触发器可产生比规则更为复杂的限制。与规则不同,触发器可以引用列或数据库对象。例如,触发器可回退任何企图吃进超过自己保证金的期货。

3、作用

# 提供可变的缺省值。

  请参考mysql触发器的作用及语法

(4).实现复杂的非标准的数据库相关完整性规则。触发器可以对数据库中相关的表进行连环更新。例如,在auths表author_code列上的删除触发器可导致相应删除在其它表中的与之匹配的行。

二、触发器操作

# 在修改或删除时级联修改或删除其它表中的与之匹配的行。

测试用表

# 在修改或删除时把其它表中的与之匹配的行设成NULL值。

CREATE TABLE `t_dept` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `dname` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=latin1

CREATE TABLE `t_diary` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `createtime` datetime NOT NULL,
  `dept` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=latin1

# 在修改或删除时把其它表中的与之匹配的行级联设成缺省值。

1、创建

# 触发器能够拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。当插入一个与其主健不匹配的外部键时,这种触发器会起作用。例如,可以在books.author_code 列上生成一个插入触发器,如果新值与auths.author_code列中的某值不匹配时,插入被回退。

CREATE TRIGGER tri_dept#触发器名 
BEFORE INSERT #触发时间(有BEFORE、AFTER)、事件(有INSERT、DELETE、UPDATE)
ON t_dept FOR EACH ROW #触发器作用的表
BEGIN #激活触发器后执行的语句,可以是多条,以";"分开
INSERT INTO t_diary VALUES (NULL, NOW(), new.dname); #new.dname为触发事件的列
END

(5).同步实时地复制表中的数据。

  触发器实现在向t_dept表中插入数据前先向t_diary中插入一条数据

(6).自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。例如,如果公司的帐号上的资金低于5万元则立即给财务人员发送警告数据。

CREATE TRIGGER tri_dept_add
AFTER INSERT 
ON t_dept FOR EACH ROW
BEGIN
UPDATE t_diary SET dept = concat(dept ,new.dname) WHERE id = 32;
END

1. 创建触发器语法

  注意:使用OLD和NEW关键字,能够访问受触发程序影响的行中的列(OLD和NEW不区分大小写)。在INSERT触发程序中,仅能使用NEW.col_name,没有旧行。在DELETE触发程序中,仅能使用OLD.col_name,没有新行。在UPDATE触发程序中,可以使用OLD.col_name来引用更新前的某一行的列,也能使用NEW.col_name来引用更新后的行中的列。

本文由金沙国际平台登录发布于金沙国际平台登录,转载请注明出处:例如不允许下班后和节假日修改数据库数据,1、

您可能还会对下面的文章感兴趣: