我是靠谱客的博主 机灵鸵鸟,最近开发中收集的这篇文章主要介绍MySQL 之 触发器和事务控制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

最后

以上就是机灵鸵鸟为你收集整理的MySQL 之 触发器和事务控制的全部内容,希望文章能够帮你解决MySQL 之 触发器和事务控制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部