2014-01-21 78 views
0

我正在通过MYSQL使用innoDB数据库引擎。如果多个事务在几毫秒内发生,数据库如何执行事务?在执行下一个交易之前,它是否一次只允许一个交易并延迟?MYSQL如何优先查询?

+0

单用户线程在MySQL中是同步的。对于并发动作,有一个“TABLOCK”。 – BlitZ

+0

脱离主题,但几乎没有意见。 – EJP

+0

那么InnoDB支持行级锁,所以改变一个表的不同行可能几乎同时进行(或那些在几毫秒内) – spaceman

回答

1

单独的连接可以同时运行的事务。随着交易的进行,各种锁(“互斥”)被获取。在某些情况下(例如更新同一行的两个连接),锁将阻塞一个事务直到另一个事务完成。在某些情况下会发生“死锁”,并且一个事务将被ROLLBACK。在其他情况下,一个事务将超时等待锁。 (默认时间为这50秒,我很少看到它。)

锁被设计使它看起来无任何事务可以与任何其他干扰,然而让交易运行“同时”。

0

在InnoDB中,所有用户活动在事务内发生。

如果自动提交模式已启用,则每个SQL语句将自行形成单个事务。 默认情况下,MySQL的启动与启用自动提交每个新连接的会话,因此MySQL的一个每个SQL语句之后提交如果语句未返回一个错误。如果语句返回错误,则提交或回滚行为取决于错误。

启用自动提交的会话可以通过以明确的START TRANSACTION或BEGIN语句启动并以COMMIT或ROLLBACK语句结束来执行多语句事务。

如果自动提交模式与SET自动提交= 0会话中禁用,会话总有开放的交易。 COMMIT或ROLLBACK语句结束当前事务并开始一个新事务。开放。 COMMIT或ROLLBACK语句结束当前事务并开始一个新事务。

更多请阅读: - http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html