oracle当需要commit
今天oracle的SQL plus 运行该删除和查询操作,然后PL/SQL还运行查询。相同的句子,结果是不一样的。我郁闷很大,然后,突然想到这可能对双方造成由数据不一致,为什么不一致呢。就是没用commit,
在网上查了一下,大概是这样说的:
DML语言,比方update,delete,insert等改动表中数据的须要commit;
DDL语言,比方create,drop等改变表结构的。就不须要写commit(由于内部隐藏了commit);
DDL 数据定义语言:
create table 创建表
alter table 改动表
drop table 删除表
truncate table 删除表中全部行
create index 创建索引
drop index 删除索引
当运行DDL语句时,在每一条语句前后,oracle都将提交当前的事务。
假设用户使用insert命令将记录插入到数据库后,运行了一条DDL语句(如create
table)。此时来自insert命令的数据将被提交到数据库。当DDL语句运行完毕时,DDL语句会被自己主动提交,不能回滚。
DML 数据操作语言:
insert 将记录插入到数据库
update 改动数据库的记录
delete 删除数据库的记录
当运行DML命令假设没有提交,将不会被其它会话看到。
除非在DML命令之后运行了DDL命令或DCL命令,或用户退出会话。或终止实例,此时系统会自己主动
发出commit命令,使未提交的DML命令提交。
DDL :
Data Definition Language (DDL) statements are used to define the database structure or schema. Some examples:
CREATE - to create objects in the database
ALTER - alters the structure of the database
DROP - delete objects from the database
TRUNCATE - remove all records from a table, including all spaces allocated for the records are removed
COMMENT - add comments to the data dictionary
RENAME - rename an object
DML:
Data Manipulation Language (DML) statements are used for managing data within schema objects. Some examples:
SELECT - retrieve data from the a database
INSERT - insert data into a table
UPDATE - updates existing data within a table
DELETE - deletes all records from a table, the space for the records remain
MERGE - UPSERT operation (insert or update)
CALL - call a PL/SQL or Java subprogram
EXPLAIN PLAN - explain access path to data
LOCK TABLE - control concurrency
DCL
Data Control Language (DCL) statements. Some examples:
GRANT - gives user's access privileges to database
REVOKE - withdraw access privileges given with the GRANT command
TCL
Transaction Control (TCL) statements are used to manage the changes made by DML statements. It allows statements to be grouped together into logical transactions.
COMMIT - save work done
SAVEPOINT - identify a point in a transaction to which you can later roll back
ROLLBACK - restore database to original since the last COMMIT
SET TRANSACTION - Change transaction options like isolation level and what rollback segment to use
锁概念基础
数据库是一个多用户使用的共享资源。
当多个用户并发地存取数据时,在数据库中就会产生多个事务同一时候存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不对的数据,破坏数据库的一致性。
加锁是实现数据库并发控制的一个很重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求。对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其它的事务不能对此数据对象进行更新操作。
在数据库中有两种主要的锁类型:排它锁(Exclusive Locks。即X锁)和共享锁(Share Locks,即S锁)。
当数据对象被加上排它锁时。其它的事务不能对它读取和改动。
加了共享锁的数据对象能够被其它事务读取,但不能改动。数据库利用这两种主要的锁类型来对数据库的事务进行并发控制。
Oracle数据库的锁类型
依据保护的对象不同,Oracle数据库锁能够分为下面几大类:DML锁(data locks,数据锁),用于保护数据的完整性。DDL锁(dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义。内部锁和闩(internal locks and latches)。保护数据库的内部结构。
DML锁的目的在于保证并发情况下的数据完整性,。
在Oracle数据库中,DML锁主要包含TM锁和TX锁,当中TM锁称为表级锁,TX锁称为事务锁或行级锁。
当Oracle 运行DML语句时,系统自己主动在所要操作的表上申请TM类型的锁。当TM锁获得后。系统再自己主动申请TX类型的锁。并将实际锁定的数据行的锁标志位进行置位。
这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志。而仅仅需检查TM锁模式的相容性就可以,大大提高了系统的效率。TM锁包含了SS、SX、S、X 等多种模式。在数据库中用0-6来表示。
不同的SQL操作产生不同类型的TM锁。
在数据行上仅仅有X锁(排他锁)。在 Oracle数据库中。当一个事务首次发起一个DML语句时就获得一个TX锁。该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上运行 DML语句时,第一届会议在此记录锁定,处于观望状态的其他会话。
当第一届会议提交,TX锁定被解除,其他场次足够的天赋锁定。
什么时候Oracle数据库发生TX锁等待,假设没有及时治疗常导致Oracle数据库挂起,或导致死锁的发生。生产ORA-60错误。这些现象将在面临严重风险的实际应用。由于长时间没有回应。大量的交易失败,等等。。
oracle当需要commit的更多相关文章
- Oracle中的commit详解
本文转自 : http://blog.csdn.net/hzhsan/article/details/9719307 它执行的时候,你不会有什么感觉.commit在数据库编程的时候很常用,当你执行DM ...
- 用JDBC访问ORACLE数据库 关于commit 增快效率 大数据 等的整理
1.问:用JDBC访问ORACLE数据库,做DELETE操作,能用JAVA多线程实现吗? ORACLE服务器要怎么配?(以下答案来自网络,仅供参考) 答: Oracle有自己的锁机制.就算你开100条 ...
- Oracle临时表on commit preserver rows和on commit delete rows区别
Oracle 临时表:在 Oracle 中创建一张表,这个表不用于其他的什么功能,主要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了. Oracle 的临时表创建之后基本不占用 ...
- 【Oracle】-【COMMIT对索引的影响】-从trace看COMMIT对索引的影响
之前看过老杨http://yangtingkun.itpub.net/post/468/231000的一篇文章,讲述了INSERT操作对全文索引无操作,但DELETE时为了防止删除的数据仍能通过索引的 ...
- Oracle SQL*Loader commit point tips
http://www.dba-oracle.com/t_sql_loader_commit_frequency.htm - Question: Can I control the commit fr ...
- 转: Oracle Form 中commit 与do_key('commit_form')区别
1.commit_form针对form上面的数据变动进行commit,对于代码中的类似update,insert语句也进行提交:如果form上面的数据变动和代码中的数据变动有冲突,最后以界面上的为准. ...
- oracle误操作commit之后,可以闪回数据
1. 授予行迁移权限 alter table table_name enable row movement; 2. 到15分钟前: flashback table order to timesta ...
- Oracle 的安全保障 commit &checkpoint
Oracle 的安全 commit &checkpoint commit ---lgwr 事务相关的操作,保证事务的安全. commit标志着事务的结束.意味着别人对你事务操作的结果可见. c ...
- Oracle core05_事务和一致性
事务和一致性 oracle的redo和undo机制保证了数据库的ACID特性,以及高性能和可恢复特性. redo的数据是记录着数据块变更的顺序的正向数据流, commit时,保证redo同步持久化,保 ...
随机推荐
- Word文件交换的电脑打开字体、排版变化的原因和解决方法!
方案: 有时候.我们好不easy用Word写好文档,做好排版发给别人,别人会告诉你格式怎么是乱的啊,标题.正文.页眉页脚什么的格式都变了. 想尽各种办法都没能得到解决,那么出现这样的情况的原因究竟是什 ...
- 重写onBackPressed方法
android手机back按键响应方法重构: long exitTime = System.currentTimeMillis() - 2000; public void onBackPressed( ...
- linux文件打开模式
文件打开 int open(const char *pathname, int flags, mode_t mode); 普通方式(Canonical mode) flags中没有设置O_SYN ...
- 【Linux探索之旅】第二部分第四课:文件操纵,鼓掌之中
内容简介 1.第二部分第四课:文件操纵,鼓掌之中 2.第二部分第五课预告:用户和权限 文件操纵,鼓掌之中 既然上一课我们学习了Linux中的文件组织方式,那么现在就该是玩弄,啊不,是操纵它们的时候了. ...
- Web静态和动态项目委托代理基于面向方面编程AOP
本来每天更新,我一般喜欢晚上十二点的时候发文章,结果是不是愚人节?校内网也将是非常有趣,破,把我给打. ..好吧-从今天开始的话题AOP.AOP太重要了,所以把第二篇文章谈论这个话题,AOP它是Spr ...
- DapperLambda发布
DapperLambda发布 引言:因为接触过多个ORM,但使用的时候都遇到了各自的一些不够理想的地方,从最早开始开始公司自己分装的,到后面用EF,以及Dapper和DapperExtensions ...
- Agile/CMMI/Scrum
Agile/CMMI/Scrum 一.背景介绍 在朋友(aehyok)的建议下,初步去了解Visual Studio Online,简称VS Online(即原来的 Team Foundation S ...
- Hibernate HQL详细说明
1. Hibernate HQL详细说明 1.1. hql一个简短的引论 Hibernate它配备了一种非常强大的查询语言.这种语言看起来非常像SQL.但是不要 要对相位的语法结构似,HQL是很有 ...
- 最大公约数(Greatest Common Divisor)
两个数的最大公约数.一个典型的解决方案是欧几里德,叫欧几里德算法. 原理:(m,n)代表m和nGCD,和m>n.然后,(m,n)=(n,m%n)=.....直到余数为0. 码如下面: publi ...
- 猫学习IOS(四)UI半小时就搞定Tom猫
阿土 首先对影响 下载项目的源材料: Tom猫游戏代码iOS 素材http://blog.csdn.net/u013357243/article/details/44457357 效果图 以前风靡一时 ...