MySQL 之 触发器和事务控制

转载 2015年07月08日 22:23:46

1.触发器

触发器是与表有关的数据库对象,在满足条件时触发,并执行触发器中定义的语句集合(协助应用在数据库端确保数据的完整性)

1.1创建触发器

触发器只能创建在永久表(permanent table)上,不能对临时表(Temporary Table)创建触发器

create trigger trigger_name trigger_time trigger_event
    ON tbl_name for each row trigger_statement
//trigger_time是触发器的触发时间,可以是beforeafter
before:检查约束前触发
after:检查约束后触发
trigger_event:触发事件:可以是insert, update, delete

对同一个表相同触发时间的相同触发事件,只能定义一个触发器。
例如,对某个表的不同字段的after更新触发器,在MySQL中,只能定义成一个触发器,在触发器中通过判断更新的字段进行相对应的处理。
使用别名old和new来引用触发器中发生变化的记录内容。现在触发器只支持行级触发,不支持语句级触发。

//在样例数据库中,为film表创建了after insert 的触发器
delimiter $$
create trigger ins_film
after insert on film for each row begin
insert into film_text (film_id,title,description)
	values (new.film_id,new.title,new.description);
	end;
	$$
    delimiter ;
# 触发器
delimiter $
create TRIGGER ins_f1
AFTER #trigger time
INSERT # trigger event
ON
QY_adaboost
FOR EACH ROW BEGIN
UPDATE
QY_adaboost A
SET
A.train_f1 = 2*A.train_precision * A.train_recall / (A.train_precession + A.train_recall),
A.test_f1 = 2*A.test_precession * A.test_recall / (A.test_precession + A.test_recall);
end$

2.事务控制和锁定语句

MySQL支持对MyISAM和MEMORY存储引擎的表进行表级锁定;
BDB存储引擎的表进行页级锁定;
InoDB存储引擎的表进行行级锁定。
默认情况:表锁和行锁都是自动获得的,不需要额外的命令。
但是,有时,用户需要明确的进行锁表或者进行事务的控制,以便确保整个事务的完整性,这样就需要使用事务控制好锁定语句来完成。

2.1 lock table 和unlock table

lock tables可以锁定用于当前线程的表,如果表被其他线程锁定,则当前线程会等待,直到可以获取所有锁定为止。
unlock tables可以释放当前线程获得的任何锁定。当前线程执行另一个lock tables时,或当与服务器的连接被关闭时,所有由当前线程锁定的表被隐含的解锁,语法如下:

lock tables
    tbl_name[as alias]{read [local]\[low_priority]write}
    [,tbl_name[as alias]{read [local]\[low_priority]write}]...
unlock tables

2.2 事务控制

MySQL通过set autocommit,start transaction,commit和rollback等语句支持本地事务。

start transaction\begin[work]
commit[work][and [no] chain][[no] release]
rollback [work][and [no] chain][[no] release]
set autocommit={0\1}
//start transaction或begin语句可以开始一项新的事务
//commit和rollback用来提交或者回滚事务
//chain和release子句分别用来定义在事务提交或回滚之后的操作,chain会立即启动一个新事物,并且和刚才的事务具有相同的隔离级别,release则会断开和客户端的连接。
//set autocommit可以修改当前连接的提交方式,如果设置了set autocommit=0,则设置之后的所有事务都需要通过明确的命令进行提交或者回滚。

mysql中的触发器和事务的操作

mysql中的触发器和事务的操作

MySQL事务及触发器

事务create table swpu( id int primary key auto_increment, money decimal(10,2) comment '学费' ); insert i...

mysql 中触发器的使用

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

如何Mysql触发器中抛出一个异常

当想Mysql出发其中插入或者更新一条数据的时候,我希望使用触发器进行一些检查工作。虽然这些工作可以使用PHP来完成,但考虑到公司做PHP的小伙子是个新手,为了简化PHP端的业务,使用触发器来实现可靠...

【转】mysql触发器的实战经验(触发器执行失败,sql会回滚吗)

1   引言 Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序。触发器是mysql5新增的功能,目前线上凤巢系统、北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本...

MYSQL 触发器的高级使用

当user表的user_name 发生修改后,同时更新两个表user_about,user_detail的user_bean字段和real_name字段BEGIN IF ( NEW.user_name...

MySQL触发器Trigger实例篇

MySQL触发器Trigger实例篇 发表于668 天前 ⁄ IT技术 ⁄ 暂无评论 以前关注的数据存储过程不太懂其中奥妙,最近遇到跨数据库,同时对多个表进行CURD(Create...
  • hireboy
  • hireboy
  • 2014年01月10日 11:45
  • 27343

MySQL5.6 触发器的使用(条件分支、变量的使用)

use fs; /*product_info表中,仪器和试剂一定是不同的产品,id上不可能重复,可以放心删*/ create trigger check_record_delete_tri...

mysql 开启事务

START TRANSACTION, COMMIT, and ROLLBACK Syntax 开始事务,提交和回滚语法 那些语句提供了控制事务的使用: 1.START TRANSACTION 或...

Mysql 会导致锁表的语法

最近再找一些Mysql锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新 笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL 之 触发器和事务控制
举报原因:
原因补充:

(最多只允许输入30个字)