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标识建立触发器的表名,即在哪张表上建立触发器;

trigger_stmt是触发器程序体;触发器程序可以使用begin和end作为开始和结束,中间包含多条语句;

~~说明~~

CREATE TRIGGER <触发器名称>  --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.      { BEFORE | AFTER }  --触发器有执行的时间设置:可以设置为事件发生前或后。      { INSERT | UPDATE | DELETE }  --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。      ON <表名称>  --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。      FOR EACH ROW  --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。      <触发器SQL语句>  --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。    --你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。

~~实例~~

example1:

创建表tab1


代码如下:

DROP TABLE IF EXISTS tab1;
CREATE TABLE tab1(
    tab1_id varchar(11)
);

创建表tab2


代码如下:

DROP TABLE IF EXISTS tab2;

CREATE TABLE tab2(

tab2_id varchar(11)

);

创建触发器: t_afterinsert_on_tab1

作用:增加tab1表记录后自动将记录增加到tab2表中


代码如下:

DROP TRIGGER IF EXISTS t_afterinsert_on_tab1;

CREATE TRIGGER t_afterinsert_on_tab1

AFTER INSERT ON tab1

FOR EACH ROW

BEGIN

insert into tab2(tab2_id) values(new.tab1_id);

END;

测试一下


代码如下:

INSERT INTO tab1(tab1_id) values('0001');

看看结果

SELECT * FROM tab1;

SELECT * FROM tab2;

example2:

创建触发器: t_afterdelete_on_tab1

作用:删除tab1表记录后自动将tab2表中对应的记录删去


代码如下:

DROP TRIGGER IF EXISTS t_afterdelete_on_tab1;

CREATE TRIGGER t_afterdelete_on_tab1

AFTER DELETE ON tab1

FOR EACH ROW

BEGIN

delete from tab2 where tab2_id=old.tab1_id;

END;

测试一下


代码如下:

DELETE FROM tab1 WHERE tab1_id='0001';

看看结果

SELECT * FROM tab1;

SELECT * FROM tab2;

Mysql触发器的执行顺序

先抛出触发器相关的几个问题

3.1   如果before类型的触发器程序执行失败,sql会执行成功吗?

实验如下:

1)在FC_Word.planinfo中建立before触发器:


代码如下:

DELIMITER |
create trigger trigger_before_planinfo_update
before update
ON FC_Word.planinfo FOR EACH ROW
BEGIN
insert into FC_Output.abc (planid) values (New.planid);
END

2)查看:mysql> select showprob from planinfo where planid=1;

+----------+
| showprob |
+----------+
|        2 |
+----------+

3)执行sql:

update planinfo set showprob=200 where planid=1;      触发触发器程序;

4)由于不存在FC_Output.abc,before触发器执行失败,提示:

ERROR 1146 (42S02): Table 'FC_Output.abc' doesn't exist

5)再次查看:

mysql> select showprob from planinfo where planid=1;
+----------+
| showprob |
+----------+
|        2 |
+----------+

即修改sql未执行成功。即如果before触发器执行失败,sql也会执行失败。

(0)

