1、oracle:具有灾难性恢复的特点,因为有特有的事务控制机制。
数据库命令:
DDL:数据定义语言(create ,alter,drop,truncate)
DML:数据操纵语言(insert,update,delete,select)
TCL:事物控制语言(commit,rollback,savepoint)
DCL:数据控制语言(grant to,revoke from)
|---事务(DML中的增删改自动启动事务机制)
事物用于保证数据的一致性,他由一组相关的dml语句组成,该组的dml语句要么全部成功 ,要么全部失败。
|---事物和锁
当执行事务操作dml语句时oracle会自动在作用的表上加锁,防止其他用户在修改表的结构。
|---提交事物
当执行使用commit语句提交事务,当执行了commit语句之后,会确认事务的变化,结束事物,删除保存点,释放锁,当使用commit语句结束事务之后,其他会话将可以查看到事务变化的新数据
|---回退事物
保存点:保存点是事务的一点,用于取消部分事务,当结束事务时,会自动删除该事务所定义的所有保存点。
保存点的理解:
(1)基本语法:
savepoint 保存点名称
(2)在一个事物中可以保存个保存点
(3)可以使用rollback to 保存点
(4) 一旦回退了,就不能在再次回退
(5)设置保存点,是有资源开销
(6)一旦提交了事物,,则不能回退到任何保存点
---(1)事物特性
|--- 原子性:一个事务的所有操作要么都做,要么都不做,不可分割
|---一致性:事务开启之前和事物开启之后一定保持平衡状态
|---隔离性:在一个会话里面读取不到另一个会话未提交的数据
|---永久性:事务已经提交永不回退
---让事务生效(解锁)
(1)执行commit;
(2)关闭执行窗口
(3)执行DDL语句
---让事务回滚与某一点
savePoint;
---让事务回滚
rollback;
rollback cici;
2、事务隔离级别
概念:隔离级别定义了事务与事务之间的隔离程度
ANS/ISO SQL92标准定义了一些数据库操作的隔离级别
?
隔离级别 脏读 不可重复读 幻读
读未提交(read uncommit) Y Y Y
读已提交(read commit) N Y Y
可重复读(repeatable) N N Y
可串行化(Serializable) N N N
脏读:当一个事务读取另一个事务未提交的修改时,产生脏读,在oracle,没有脏读。
不可重复读:在同一个事务中的同一个查询,如果因为别的事物修改或者删除,造成本事务查询的结果不一致,这种现象称为不可重复读。
幻读:在同一个事务中的同一个查询,如果因为对事务的添加,造成本事务的查询结果不一致,这种现象称为幻读
3、oracle的事务隔离设置
(1)设置一个事务的隔离级别
SET TRANCACTIONSOLATIONLEVEL READ COMMITTED
SET TRANSACTIONSOLATIONLEVEL SERIALIZABLE
SET TRANSACTIONREAD ONLY;
(2)在oracle中事务隔离级别
|--- read comminted
---这是oracle中默认的事务隔离级别,保证不会出现脏读,但可能出现不可重复读和幻读
|---serializable
可以保证不出现脏读,不可重复读和幻读,但可以进行dml操o作
|---read only
可以保证不出现脏读,不可重复读和幻读,不可以进行dml操作
4、在java程序中设置事务隔离级别
connnection.setTransactionIsolation();
---锁机制
按照所得类型:
---加锁类型:表级锁(表进入缓存区),行级所(指定行数进入缓存区)
---按照加锁的时机:显示锁(手动),隐式锁(自动)
---按照分类的力度:共享锁,排它锁(独占锁)
共享锁:如果一个会话对该资源加了共享锁,另一个会话也可以对加共享锁
排他锁:如果一个会话对该资源加了排他锁,另一个会话禁止对该资源加任何锁
insert ,update ,delete自动添加隐式的排他锁
---手动加锁(加表级锁)
语法:
lock table 表名 in share/exclusive mode;
---死锁:为了保护正在修改的数据
造成原因:竞争资源
数据库命令:
DDL:数据定义语言(create ,alter,drop,truncate)
DML:数据操纵语言(insert,update,delete,select)
TCL:事物控制语言(commit,rollback,savepoint)
DCL:数据控制语言(grant to,revoke from)
|---事务(DML中的增删改自动启动事务机制)
事物用于保证数据的一致性,他由一组相关的dml语句组成,该组的dml语句要么全部成功 ,要么全部失败。
|---事物和锁
当执行事务操作dml语句时oracle会自动在作用的表上加锁,防止其他用户在修改表的结构。
|---提交事物
当执行使用commit语句提交事务,当执行了commit语句之后,会确认事务的变化,结束事物,删除保存点,释放锁,当使用commit语句结束事务之后,其他会话将可以查看到事务变化的新数据
|---回退事物
保存点:保存点是事务的一点,用于取消部分事务,当结束事务时,会自动删除该事务所定义的所有保存点。
保存点的理解:
(1)基本语法:
savepoint 保存点名称
(2)在一个事物中可以保存个保存点
(3)可以使用rollback to 保存点
(4) 一旦回退了,就不能在再次回退
(5)设置保存点,是有资源开销
(6)一旦提交了事物,,则不能回退到任何保存点
---(1)事物特性
|--- 原子性:一个事务的所有操作要么都做,要么都不做,不可分割
|---一致性:事务开启之前和事物开启之后一定保持平衡状态
|---隔离性:在一个会话里面读取不到另一个会话未提交的数据
|---永久性:事务已经提交永不回退
---让事务生效(解锁)
(1)执行commit;
(2)关闭执行窗口
(3)执行DDL语句
---让事务回滚与某一点
savePoint;
---让事务回滚
rollback;
rollback cici;
2、事务隔离级别
概念:隔离级别定义了事务与事务之间的隔离程度
ANS/ISO SQL92标准定义了一些数据库操作的隔离级别
?
隔离级别 脏读 不可重复读 幻读
读未提交(read uncommit) Y Y Y
读已提交(read commit) N Y Y
可重复读(repeatable) N N Y
可串行化(Serializable) N N N
脏读:当一个事务读取另一个事务未提交的修改时,产生脏读,在oracle,没有脏读。
不可重复读:在同一个事务中的同一个查询,如果因为别的事物修改或者删除,造成本事务查询的结果不一致,这种现象称为不可重复读。
幻读:在同一个事务中的同一个查询,如果因为对事务的添加,造成本事务的查询结果不一致,这种现象称为幻读
3、oracle的事务隔离设置
(1)设置一个事务的隔离级别
SET TRANCACTIONSOLATIONLEVEL READ COMMITTED
SET TRANSACTIONSOLATIONLEVEL SERIALIZABLE
SET TRANSACTIONREAD ONLY;
(2)在oracle中事务隔离级别
|--- read comminted
---这是oracle中默认的事务隔离级别,保证不会出现脏读,但可能出现不可重复读和幻读
|---serializable
可以保证不出现脏读,不可重复读和幻读,但可以进行dml操o作
|---read only
可以保证不出现脏读,不可重复读和幻读,不可以进行dml操作
4、在java程序中设置事务隔离级别
connnection.setTransactionIsolation();
---锁机制
按照所得类型:
---加锁类型:表级锁(表进入缓存区),行级所(指定行数进入缓存区)
---按照加锁的时机:显示锁(手动),隐式锁(自动)
---按照分类的力度:共享锁,排它锁(独占锁)
共享锁:如果一个会话对该资源加了共享锁,另一个会话也可以对加共享锁
排他锁:如果一个会话对该资源加了排他锁,另一个会话禁止对该资源加任何锁
insert ,update ,delete自动添加隐式的排他锁
---手动加锁(加表级锁)
语法:
lock table 表名 in share/exclusive mode;
---死锁:为了保护正在修改的数据
造成原因:竞争资源