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在以下几种情况会创建临时表: 1、UNION查询; 2、用到TEMPTABLE算法或者是UNION查询中的视图; 3、ORDER BY和GROUP BY的子句不一样时; 4...

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

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

MySQL事务及触发器

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

MySQL 触发器、事务、正则查询

触发器触发器是由MySQL基本命令事件触发某种特定操作。 创建触发器CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigge...

(mysql)触发器、事件、事务、函数

1.事务操作原理:事务开启之后Start transaction,所有的操作都会临时保存到事务日志。只有在得到commit才会关闭,否则清空; 2.设置回滚点: savepoint 回滚点名字;  ...

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

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

[数据库] Navicat for MySQL触发器更新和插入操作

一、触发器概念        触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,...

MySQL优化之表索引、视图、内置函数、预处理、事务处理、存储、触发器

一、复制表 create table bbs2 like bbs; insert into bbs2 select * from bbs; 二、查看表结构 desc bbs; 三、表索引 1、...

mysql事务、触发器、视图、存储过程、函数

事务: 通俗的说事务: 指一组操作,要么都成功执行,要么都不执行.---->原子性 在所有的操作没有执行完毕之前,其他会话不能够看到中间改变的过程-->隔离性 事务发生前,和发生后,数据的总额依...

MySQL快速入门12----删除数据 & 备份还原 & 视图 & 事务 & 触发器

一 删除数据 Delete DELETE FROM tbl_name [WHERE where_definition] [ORDER BY ...] [LIMIT row...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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