隐式事务 自动提交事务

如果你一次执行单条查询语句,则没有必要启用事务支持,数据库默认支持SQL执行期间的读一致性;
如果你一次执行多条查询语句,例如统计查询,报表查询,在这种场景下,多条查询SQL必须保证整体的读一致性,否则,在前条SQL查询之后,后条SQL查询之前,数据被其他用户改变,则该次整体的统计查询将会出现读数据不一致的状态,此时,应该启用事务支持。

2,隐式事务
–隐式事务需要用T_语句才能打开,打开隐式事务的语句是 
SET IMPLICIT_TRANSACTIONS ON
–一旦隐式事务打开,数据库实例第一次执行alert table,insert,create,open,delete,revoke,drop,select,fetch,truncate table,grant,update语句时,会自动开启一个事务,开启的事务需要利用commit或rollback结束;当事务结束时,一旦运行以上类型的语句,会再次自动开启一个新的事务,
–这样就形成了一个事务链

3,自动提交事务
–自动提交事务是sqlserver默认模式,该类型不需要开发人员手工做任何操作,每个单独的T_SQL语句都在其完成后自动提交,如果出现错误则回滚,
–所以开发人员无法对其严格控制不适合大规模导入,不适合业务关联数据录用,如果完成一项业务需要3句语句,当第二条出错时,第一条无法撤销,所以无法保证事务一致型。

### 事务提交的原理和机制 MySQL 中的事务提交(Implicit Commit)是指在某些 SQL 语句执行后,系统会自动提交当前事务,而无需显调用 `COMMIT` 语句。这种机制主要用于确保某些操作的持久性和一致性,尤其是在执行 DDL(数据定义语言)语句或涉及系统表的操作时。 在 MySQL 中,事务提交通常发生在以下几种情况: 1. **执行 DDL 语句**:如 `CREATE TABLE`、`ALTER TABLE`、`DROP TABLE` 等。这些操作通常会修改数据库的元数据,因此在执行这些语句时,MySQL 会自动提交当前事务,以确保这些更改对所有后续操作可见[^1]。 2. **执行某些管理语句**:如 `ANALYZE TABLE`、`OPTIMIZE TABLE`、`REPAIR TABLE` 等。这些语句通常会对表进行优化或修复操作,因此也会触发提交[^1]。 3. **使用某些存储引擎特定的语句**:例如,`FLUSH TABLES` 或 `SET` 语句中的某些选项也可能导致事务提交。 MySQL 的事务提交机制与事务的 ACID 特性密切相关,尤其是 **持久性(Durability)** 和 **一致性(Consistency)**。在事务提交时,MySQL 会确保事务的更改被持久化到磁盘,即使在系统崩溃的情况下也能通过 Redo Log 进行恢复。这种机制保证了事务的持久性[^4]。 此外,事务提交还与 **MVCC(多版本并发控制)** 机制相关。在事务提交时,其修改的数据版本会被标记为已提交,其他事务将能够看到这些修改。MVCC 通过 Read View 来控制事务对数据版本的可见性,确保每个事务只能看到在其启动时间点之前已经提交的数据版本。 ### 示例 以下是一个简单的示例,展示了事务提交的行为: ```sql START TRANSACTION; INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'); CREATE TABLE new_table (id INT); -- CREATE TABLE 会触发提交 ``` 在上述示例中,尽管没有显调用 `COMMIT`,但由于 `CREATE TABLE` 是一个 DDL 语句,它会触发事务提交,导致前面的 `INSERT` 操作也被提交。 ### 相关问题 1. 事务提交与显提交的主要区别是什么? 2. 为什么 DDL 语句会触发事务提交? 3. 如何在事务中避免提交的发生? 4. 提交如何影响事务的隔离性和一致性? 5. 在哪些情况下,事务提交不会发生?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值