相关推荐

  • MySQL入门教程(五)之表的创建、修改和删除

    MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成. 表是DB存储数据的基本单位,一个表包含若干个字段或记录.表的操作包括创建.修改和删除. 1.创建表 创建表即在已存在的数据库中创立新表.在使用USE语句选择具体数据库后,可以使用它SQL语句创建表 其中,属性名指表中字段的名称,数据类型即对应字段的数据类型,完整性约束条件指

  • Python中操作MySQL入门实例

    一.安装MySQL-python 复制代码 代码如下: # yum install -y MySQL-python 二.打开数据库连接 复制代码 代码如下: #!/usr/bin/python import MySQLdb conn = MySQLdb.connect(user='root',passwd='admin',host='127.0.0.1') conn.select_db('test') cur = conn.cursor() 三.操作数据库 复制代码 代码如下: def inse

  • Mysql入门基础 数据库创建篇

    1.创建数据表---基础(高手跳过) 正统方法:create [TEMPORARY] table 表名 [if not exists] (创建的列项定义) [表的选项] [分区的选项];#正统的创建方式,具体的参数,请参考mysql手册,在这里不做详细的解释,只说一些比较特别的. 例: 复制代码 代码如下: create table user(id int unsigned not null auto_increment, username char(15), sex enum('M','F')

  • Mysql基础入门 轻松学习Mysql命令

    一.MySQL的相关概念介绍 MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格: 表头(header): 每一列的名称; 列(row): 具有相同数据类型的数据的集合; 行(col): 每一行用来描述某个人/物的具体信息; 值(value): 行的具体信息, 每个值必须与该列的数据类型相同; 键(key

  • 21分钟 MySQL 入门教程

    21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据类型 五.使用MySQL数据库 登录到MySQL 创建一个数据库 选择所要操作的数据库 创建数据库表 六.操作MySQL数据库 向表中插入数据 查询表中的数据 更新表中的数据 删除表中的数据 七.创建后的修改 添加列 修改列 删除列 重命名表 删除整张表 删除整个数据库 八.附录 修改 root

  • MySQL正则表达式入门教程

    我们知道,在SQL之中,可以用 like 这个谓词(表达式) 来进行模糊检索,并支持 %,?,_等占位符.但是,这个模糊检索的功能有很多限制,简单来说就是太模糊了.在MySQL中提供了 REGEXP 关键字来支持正则表达式,当然,只是一些很简单的正则啦.首先,我们构造一些测试数据. 复制代码 代码如下: -- 建表USE test;DROP TABLE IF EXISTS t_regcustomer;CREATE TABLE t_regcustomer ( id INT(10) AUTO_INC

  • 20分钟MySQL基础入门

    开始使用 MySQL 为关系型数据库(Relational Database Management System),一个关系型数据库由一个或数个表格组成, 如图所示的一个表格: 表头(header): 每一列的名称; 列(row): 具有相同数据类型的数据的集合; 行(col): 每一行用来描述某个人/物的具体信息; 值(value): 行的具体信息, 每个值必须与该列的数据类型相同; 登录MySQL mysql -h 127.0.0.1 -u 用户名 -p mysql -D 所选择的数据库名

  • MySQL入门完全指南及Linux系统下基本的安装教程

    我们来了解一下MySQL的基本特性: 1.内部构件和可移植性 使用C和C++编写 用众多不同的编译器进行了测试 能够工作在众多不同的平台上.请参见2.1.1 "MySQL支持的操作系统". 使用GNU Automake.Autoconf和Libtool进行移植. 提供了用于C.C++.Eiffel.Java.Perl.PHP.Python.Ruby和Tcl的API. 采用核心线程的完全多线程 如果有多个CPU,它能方便地使用这些CPU. 提供了事务性和非事务性存储引擎. 使用了极快的&

  • 快速学习MySQL索引的入门超级教程

    所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找.而用的最多,并且是mysql默认的就是二叉树算法 BTREE,通过BTREE算法建立索引的字段,比如扫描20行就能得到未使用BTREE前扫描了2^20行的结果,具体的实现方式后续本博客会出一个算法专题里面会有具体的分析讨论; Explain优化查询检测 EXPLAIN可以帮助开发人员分析SQL问题,explain显示了mysql如何使用索引来处理select语

  • MySQL新手入门指南--快速参考

    一.SQL速成 以下是一些重要的SQL快速参考,有关SQL的语法和在标准SQL上增加的特性,请查询MySQL手册. 1.创建表 表是数据库的最基本元素之一,表与表之间可以相互独立,也可以相互关联.创建表的基本语法如下: create table table_name (column_name datatype {identity |null|not null}, -) 其中参数table_name和column_name必须满足用户数据库中的识别器(identifier)的要求,参数dataty

随机推荐