`
zl-2577
  • 浏览: 80470 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL触发器笔记

阅读更多
一、 MySQL触发器概念
MySQL5.0以上版本支持触发器,触发器是与表有关的命名数据库对象,当表出现特定事件时,将激活该对象。
二、 MySQL触发器语法
CREATE TRIGGER trigger_name trigger_time trigger_event
       ON tbl_name FOR EACH ROW trigger_stmt
trigger_time:触发动作时间,可以是BEFORE或AFTER,以指明触发程序是在激活它的语句之前或之后触发。BEFORE update能否取到new.字段值?BEFORE AFTER使用时的区别?
Before与After区别:before:(insert、update)可以对new进行修改,after不能对new进行修改。两者都不能修改old数据。
                              在本表插入字段值需要用new计算,只能用before,在别的表中记录插入成功记录或统计插入的条数用after。
trigger_event:激活触发程序的语句类型。
            INSERT:将新行插入表时激活触发程序,如INSERT、LOAD DATA和REPLACE语句。
UPDATE:更改某一行时激活触发程序,如UPDATE语句。
DELETE:从表中删除某一行时激活触发程序,如DELETE和REPLACE语句
trigger_stmt:触发程序激活时执行的语句。如果你打算执行多个语句,可使用BEGIN ... END复合语句结构。
DELIMITER |
CREATE TRIGGER testref BEFORE INSERT ON test1
  FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1; 
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
  END
|
DELIMITER ;
注:
1、 使用别名OLD和NEW,能够引用与触发程序相关的表中的列。OLD.col_name在更新或删除它之前,引用已有行中的1列,是否可以引
用old与trigger_time无关,NEW.col_name在更新它之后引用将要插入的新行的1列或已有行的1列。
INSERT:只可引用NEW、DELETE:只可引用OLD、 UPDATE:可以引用NEW或OLD。
2、激活触发程序时,对于触发程序引用的所有OLD和NEW列,需要具有SELECT权限,对于作为SET赋值目标的所有NEW列, 需要具
有UPDATE权限。
    3、CREATE TRIGGER语句需要SUPER权限。
4、show   triggers \G :显示数据库中所有触发器。
5、对于具有相同触发程序动作时间和事件的给定表,不能有两个触发程序。
6、触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL
7、触发程序不能使用以显式或隐式方式开始或结束事务的语句,如START TRANSACTION、COMMIT或ROLLBACK。
DROP TRIGGER [schema_name.]trigger_name
三、 MySQL触发器例子
可以在从表中删除每一行之前,或在更新了每一行后激活触发程序。
CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;
SET @sum = 0;
INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);
SELECT @sum AS 'Total amount inserted';
注:
如果触发程序比较复杂,可以将其单独定义在存储过程中,然后使用简单的CALL语句从触发程序调用存储程序
MySQL处理错误的方式如下:
如果BEFORE触发程序失败,不执行相应行上的操作。
仅当BEFORE触发程序(如果有的话)和行操作均已成功执行,才执行AFTER触发程序。
如果在BEFORE或AFTER触发程序的执行过程中出现错误,将导致调用触发程序的整个语句的失败。
四、 具体应用举例
/*
MySQL Data Transfer
Source Host: localhost
Source Database: abc
Target Host: localhost
Target Database: abc
Date: 2010-1-22 12:37:46
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for abc
-- ----------------------------
DROP TABLE IF EXISTS `abc`;
CREATE TABLE `abc` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) default NULL,
  `age` varchar(50) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for cba
-- ----------------------------
DROP TABLE IF EXISTS `cba`;
CREATE TABLE `cba` (
  `id` int(11) NOT NULL auto_increment,
  `name2` varchar(50) default NULL,
  `age2` varchar(50) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records
-- ----------------------------

-- ----------------------------
-- Trigger structure for t_aaa_abc_ai
-- ----------------------------
DELIMITER ;;
CREATE TRIGGER `t_aaa_abc_ai` AFTER INSERT ON `abc` FOR EACH ROW
begin
insert into cba(name2,age2)
values(New.name,New.age); 
end;;
DELIMITER ;



分享到:
评论

相关推荐

    尚硅谷mysql笔记.zip

    尚硅谷的MySQL笔记可能是为了帮助学习者深入理解和掌握MySQL的相关知识而编写的。这份笔记可能包含了从基础概念到高级特性的全面讲解,包括但不限于SQL语言、数据类型、数据库设计、索引、事务处理、视图、存储过程...

    非常详细的某培训机构mysql学习笔记

    MySQL触发器 MySQL存储过程与函数 MySQL3 MySQL安全机制 MySQL日志管理 MySQL数据备份 备份概述 mysqldump [逻辑] mydumper [逻辑] into outfile [逻辑] xtrabackup [物理] snapshot [物理] tar打包...

    狂神MySQL笔记.rar

    最后,笔记可能会涵盖高级主题,如视图、存储过程、触发器等,这些特性可以提高数据库的灵活性和可维护性。同时,也会涉及MySQL的集群配置和高可用方案,如MySQL Fabric和Group Replication。 通过这份【狂神MySQL...

    mysql学习笔记.rar

    首先,"mysql学习笔记.doc"很可能是核心的学习资料,它可能包含了MySQL的基础概念、安装与配置、SQL语言基础、数据类型、数据库设计、表的创建与管理、索引、视图、存储过程、触发器、事务处理、备份与恢复、性能...

    MySQL学习笔记(含基础、运维、进阶三部分)

    MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) 包含了我学习 MySQL 过程中的笔记和资源,从入门到进阶的内容都有涉及。通过...

    深入浅出MySQL-读书笔记byCZF

    触发器则是响应数据库表中的数据变化(如INSERT、UPDATE、DELETE)而自动执行的一段代码。它们可以有效地帮助管理和维护数据库的完整性。 在事务控制和锁定语句方面,MySQL通过事务来保证数据的原子性、一致性、...

    MYSQL笔记.zip

    MySQL是世界上最受欢迎的关系型数据库管理系统(RDBMS)之一,被广泛应用于Web应用程序和各种规模的企业...然而,要想成为真正的MySQL专家,还需要不断实践和深入学习更高级的主题,如存储过程、触发器、视图、分区等。

    Mysql学习笔记.pdf

    MySQL 是一款广泛使用的开源关系型数据库管理系统,其学习笔记涵盖了多个关键知识点。以下是对这些知识点的详细解释: 1. **MySQL 体系架构** - **网络连接层**:处理客户端的连接请求,包括连接管理、认证和安全...

    mysql学习笔记和案例(完全版)2019_10_16.zip

    这份"mysql学习笔记和案例(完全版)2019_10_16.zip"压缩包文件包含了一个全面的学习资源,旨在帮助你掌握MySQL的核心概念和实用技巧。 首先,让我们深入了解一下MySQL的基础知识。MySQL是一个开源、免费的SQL数据库...

    MySQL笔记,比较全,知识点都有,而且有例子

    这份"MySQL笔记"涵盖了其主要知识点,并且每个概念都配有实例,使得学习更为直观易懂。以下是对这些笔记的详细解析: 一、基础概念 MySQL的基础部分包括数据库、表、字段、记录等基本元素的创建、修改和删除。理解...

    mysql 学习笔记 绝对原创 包含工作中常用的语句 存储过程 函数 触发器等

    这篇学习笔记将深入探讨MySQL的基础知识,包括数据类型、操作命令、存储过程和触发器等核心概念。 首先,让我们来看看MySQL的一些基本特点。与其他数据库系统如Oracle、SQL Server和DB2相比,MySQL以其开源免费和高...

    MySQL笔记.pdf

    这只是MySQL笔记的部分内容,实际上MySQL的功能远不止这些,还包括视图、索引、事务处理、存储过程、触发器、函数等多个高级特性。了解并掌握这些内容,将有助于在实际项目中更高效地管理和操作数据。

    MYSQL读书笔记整理

    - **存储过程和触发器**:存储过程可以封装复杂的业务逻辑,提高代码复用,而触发器则可以在特定事件(如INSERT、UPDATE或DELETE)发生时自动执行某些操作。 - **视图**:视图是虚拟表,基于一个或多个表的查询...

    mysql 个人学习笔记

    MySQL是世界上最受欢迎的关系型数据库管理...以上只是MySQL学习笔记的一部分内容,实际的学习过程中,你还会接触到触发器、分区、复制、集群等更高级的主题。不断实践和深入研究,才能真正掌握这个强大的数据库系统。

    mysql相关笔记(基础+存储过程+触发器等)

    详细的mysql笔记,各种查询整理,触发器整理,存储过程整理,里面还有结合着数据库设计的小案例,非常实用!

    mysql学习笔记

    这份“mysql学习笔记”涵盖了MySQL的基础知识,包括但不限于数据库的概念、SQL语言的使用、以及更深入的多表操作。 在“day08入门笔记”中,你可能会学到以下内容: 1. **数据库基本概念**:了解什么是数据库,...

    mysql DBA学习笔记

    MySQL支持标准SQL,包括数据查询、插入、更新和删除操作,以及视图、存储过程和触发器等高级特性。学习笔记会深入解析SQL语法,提供实用的查询技巧和最佳实践。 四、数据库设计 笔记会涵盖关系模型、范式理论,以及...

    超经典mysql dba 学习笔记.zip

    MySQL的高级特性,如分区、视图、触发器、存储过程等,以及MySQL集群和InnoDB Cluster的使用,都是DBA需要掌握的内容。 九、版本升级与迁移 随着MySQL版本的更新,了解如何规划和执行版本升级,以及数据迁移至新...

    MySQL笔记之触发器的应用

    MySQL触发器是数据库管理系统提供的一种机制,允许在特定的数据操作(INSERT、UPDATE、DELETE)发生时自动执行预定义的一系列SQL语句。触发器的概念基于事件驱动,它们可以帮助数据库管理员实现复杂的业务规则,确保...

    MySQL学习笔记、学习文档

    MySQL入Ar ]很简单学习笔记李国华.dox Oracle查看表结构.txt SQL作业代理禁用.txt sql.txt SQL-Transaction事物一起执行.txt sq和oracle的区别.txt sysobjects中type字段值意思txt W3School例句.txt 按照中文首字母...

Global site tag (gtag.js) - Google Analytics