今天在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的错误。这些现象都会对实际应用产生极大的危害,如长时间未响应,大量事务失败等。

转载于:https://www.cnblogs.com/writeLessDoMore/p/6851606.html

oracle什么时候需要commit相关推荐

  1. oracle dml commit,Oracle dml开始到commit期间的流程

    Oracle dml开始到commit期间的流程 1.确认需要的数据块,先去db buffer cache里找,没有的去磁盘上找,找到的数据复制到buffer cache里 2.申请undo,把待修改 ...

  2. oracle插入数据需要commit提交

    oracle的commit就是提交数据,在未提交前你前面的操作时,更新的都是内存,没有更新到物理文件中.所以未commit就关掉数据库,数据库中的数据并没有更新. commit的提交针对的是:DML ...

  3. Oracle什么时候需要Commit?

    在sqlplus下进行insert操作,在developer里面怎么看不到更新?? dos下commit;,在developer刷新,看到了新添加的一行. 用户退出时自动提交 什么时候需要commit ...

  4. oracle的commit耗时长_ORACLE COMMIT操作的详解

    通常对undo有一个误解,认为undo用于物理地恢复到执行语句或事务之前的样子,但实际上并非如此.数据库只是逻辑地恢复到原来的样子,所有修改都被逻辑地取消,但是数据结构以及数据库块本身在回滚后可能大不 ...

  5. Oracle ORA-03137: TTC protocol internal error : [12333] 故障分析

    程序通过JDBC 连接数据库异常,报 ORA-03137[12333]的错误. 当前程序的JDBC 驱动版本:ojdbc16-11.2.0.1.0.jar 数据库版本: 11.2.0.3 一. Log ...

  6. oracle可以使用提交完成的事务,【体系结构】Oracle数据提交与事务隔离实验 oradebug挂起lgwr进程...

    Oracle数据提交与事务隔离实验 oradebug挂起lgwr进程 原文作者:dbsnake 崔华 实验参考原文链接: Oracle 里未 commit 的数据除了当前 session 之外,其他 ...

  7. oracle 体系结构认识,Oracle数据库体系结构简单认识一

    1.为什么使用数据库软件 为什么我们不直接使用硬盘管理数据而要使用数据库,最主要的原因还是效率问题,直接采取硬盘管理数据的效率远远低于数据库软件,因为数据库软件是把数据加载至内存中进行修改,而硬盘则是 ...

  8. Oracle语句总结

    1. 简单的SELECT 语句  as SELECT 字段名1 [AS] '字段名1 解释' FROM table; 2. 处理NULL NVL函数可把NULL转换成其它类型的符号 编程技巧: NVL ...

  9. Oracle常用sql操作总结

    一.选择行 1. 简单的SELECT 语句  SELECT 字段名1 [AS] '字段名1 解释' FROM table; 2. 处理NULL  NVL函数可把NULL转换成其它类型的符号  编程技巧 ...

最新文章

  1. OFD文件结构--Signatures.xml
  2. 逻辑回归(LR)个人学习总结篇
  3. 涂威威:第四范式经验与思考分享
  4. socat命令如何监听Linux串口设备通讯报文
  5. 台大李宏毅2017机器学习国语课程(更新)
  6. eclipse中创建最简单的maven结构的项目
  7. android输入法手势程序源码
  8. vs strncpy运行出错_日志VS网络数据,谁能做好全链路监控?
  9. ubuntu下研华工控机CAN卡驱动的安装与测试
  10. python怎么填充背景颜色,python通过pil为png图片填充上背景颜色的方法
  11. 手机word文档docx密码忘了怎么办,忘记word文档docx密码怎么办?
  12. Flask开发轻博客(一):欢迎来到-Flask-的世界
  13. OpenCV从上到下的顺序查找轮廓
  14. MySQL数据库(5)
  15. 软考系统集成项目管理工程师视频教程(下)-乔俊峰-专题视频课程
  16. 【ArcGIS】01 水文流域提取
  17. 这10个安全测试工具,优秀且免费
  18. 易语言 用精易的网页_访问 请求https的时候返回不了数据
  19. php编写分页接口步骤
  20. Java并发编程的艺术-阅读笔记和思维导图

热门文章

  1. python爬虫中for循环无法每一段输出_1024程序员节送你一套爬虫玩玩
  2. char* 大小_SQL Server中char, nchar, varchar和nvarchar数据类型有何区别
  3. php ahp和jhp,php7.4编译(centos)
  4. python文件命名文件夹怎么删除_python文件批量重命名、删除文件夹
  5. 集合中元素的数据类型可以不同,但集合中不能嵌套列表、元组、集合、字典
  6. css屏幕大小的容器,位置2箭头固定到CSS页面容器的外部 - 屏幕大小
  7. canvas在舞台上点击后图片旋转_View绘制系列(10)Canvas基础变换
  8. rssi室内定位算法原理_三分钟看懂蓝牙室内定位 值得分享
  9. 12 python语言语句块的标记是_7. 简单语句
  10. android 6.0 log,android 6.0 logcat机制(二)logcat从logd中获取log保存到文件中