数据库事务起始于SQL语句,终止于以下4种事件之一:1、COMMIT或ROLLBACK语句
2、DDL/DCL隐式提交 3、用户退出时自动提交 4、系统强行关闭时取消事务
事务结束后,下一条SQL语句将开始一个新的事务。
语句功能:
COMMIT 结束当前事务,并将所有数据变更提交数据库生效
SAVEPOINT name 在当前事务内部创建一个保存点
ROLLBACK [TO SAVEPOINT name] ROLLBACK指令结束当前事务,并取消所有数据变 更。
ROLLBACK TO SAVEPOINT name放弃该保存点,并取消所有在保存点之后的数据变更
隐式事务提交:
一个事务在下列情况下会被自动提交:DDL语句 DCL语句;用户正常退出数据库,而缺少显式的COMMIT或者ROLLBACK.
一个事务在下列情况下会被自动回退;用户异常退出数据库;系统强行关闭.
数据在COMMIT/ROLLBACK前的状态:
事务中所有数据变更都会被临时存放在数据库的缓冲池中,直到事务被提交或者回退。因而事务中早先的状态是可以被恢复的。
用户可以通过SELECT语句查询自己发起事务的数据变更,即使事务未被提交。但不能看到他人发起事务中未被提交的数据。
用户发起事务中的变更数据将被数据库系统锁定。除该用户外,其他用户不能对锁定的数据进行变更操作,直到锁定的数据被提交或回退。
数据在COMMIT后的状态:
数据变更在数据库中正式生效
数据不可被还原
所有用户可以看到变更数据
数据锁将被释放,一度被锁定的数据重新可以被所有用户修改
所有的保存点(savepoint)都被清除
数据在ROLLBACK后的状态:
所有数据变更都取消,数据状态恢复到事务开始前
数据锁将被释放,一度被锁定的数据重新可以被所有用户修改
回退到一个保存点:
使用SAVEPOINT语句创建一个保存点。如果保存点名称已经存在,则新的保存点将覆盖旧的保存点。
使用ROLLBACK TO SAVEPOINT语句回退到已有保存点状态
总结一下:
1.没有提交(commit)的数据删除后无法rollback
2.提交(commit)了的数据删除后可以使用rollback恢复
3.删除数据后提交(commit)则无法使用rollback恢复
分享到:
相关推荐
`BEGIN TRAN`、`COMMIT TRAN` 和 `ROLLBACK TRAN` 是SQL Server中用于管理事务的主要命令。下面将详细解释这些命令的用法和作用。 1. `BEGIN TRAN`: `BEGIN TRAN` 语句用于启动一个新的事务。当开始一个事务时,...
SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准编程语言。它被广泛用于访问和修改数据库中的数据...8. **事务控制(Transaction Control)**:使用`BEGIN`、`COMMIT`和`ROLL
4. Branch Commit/Rollback:资源管理器根据事务管理器的指令提交或回滚分支事务。 Seata 的优点有: * 高效:Seata 使用异步处理机制,能够快速处理大量的事务请求。 * 可靠:Seata 使用两阶段提交机制,确保事务...
**提交/回滚阶段**(Commit/Rollback Phase):根据所有参与者的反馈,协调者决定提交或回滚事务。 **不足之处**: - **同步阻塞**:所有参与者在等待最终命令时处于阻塞状态。 - **单点故障**:协调者故障可能...
基于Java+txlcn+seata的分布式事务实现案例源码.zip ## txlcn 测试步骤 ### 准备工作 - 启动 MySQL Redis - 创建数据库 tx-manager txlcn-a txlcn-b txlcn-c - 在库 tx-manager 中执行 t_tx_exception.sql 创建...
SQL-Sever数据库根据运行模式将事务分为4种类型:自动提交事务、显示事务、隐式事务和批处理级...3. 隐式事务:是指在前一个事务完成时新事务隐式启动,但每个事务仍以COMMIT或ROLLBACK语句显式完成;4. 批处理级事务
例如,Oracle数据库中,事务从COMMIT、ROLLBACK、连接到数据库或执行第一条SQL语句开始,到COMMIT、ROLLBACK或断开连接结束。DDL语句会隐式地开始或结束事务。如果需要取消事务,可以使用ROLLBACK命令,甚至可以通过...
- 提交或回滚事务(COMMIT/ROLLBACK):结束当前事务并应用或撤销更改。 接下来,我们来看SQL游标。游标允许在结果集上进行迭代处理,使得我们可以逐行读取、修改或移动数据。在编程中,这非常有用,尤其是在需要...
1. 错误处理:事务处理中应包含错误捕获机制,如果在事务过程中发生错误,应使用ROLLBACK命令回滚事务,以保持数据库一致性。 2. 数据库连接管理:确保在完成所有操作后关闭数据库连接,以释放系统资源。 3. 优化SQL...
- **提交或回滚全局事务(Commit/rollback Global Transaction)**:TM根据业务结果决定全局事务的最终状态,向TC发送提交或回滚指令。TC协调所有RM执行相应操作,并更新全局事务状态。 4. **Seata-server** ...
2.⼀说到事务,⼈们可能⼜会想起create、begin、commit、rollback、close、suspend。 可实际上,只有commit、rollback是实际存在的,剩下的create、begin、close、suspend都是虚幻的,是业务层或数据库底层 应⽤语意...
* 控制事务的开始和结束:事务的开始可以通过执行DML语句来开始,事务的结束可以通过执行COMMIT或ROLLBACK语句来结束。 * 控制事务的隔离性:通过锁机制和并发控制机制来确保事务之间的隔离性。 * 控制事务的原子性...
* 事务开始于第一个 DML 语句的执行,结束于 COMMIT 或 ROLLBACK 语句、DDL 或 DCL 语句(自动提交)、用户会话正常结束或系统异常终了。 Commit 和 ROLLBACK 语句: * COMMIT 语句:事务提交命令。在 Oracle 中,...
con.rollback(); // 若前面某条语句出现异常时,进行回滚,取消前面执行的所有操作 } catch (SQLException e1) { e1.printStackTrace(); } } finally { sm.close(); } } 通常都是上述的写法, 在mysql...
如果有任何错误,使用`ROLLBACK TRANSACTION`回滚事务,以保持数据的一致性。 ```sql if (@error <> 0) begin rollback transaction return -1 -- 操作结果错误标识 end else begin commit transaction ...
#### 示例1:使用BEGIN/COMMIT/ROLLBACK ```php $conn = mysql_connect('localhost', 'root', 'root') or die("连接失败!!!"); mysql_select_db('test', $conn); mysql_query("set names 'GBK'"); // 设置编码为GBK...
事务可以通过显式定义(如使用BEGIN TRANSACTION和COMMIT/ROLLBACK语句)或隐式定义(由DBMS自动划分)来创建。COMMIT用于提交事务的所有更改,使其永久生效,而ROLLBACK则用于在事务遇到错误时撤销所有操作,以保持...