MySQL 数据库是否默认执行事务?
Do MySQL databases implement Transactions by Default?
我想知道当多个用户同时尝试 UPDATE 一个 MySQL 数据库时会发生什么。上网了解 Transactions.
我是否需要为我的每个数据库 UPDATE 查询定义事务语句。(START TRANSACTION,... COMMIT/ROLLBACK
)?有没有自动化的方法来实现这个?
默认情况下,MySQL 启用了自动提交,可以使用
将其关闭
set session autocommit=off;
对于基于交易的查询,如银行业务,手动使用 TRANSACTION 被执行,这会忽略自动提交设置。例如:
START TRANSACTION;
update bank_card set balance=balance-100;
update credit_card set balance=balance+100;
ROLLBACK; -- execute rollback to cancel the transaction if necessary
COMMIT;
如果任何 UPDATE 语句出现问题,执行 ROLLBACK;
事务将中止并且不执行 UPDATE。
当多个用户尝试更新相同的 table 时,MySQL 将在相关行上放置一个 LOCK 以防止同时写入。在第二个更新查询可以获取锁并执行更新之前,第一个更新查询将通过提交(成功)或回滚(通常出现问题)来释放锁。
我想知道当多个用户同时尝试 UPDATE 一个 MySQL 数据库时会发生什么。上网了解 Transactions.
我是否需要为我的每个数据库 UPDATE 查询定义事务语句。(START TRANSACTION,... COMMIT/ROLLBACK
)?有没有自动化的方法来实现这个?
默认情况下,MySQL 启用了自动提交,可以使用
将其关闭
set session autocommit=off;
对于基于交易的查询,如银行业务,手动使用 TRANSACTION 被执行,这会忽略自动提交设置。例如:
START TRANSACTION;
update bank_card set balance=balance-100;
update credit_card set balance=balance+100;
ROLLBACK; -- execute rollback to cancel the transaction if necessary
COMMIT;
如果任何 UPDATE 语句出现问题,执行 ROLLBACK;
事务将中止并且不执行 UPDATE。
当多个用户尝试更新相同的 table 时,MySQL 将在相关行上放置一个 LOCK 以防止同时写入。在第二个更新查询可以获取锁并执行更新之前,第一个更新查询将通过提交(成功)或回滚(通常出现问题)来释放锁。