我通过MYSQL使用innoDB数据库引擎。如果多个事务在相互之间的毫秒内发生,那么数据库如何执行事务?它是否一次只允许一个事务并在执行下一个事务之前延迟?
答案 0 :(得分:1)
单独的连接可以同时运行事务。随着事务的进展,获取各种锁(“互斥锁”)。在某些情况下(例如两个连接更新同一行),锁将阻止一个事务,直到另一个事务完成。在某些情况下,将发生“死锁”,并且一个事务将被ROLLBACK。在其他情况下,一个事务将超时等待锁定。 (默认时间为50秒;我很少看到它。)
这些锁的设计目的是让任何事务都不会干扰任何其他事务,但让事务“同时”运行。
答案 1 :(得分:0)
在InnoDB中,所有用户活动都发生在事务中。
如果启用了自动提交模式,则每个SQL语句都会自行形成一个事务。 默认情况下,MySQL为启用了自动提交的每个新连接启动会话,因此如果该语句没有返回错误,MySQL会在每个SQL语句后执行提交。如果语句返回错误,则提交或回滚行为取决于错误。
启用了自动提交的会话可以通过使用显式START TRANSACTION或BEGIN语句启动它并使用COMMIT或ROLLBACK语句结束它来执行多语句事务。
如果在SET autocommit = 0的会话中禁用了自动提交模式,则会话始终打开一个事务。 COMMIT或ROLLBACK语句结束当前事务并启动新事务。在开放。 COMMIT或ROLLBACK语句结束当前事务并启动新事务。
更多请阅读: - http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html