前言:工作也有两三年了,数据库一块一直是弱项,虽说搞了两年的银行项目开发,但大多是去做后端框架的开发,而不是写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 serializable
set transcation read only
注:只允许设置一种隔离级别
锁机制(这里只针对oracle进行说明):
锁是一种针对多事务同时操作同一数据库对象时控制并发的机制
锁类别:
1、DDL锁:oracle自动加、解锁
2、DML锁:事务开始时加锁,用户执行commit/rollback语句时解锁
3、内部锁:oracle对内部表进行的加锁
锁级别:
1、行锁:不允许对加锁行进行DML操作
2、表锁:不允许对加锁表进行DML操作
3、数据库锁