今天在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相关推荐

  1. java criteria限制条数_java架构—Oracle SQL性能优化

    (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先 ...

  2. 惊呆,一条sql竟然让oracle奔溃了

    一条sql就能让oracle挂了,真的是不敢相信啊,前几天生产上确实出现了这样一个故障,我们来一起做一个事件回放. 系统介绍 系统架构见下图: application1和application2是一个 ...

  3. oracle挂证多少钱一个月_惊呆,一条sql竟然把Oracle搞挂了

    一条sql就能把oracle搞挂了,真的是不敢相信啊,前几天生产上确实出现了这样一个故障,我们来一起做一个事件回放. 系统介绍 系统架构见下图: file application1和applicati ...

  4. oracle 多条执行语句同时执行

    oracle 多条执行语句同时执行:begin 语名一;语句二; end; 注意 如果写在C#里千万不要用@的方法然后语句里有回车 例: string strSql = "begin upd ...

  5. oracle提交数据按键,Oracle PLSQL - 仅提交数据库链接(Oracle PLSQL - Commit only database link)...

    Oracle PLSQL - 仅提交数据库链接(Oracle PLSQL - Commit only database link) 有没有办法只通过数据库链接而不是当前会话的数据提交在表上插入/更新的 ...

  6. oracle rds 运维服务_从Oracle一条新闻说起,为什么我们需要更好更开放的RDS服务?...

    原标题:从Oracle一条新闻说起,为什么我们需要更好更开放的RDS服务? 从Oracle被起诉说起-- 本月中旬,Oracle董事会因"涉嫌在云业务增长方面误导投资者"而被起诉. ...

  7. oracle一条语句递归查询父子关系

    1  建表: CREATE TABLE test_tree ( test_id INT NOT NULL, pid INT, test_val VARCHAR(10), PRIMARY KEY (te ...

  8. oracle数据库第八章答案,Oracle培训(三十)——Oracle 11g 第八章知识点小结——处理数据...

    Oracle培训(三十)--Oracle 11g 第八章知识点总结--处理数据 Oracle 11g 第八章知识点总结--处理数据 知识点预览 复习 处理数据 复习 --建表t_user create ...

  9. oracle元数据存储在表空间,oracle db中数据和元数据的概念

    本帖最后由 warehouse 于 2014-8-10 11:58 编辑 02年研究dw相关的产品和业务时第一次听说了元数据的概念,很多资料上是这样描述元数据的概念的:元数据是定义或者描述数据的数据. ...

  10. oracle两个表数据比较,oracle数据库两表数据比较

    1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...

最新文章

  1. COCO 2019挑战赛,旷视研究院拿下三项计算机识别冠军 | ICCV 2019
  2. 混合多云架构_使用混合多云每个人都应避免的3个陷阱(第4部分)
  3. hadoop-eclipse-plugin使用
  4. 用一句话解释什么是装饰器
  5. 在搜索框自动输入文本_selenium自动化测试之常见的定位元素
  6. Linux网卡配置出错无法联网-联网报错解决方法
  7. Duet Display用一根数据线将iPad变身扩展显示器
  8. 【数据结构06】二叉平衡树(AVL树)
  9. 树莓派 linux安装中文语言包6,Linux下给树莓派安装及配置系统-Go语言中文社区
  10. ambiguous column name 错误
  11. 程序在单片机里是如何运行的?
  12. 怎样把mysql的多张表汇总成一张表_sql如何将多个表合并成一个表
  13. python静态函数
  14. linux系统u盘格式化命令,如何用LINUX命令格式化U盘
  15. Unity3D制作触屏手机滑动动效果
  16. th:if th:else
  17. 计算机网络 四、五层协议体系结构-----数据链路层
  18. Covid-19 肺部 X 射线分类和 CT 检测演示
  19. mysql中的包含与被包含
  20. Gartner:2021年区块链三大顶级趋势

热门文章

  1. pythonpdf使用教程_Python基础学习教程:Python玩转PDF各种骚操作大全
  2. PHP调用powershell权限,浏览器挂起执行运行Powershell的PHP
  3. JAVA构造方法与构造方法的执行原理简单理解(栈与堆)
  4. java普通工程打war包_普通java工程(Java Project)打jar包
  5. 计算机教师招聘试题(汇总集合版),计算机教师招聘试题(汇总集合版).doc
  6. elment-ui的table组件多行合并
  7. Puppet 笔记 package file services
  8. 高斯—若尔当(约当)消元法解异或方程组+bitset优化模板
  9. java io知识点汇总FIle类
  10. MySql中PreparedStatement对象与Statement对象