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 以防止同时写入。在第二个更新查询可以获取锁并执行更新之前,第一个更新查询将通过提交(成功)或回滚(通常出现问题)来释放锁。