mysql 触发器(trigger)
来源:互联网 发布:润和软件股票 编辑:程序博客网 时间:2024/06/16 17:19
触发器创建语法四要素: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 int(4) primary key auto_increment not null comment 'id',name varchar(225) comment '名字');drop table if exists table2;create table table2(id int primary key auto_increment not null comment 'id',name varchar(225) comment '名字');
Before与After区别:
before:(insert、update)可以对new进行修改,after不能对new进行修改,两者都不能修改old数据。
insert 触发器
drop trigger if exists insert_on_table1;create trigger insert_on_table1after insert on table1for each rowbegininsert 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_table1after delete on table1for each ROWbegindelete from table2 where name=old.name;end
执行删除操作
delete from table1 where id=1;
查询table2变化
select * from table2;
更新table1更新触发器
drop trigger if exists update_on_table1;create trigger update_on_table1after update on table1for each ROWbeginupdate 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_table3before insert on table3for each row set @sum=@sum+new.num;
执行触发器
set @sum=0;insert into table3 values(1,2),(2,3),(3,3),(4,3);select @sum;
- 【转】mysql-trigger-触发器
- TRIGGER:Mysql触发器
- mysql之触发器trigger
- MYSQL触发器(Trigger)
- mysql 之触发器 trigger
- mysql之触发器trigger
- MySQL触发器 trigger学习
- mysql之触发器trigger
- MySQL触发器trigger
- mysql之触发器trigger
- MySQL数据库触发器(trigger)
- mysql 触发器 trigger
- mysql之触发器trigger
- mysql 触发器trigger
- mysql之触发器trigger
- mysql之触发器trigger
- mysql之触发器trigger
- mysql之触发器trigger
- 实现三级菜单联动综合代码
- mysql 时区转换
- Java对网页用户登录注册操作的RSA加密方法
- JAVA 数据类型
- Unity3D 发布App Store
- mysql 触发器(trigger)
- 半年全球网络安全入侵事件近千起,超19亿数据受影响
- redis.windows.conf 参数说明
- windows 上安装redis和windows上redis与php扩展
- Android零基础入门第67节:RecyclerView数据动态更新
- VMware Workstation Pro 安装centos6.5
- 笔试的一些小总结
- 万能的makefile
- Mysql事务处理详细讲解及完整实例下载