触发器(trigger):监视某种情况,并触发某种操作。

触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件

语法:

CREATE TRIGGER trigger_name trigger_time trigger_event
    ON tbl_name FOR EACH ROW trigger_stmt

触发程序与命名为tbl_name的表相关。tbl_name必须引用永久性表。不能将触发程序与临时表表或视图关联起来。

trigger_time是触发程序的动作时间。它可以是before或after,以指明触发程序是在激活它的语句之前或之后触发。

trigger_event指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:

   insert :将新行插入表时激活触发程序,例如,通过insert、load data和replace语句。

  update:更改某一行时激活触发程序,例如,通过update语句。

     delete :从表中删除某一行时激活触发程序,例如,通过delete和replace语句。

要注意,trigger_event与以表操作方式激活触发程序的SQL语句并不很类似,这点很重要。

例如:关于insert的before触发程序不仅能被insert语句激活,也能被load data语句激活。

create trigger triggerName

after/before insert/update/delete on 表名

for each row   #这句话在mysql是固定的

begin

sql语句;

end;


对于insert语句, 只有new是合法的;

对于delete语句,只有old才合法;

对于update语句,new、old可以同时使用。


创建表(触发器要操作的两张表)

/*auto_increment:自增;priamry key :主键;comment:注释*/

/* drop:删除;if exists xxx(判断xxx名在数据库时候是否出存在xxx名称)*/

/* for each row :循环一行一行的执行数据 */

/* after insert/update/delete on table_name :针对哪个表执行的insert/update/delete 操作 */

drop table if exists table1;

create table table1(
id ) primary key auto_increment not null comment 'id',
name ) comment '名字'
);

drop table if exists table2;
create table table2(
id int primary key auto_increment not null comment 'id',
name ) comment '名字'
);

Before与After区别:

before:(insert、update)可以对new进行修改,after不能对new进行修改,两者都不能修改old数据。

insert 触发器

drop trigger if exists insert_on_table1;
create trigger insert_on_table1
after insert  on table1
for each row
begin
insert into table2(name) value(new.name);
end

操作触发器

insert table1(name) value('aaa');

查询table2是否有值

select * from table2;

delete触发器

drop trigger if exists delete_on_table1;
create trigger delete_on_table1
after delete on table1
for each ROW
begin
delete from table2 where name=old.name;
end

执行删除操作

;

查询table2变化

select * from table2;

更新table1更新触发器

drop trigger if exists update_on_table1;
create trigger update_on_table1
after update on table1
for each ROW
begin
update table2 set name=new.name where name=old.name;
end

执行更新操作

update table1 set name='ccc';

查询table2变化

select * from table2;

使用before 统计插入积分例子:

创建表

drop table if exists table3;
create table table3(
id int primary key auto_increment comment 'id',
num int  comment '积分'
)engine=myisam  default charset=utf8 comment='单独积分表';

创建用函数变量接收的触发器

drop trigger if exists insert_on_table3;
create trigger insert_on_table3
before insert on table3
for each row
set @sum=@sum+new.num;

执行触发器

;
,),(,),(,),(,);
select @sum;

mysql 触发器(trigger)的更多相关文章

  1. mysql触发器trigger 实例详解

    mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html)   MySQL好像从5.0.2版本就开始支持触发器的功能 ...

  2. 如何使用MySQL触发器trigger

    阅读目录:触发器trigger的使用 创建触发器 单一执行语句.多执行语句 new.old详解 查看触发器 删除触发器:慎用触发器,不用就删除 Q:什么是触发器? A: 触发器是与表有关的数据库对象, ...

  3. mysql 触发器 trigger用法 two (稍微复杂的)

    触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...

  4. MySQL触发器Trigger实例篇

    定义: 何为MySQL触发器? 在MySQL Server里面也就是对某一个表的一定的操作,触发某种条件(Insert,Update,Delete 等),从而自动执行的一段程序.从这种意义上讲触发器是 ...

  5. MySQL触发器 trigger学习

    触发器:一类特殊的事物.可监视某种数据操作,并触发相关操作(insert/update/delete).表中的某些数据改变,希望同一时候能够引起其他相关数据改变的需求. 作用:变化自己主动完毕某些语句 ...

  6. MySQL 触发器trigger

    一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(af ...

  7. MySQL触发器 trigger之for each row

    for each row 每行受影响,触发器都运行.叫行级触发器. oracle 触发器中分行级触发器和语句级触发器,可不写for each row,不管影响多少行都仅仅运行一次. mysql不支持语 ...

  8. (转)MySQL触发器trigger示例详解

    一.什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[ ...

  9. mysql 触发器 trigger用法 three (稍微复杂的)

    MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 创建触发器 在MySQL中,创建触发器语法如下 ...

随机推荐

  1. smarty获取变量的两种方式

    从上一篇随笔中,我们知道smarty可以通过assign()的方法注册变量,从而在前段读取变量:我们也可以从配置文件中获取变量,来具体看一下: 1.在configs文件夹中建一个test.conf文件 ...

  2. 【Android Developers Training】 101. 显示快速联系人挂件(Quick Contact Badge)

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. (cljs/run-at (JSVM. :all) "一起实现柯里化")

    前言  习惯了Ramda.js就会潜意识地认为函数均已柯里化,然后就可以随心所欲的用函数生成函数,或者使用compose组合多个函数来生成一个新函数.如下 const f = a => b =& ...

  4. 【WPF】在新线程上打开窗口

    当WPF应用程序运行时,默认会创建一个UI主线程(因为至少需要一个),并在该UI线程上启动消息循环.直到消息循环结束,应用程序就随即退出.那么,问题就来了,能不能创建新线程,然后在新线程上打开一个新窗 ...

  5. python实现简单的循环购物车小功能

    python实现简单的循环购物车小功能 # -*- coding: utf-8 -*- __author__ = 'hujianli' shopping = [ ("iphone6s&quo ...

  6. web前段学习2016.6.6

    目前上网的方式:手机平板电脑移动端:智能手机.平板PC:电脑.笔记本运行在移动端的东西:APPios:object-candroid:javapc端的东西:桌面应用程序 c++ 我们上网的方式都是通过 ...

  7. 关于MySQL用户会话及连接线程

    0.概念理解:用户会话和连接线程是什么关系? 用户会话和用户连接线程是一一对应的关系,一个会话就一个用户连接线程. 问题描述: 如果系统因为执行了一个非常大的dml或者ddl操作导致系统hang住,我 ...

  8. 流行框架angular

    ---恢复内容开始--- 一.angular是什么 一款非常优秀的前端高级js框架,由谷歌团队负责开发 angular是通过新的属性和表达扩展了html angular可以构建一个单一页面应用程序(s ...

  9. React--JSX语法

    JSX语法,它是js语言的语法拓展. 比如2+2 , 对象.属性 , 函数的调用都可以在jsx中书写. import React from "react"; export defa ...

  10. PHP连接数据库、创建数据库、创建表的三种方式

    这篇博客主要介绍了三种方式来连接MySQL数据库以及创建数据库.创建表.(代码是我在原来的基础上改的) MySQLi - 面向对象 MySQLi - 面向过程 PDO MySQLi 面向对象 < ...