数据库学习-事务

来源:互联网 发布:java 连接池实现原理 编辑:程序博客网 时间:2024/06/06 00:11

前言:工作也有两三年了,数据库一块一直是弱项,虽说搞了两年的银行项目开发,但大多是去做后端框架的开发,而不是写SQL。故现在又要重温一下数据库的知识,在此只作为记录。

事务是什么,引用百度百科的话就是:

事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

事务的四大特性:

1、原子性:多表执行DML语句时,要么都做,要么都不做

2、一致性:完成事务时,所有数据要保持状态的一致性

3、隔离性:防止事务并行执行

4、持久性:事务执行成功后,应保证数据是永久有效的


事务分类:

1、显式事务:手动执行DCL语句

2、隐式事务:设置aurocommit


事务结束标志:

1、commit

2、rollback


隔离级别:

隔离级别名称备注NO_TRANSCATION不支持事务其实这个应该不算隔离级别READ_UNCOMMITED支持Dirty Read,不支持unrepeatable Read和phantom Read支持脏读,不支持不可重复读及幻读READ_COMMITED支持unrepeatable Read和phantom Read,不支持Dirty Read支持不可重复读及幻读,不支持脏读REPEATABLE支持phantom Read,不支持Dirty Read和unrepeatable Read支持幻读,不支持脏读和不可重复读SERIALIZABLE不支持Dirty Read、unrepeatable Read和phantom Read不支持脏读、不可重复读和幻读READ ONLY只读,不允许进行Modify操作Oracle特有READ WRITE可执行任意DML语句Oracle特有

设置事务的隔离级别:

Set Transcation
如:

set transcation isolation level serializableset transcation read only
注:只允许设置一种隔离级别


锁机制(这里只针对oracle进行说明):

锁是一种针对多事务同时操作同一数据库对象时控制并发的机制

锁类别:

1、DDL锁:oracle自动加、解锁

2、DML锁:事务开始时加锁,用户执行commit/rollback语句时解锁

3、内部锁:oracle对内部表进行的加锁


锁级别:

1、行锁:不允许对加锁行进行DML操作

2、表锁:不允许对加锁表进行DML操作

3、数据库锁

原创粉丝点击