今天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的更多相关文章

  1. Oracle中的commit详解

    本文转自 : http://blog.csdn.net/hzhsan/article/details/9719307 它执行的时候,你不会有什么感觉.commit在数据库编程的时候很常用,当你执行DM ...

  2. 用JDBC访问ORACLE数据库 关于commit 增快效率 大数据 等的整理

    1.问:用JDBC访问ORACLE数据库,做DELETE操作,能用JAVA多线程实现吗? ORACLE服务器要怎么配?(以下答案来自网络,仅供参考) 答: Oracle有自己的锁机制.就算你开100条 ...

  3. Oracle临时表on commit preserver rows和on commit delete rows区别

    Oracle 临时表:在 Oracle 中创建一张表,这个表不用于其他的什么功能,主要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了. Oracle 的临时表创建之后基本不占用 ...

  4. 【Oracle】-【COMMIT对索引的影响】-从trace看COMMIT对索引的影响

    之前看过老杨http://yangtingkun.itpub.net/post/468/231000的一篇文章,讲述了INSERT操作对全文索引无操作,但DELETE时为了防止删除的数据仍能通过索引的 ...

  5. Oracle SQL*Loader commit point tips

    http://www.dba-oracle.com/t_sql_loader_commit_frequency.htm - Question:  Can I control the commit fr ...

  6. 转: Oracle Form 中commit 与do_key('commit_form')区别

    1.commit_form针对form上面的数据变动进行commit,对于代码中的类似update,insert语句也进行提交:如果form上面的数据变动和代码中的数据变动有冲突,最后以界面上的为准. ...

  7. oracle误操作commit之后,可以闪回数据

    1. 授予行迁移权限 alter table table_name enable row movement; 2. 到15分钟前: flashback table order   to timesta ...

  8. Oracle 的安全保障 commit &checkpoint

    Oracle 的安全 commit &checkpoint commit ---lgwr 事务相关的操作,保证事务的安全. commit标志着事务的结束.意味着别人对你事务操作的结果可见. c ...

  9. Oracle core05_事务和一致性

    事务和一致性 oracle的redo和undo机制保证了数据库的ACID特性,以及高性能和可恢复特性. redo的数据是记录着数据块变更的顺序的正向数据流, commit时,保证redo同步持久化,保 ...

随机推荐

  1. 深度this指针

    深入探讨this指针   为了写这篇文章.准备了好长时间,翻遍了箱底的书籍.可是如今还是不敢放开手来写,战战兢兢. 不是操心自己写错.而是唯恐自己错误误导别人.同一时候也希望这篇文章能给你一点收获.既 ...

  2. MyEclipse每次修改js有另一种部署

    今天在做时间格式显示这块内容的时候.我改动了这个js函数,同一时候凝视的掉了其它的一些替换的方法,可是在浏览器中执行发现效果一点也没有改变.于是debug js,发现浏览器中识别的还是之前未改动的js ...

  3. J Dp

    <span style="color:#000099;">/* ____________________________________________________ ...

  4. Eclipse建筑物SSH(struts-2.2.3 + spring-2.5.6 + hibernate-3.6.8)相框-随着源代码

    一直想自己搭建一个ssh框架,这次因为编写demo的须要,就亲手搭建了一下,并逐步測试!以下进入正题: 创建Struts项目 整合步骤: 1,在Eclipse中创建一个DynamicWeb Proje ...

  5. c++日历v1.12版

    ////////////////////////////新增信息修改功能,未完善. #include<iostream> #include <string> #include& ...

  6. .net与Java的WebService互调

    本文记录一下.net与Java是如何进行Web Service的互相调用的. 1.准备工作 MyEclipse 10 JDK 1.6.0_13 Visual Studio 2012 .net fram ...

  7. net开发过程中Bin目录net开发过程中Bin目录下面几种文件

    .net开发过程中Bin目录下面几种文件格式的解释 在.NET开发中,我们经常会在bin目录下面看到这些类型的文件: .pdb..xsd..vshost.exe..exe..exe.config..v ...

  8. VS2012 安装出错 :通道正在关闭

    从微软官网下的安装包iso,解压后安装时总是出现 3个错误,提示什么管道正在关闭,看了很多解决办法,挑了一个简单的:安装包有问题,重新下载一个,就好了(持续更新....)

  9. Centos根据系统VPS安装SendMail组件使WordPress支持E-mail

    1.在putty在链接: yum install sendmail 2.启动SendMail: service sendmail start 3.检查SendMail是否在监听默认的25port: n ...

  10. WPF学习(3)布局

    今天我们来说说WPF的布局.我们知道WinForm的布局主要是采用基于坐标的方式,当窗口内容发生变化时,里面的控件不会随之动态调整,这就造成了一个很不好的用户体验.而WPF为了避免这个缺点,采用了基于 ...