--======================
--SQL基础-->数据库事务
--======================
一、数据库事务
数据库事务是指作为单个逻辑工作单元执行的一系列操作,可以认为事务就是一组不可分割的SQL语句
二、数据库事务的ACID属性
原子性(atomic)
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性(consistent)
事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务
的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如B 树索引或双向链
表)都必须是正确的。
隔离性(insulation)
由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状
态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中
间状态的数据。
持久性(Duration)
事务完成之后,它对于系统的影响是永久性的。
三、事务的组成
一个数据库事务可由:
一个或多个DML语句组成
一个DDL语句组成
一个DCL语句组成
一个数据事务由:
以第一个DML语句的执行作为开始
以下面的其中之一作为结束
commit (提交)
rollback (回滚)
ddl或dcl语句 (自动提交)
用户会话正常结束(自动提交)
系统异常终止 (自动回滚)
系统崩溃 (自动回滚)
四、事务的提交或回滚(COMMIT、ROLLBACK)
--使用COMMIT事务,robinson记录被插入到表
SQL> INSERT INTO scott.emp(empno,ename,job,salary)
2 VALUES(9999,'Robinson','DBA',3500);
1 row created.
SQL> COMMIT;
Commit complete.
SQL> UPDATE scott.emp SET salary = 4000 WHERE ename = 'Robinson';
1 row updated.
--使用ROLLBACK回滚,更新将失效,最终结果如下面的查询
SQL> ROLLBACK;
Rollback complete.
SQL> SELECT * FROM scott.emp WHERE ename = 'Robinson';
EMPNO ENAME JOB MGR HIREDATE SALARY DEPTNO
---------- ------------------------------ --------- ---------- --------- ---------- ----------
9999 Robinson DBA 3500
五、保存点
设置保存点:
SAVEPOINT NAME
恢复至保存点:
ROLLBACK TO NAME
--查看empno为,的记录
SQL> SELECT * FROM scott.emp WHERE empno IN (1235,1236);
EMPNO ENAME JOB MGR HIREDATE SALARY DEPTNO
---------- ------------------------------ --------- ---------- --------- ---------- ----------
1235 Tony boy 28-JUN-10 7100
1236 Ben IT 28-JUN-10 3100 20
--首先更新empno 为的salary ,并设置了一个保存点tran1
SQL> UPDATE scott.emp SET salary = salary * 1.5 WHERE empno = 1236;
1 row updated.
SQL> SAVEPOINT tran1;
Savepoint created.
--更新empno 为的salary
SQL> UPDATE scott.emp SET salary = salary * 0.8 WHERE empno = 1235;
1 row updated.
--查看刚刚更新的两条记录
SQL> SELECT * FROM scott.emp WHERE empno IN (1235,1236);
EMPNO ENAME JOB MGR HIREDATE SALARY DEPTNO
---------- ------------------------------ --------- ---------- --------- ---------- ----------
1235 Tony boy 28-JUN-10 5680
1236 Ben IT 28-JUN-10 4650 20
--将事务回滚到保存点tran1
SQL> ROLLBACK TO SAVEPOINT tran1;
Rollback complete.
--可以看到保存点之后的修改被回滚,而保存点之前的修改则不受影响
SQL> SELECT * FROM scott.emp WHERE empno IN (1235,1236);
EMPNO ENAME JOB MGR HIREDATE SALARY DEPTNO
---------- ------------------------------ --------- ---------- --------- ---------- ----------
1235 Tony boy 28-JUN-10 7100
1236 Ben IT 28-JUN-10 4650 20
--对所作的修改全部ROLLBACK,此时仅仅包含了empno 为的记录,因为已经被回滚
SQL> ROLLBACK;
Rollback complete.
SQL> SELECT * FROM scott.emp WHERE empno IN (1235,1236);
EMPNO ENAME JOB MGR HIREDATE SALARY DEPTNO
---------- ------------------------------ --------- ---------- --------- ---------- ----------
1235 Tony boy 28-JUN-10 7100
1236 Ben IT 28-JUN-10 3100 20
六、事务的开始与结束及不同时刻的状态
事务的开始
连接到数据并执行了一条DML语句(INSERT ,UPDATE,DELETE)
前一条事务结束后,又执行了另外一条DML语句
事务的结束
执行COMMIT 或ROLLBACK
执行DDL语句,则自动提交并结束事务
执行DCL语句,则自动提交并结束事务
断开与数据库的连接,如退出SQL Plus。
Windows下SQL Plus正常退出将执行COMMIT,如点击关闭窗口直接关闭则回滚
X-Window下SQL Plus正常退出将执行COMMIT,如点击关闭窗口直接关闭则回滚(笔者在RHEL5下测试如此)
DML语句执行失败则自动回滚
提交或回滚前的数据状态
改变前的数据状态是可以恢复的
执行DML 操作的用户可以通过SELECT 语句查询之前的修正
其他用户不能看到当前用户所做的改变,直到当前用户结束事务。
DML语句所涉及到的行被锁定,其他用户不能操作
提交后的数据状态
数据的改变已经被保存到数据库中。
改变前的数据已经丢失。
所有用户可以看到结果。
锁被释放,其他用户可以操作涉及到的数据。
所有保存点被释放。
七、并发事务
多个用户同时与数据库交互,且每个用户都可以同时访问自己的事物,这种事务称为并发事务
对于同一个对象上运行的多个事务,仅当执行commit时才对彼此的查询产生影响
下表中演示了并发事务的处理:
|
Trans1
|
Trans2
|
T1
|
SQL> SELECT COUNT(1) FROM emp;
COUNT(1)
----------
16
|
SQL> SELECT COUNT(1) FROM scott.emp;
COUNT(1)
----------
16
|
T2
|
SQL> INSERT INTO emp(empno,ename,salary)
2 SELECT 6666,'Jenney',3000 FROM DUAL;
|
|
T3
|
SQL> UPDATE emp
2 SET salary = salary + 200 WHERE ename = 'SCOTT';
|
|
T4
|
SQL> SELECT COUNT(1) FROM emp;
COUNT(1)
----------
17
|
SQL> SELECT COUNT(1) FROM scott.emp;
COUNT(1)
----------
16
|
T5
|
SQL> COMMIT;
|
|
T6
|
|
SQL> SELECT COUNT(1) FROM scott.emp;
COUNT(1)
----------
17
|
示例中显示了两个不同的事务交叉执行的顺序,可以看出,仅当事务执行COMMIT后,相关事务才产生影响
八、利用AUTOCOMMIT进行事务控制
SET AUTOCOMMIT ON
设置自动提交,每执行一条语句,就提交。将autocommit设成ON时,在进行DML操作时似乎很方便,
但在实际应用中有时可能会出现问题,如,在有些应用中要同时对几个表进行操作,对于这些表建立
了外键联系,如果一旦操作失败另一个表,就很麻烦了。
关于锁及事物的隔离级别请关注后续文章
九、更多
Oracle 参数文件
SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)
Oracle 用户、对象权限、系统权限
Oracle 角色、配置文件
SQL 基础--> 集合运算(UNION 与UNION ALL)
分享到:
相关推荐
在IT领域,SQL(Structured Query Language)和大型数据库是不可或缺的基础知识。SQL是一种用于管理和处理关系型数据库的标准编程语言,而大型数据库则是存储海量数据并支持高并发访问的系统。本课程将深入探讨SQL...
快速清除SQLServer日志的两...快速清除SQLServer日志的两种方法可以有效地清除日志文件,避免日志文件满而造成SQL数据库无法写入文件的情况。但是,需要注意第一种方法的风险性和数据库属性的设置,以免造成数据损失。
12. **事务管理**:确保数据的一致性和完整性,通过BEGIN TRANSACTION、COMMIT和ROLLBACK来控制事务。 13. **索引**:提升查询性能的关键工具,包括唯一索引、非唯一索引、聚集索引和非聚集索引等类型。 14. **...
### SQL数据库事务机制详解 #### 事务的基本概念 在数据库管理中,事务是一个非常重要的概念。事务是指作为单个逻辑工作单元执行的一系列操作。它主要用于确保数据在更新过程中的完整性,特别是在同步发生的多步...
1. 事务日志(Transaction Log):记录了数据库中的所有事务操作,包括插入、更新、删除等操作。 2. 错误日志(Error Log):记录了数据库中的错误信息,包括错误的原因、时间、日期等信息。 3. 安全日志(Security ...
SET TRANSACTION --定义当前事务数据访问特征 --程序化SQL DECLARE --为查询设定游标 EXPLAN --为查询描述数据访问计划 OPEN --检索查询结果打开一个游标 FETCH --检索一行查询结果 CLOSE --关闭游标 ...
语 句 功 能 数据操作 SELECT --从数据库表中检索数据...SET TRANSACTION --定义当前事务数据访问特征 --程序化 SQL DECLARE --为查询设定游标 EXPLAN --为查询描述数据访问计划 OPEN --检索查询结果打开一个游标
10.事务处理:SQL支持事务,确保数据的一致性和完整性,如`BEGIN TRANSACTION`、`COMMIT`、`ROLLBACK`等。 11.安全性:SQL提供了权限管理功能,如GRANT和REVOKE语句,用于控制用户对数据库的访问权限。 速查手册...
这个表是TCC事务框架在数据库层面维护事务状态的基础。 7. **集成TCC事务**: 在业务代码中,你需要定义TCC的尝试、确认和取消操作。Spring Boot提供了方便的注解,如`@Try`, `@Confirm`, `@Cancel`,将这些方法...
学习如何在SQL语句中使用BEGIN TRANSACTION、COMMIT和ROLLBACK,理解不同隔离级别对并发性能和数据一致性的影响,对于数据库管理员来说至关重要。 安全性是另一个关键话题。SQL Server 2005提供了角色、权限和策略...
其中,`myPU`是持久化单元的名称,`transaction-type="JTA"`表示使用Java Transaction API进行事务管理。 3. **配置JNDI数据源**:在`JBOSS_HOME/server/default/deploy/jboss-service.xml`或应用特定的配置文件...
SQL事务控制是数据库管理系统中确保数据的一致性和可靠性的机制。事务是数据库管理系统中的一组操作,能够作为单个工作单元来执行,可以保证数据库的一致性和可靠性。 事务的边界 ---------------- 事务的边界是指...
《C#语言与SQL Server数据库基础-第8章上机练习》 在深入探讨C#语言与SQL Server数据库的基础知识时,我们首先需要理解这两者的核心概念。C#是一种面向对象的编程语言,由微软公司开发,广泛应用于Windows平台上的...
综上所述,"S1-3-C#语言和数据库技术基础"课程涵盖了C#编程语言的基础知识和数据库管理系统的使用,包括C#语法、面向对象特性以及SQL查询和数据库连接等数据库操作。通过学习,你可以掌握开发基于.NET框架的应用程序...
### SQL数据库事务处理详解 #### 一、事务基础概念 在多用户并行访问的数据库环境中,为了确保数据的一致性和完整性,SQL Server 使用了一种称为“事务”的机制。事务可以被视为一系列操作的集合,这些操作作为一...
9. 事务处理:T-SQL支持事务(TRANSACTION),确保数据的一致性和完整性,常用于多步骤的操作。 10. 锁机制:理解锁(LOCK)的概念,如共享锁(读锁)和排他锁(写锁),以防止并发问题。 11. 索引:创建和管理...
-事务处理:理解事务的概念,使用Transaction类处理数据库操作的原子性。 3. **Web开发**: - ASP.NET基础:学习ASP.NET页面生命周期,理解Request、Response、Session等对象。 - Web控件:使用Label、Button、...
数据库事务是数据库操作的核心概念,尤其在C#编程中,理解并熟练运用数据库事务对于确保数据的完整性和一致性至关重要。数据库事务确保了在多步骤操作中,如果其中一个步骤失败,整个事务可以被回滚,从而避免了数据...