·手工创建oracle数据库
·双机热备Oracle数据库服务器操作实战
·oracle数据库开发的一些经验积累(二)
·Oracle数据库系统紧急故障处理方法
·教你如何截获Oracle数据库连接密码
·ORACLE数据库备份实用方案
·Oracle数据库字符集问题总结
·Oracle数据库备份与恢复的三种方法
·Oracle数据库密码破解易如反掌?
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL。其中用于定义数据的结构,比如 创建、修改或者删除数据库;DCL用于定义数据库用户的权限;在这篇文章中我将详细讲述这两种语言在Oracle中的使用方法。
DML语言
DML是SQL的一个子集,主要用于修改数据,下表列出了ORACLE支持的DML语句。
| 语句 | 用途 |
| INSERT | 向表中添加行 |
| UPDATE | 更新存储在表中的数据 |
| DELETE | 删除行 |
| SELECT FOR UPDATE | 禁止其他用户访问DML语句正在处理的行。 |
| LOCK TABLE | 禁止其他用户在表中使用DML语句 |
插入数据
INSERT语句常常用于向表中插入行,行中可以有特殊数据字段,或者可以用子查询从已存在的数据中建立新行。
列目录是可选的,缺省的列的目录是所有的列名,包括comlumn_id,comlumn_id可以在数据字典视图ALL_TAB_COLUMNS,USER_TAB_COLUMNS,或者DBA_TAB_COLUMNS中找到。
插入行的数据的数量和数据类型必须和列的数量和数据类型相匹配。不符合列定义的数据类型将对插入值实行隐式数据转换。NULL字符串将一个NULL值插入适当的列中。关键字NULL常常用于表示将某列定义为NULL值。
下面的两个例子是等价的。
| 以下为引用的内容: INSERT INTO customers(cust_id,state,post_code) VALUE('Ariel',NULL,'94501'); |
| 以下为引用的内容: INSERT INTO customers(cust_id,state,post_code) VALUE('Ariel',,'94501'); |
UPDATE命令用于修改表中的数据。
以下为引用的内容:UPDATE order_rollup |
删除数据
DELETE语句用来从表中删除一行或多行数据,该命令包含两个语句:
1、关键字DELETE FROM后跟准备从中删除数据的表名。
2、WHERE后跟删除条件
| 以下为引用的内容: DELETE FROM po_lines WHERE ship_to_state IN ('TX','NY','IL') AND order_date |
如果你想删除表中所有数据,清空表,可以考虑使用DDL语言的TRUNCATE语句。TRUNCATE就像没有WHERE子句的DELETE命令一样。TRUNCATE将删除表中所有行。TRUNCATE不是DML语句是DDL语句,他和DELETE右不同的特点。
| 以下为引用的内容: TRUNCATE TABLE (schema)table DROP(REUSE) STORAGE |
STORAGE子串是可选的,缺省是DROP STORAGE。当使用DROP STORAGE时将缩短表和表索引,将表收缩到最小范围,并重新设置NEXT参数。REUSE STORAGE不会缩短表或者调整NEXT参数。
TRUNCATE和DELETE有以下几点区别
1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。
2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。
4、TRUNCATE不能触发任何DELETE触发器。
5、不能授予任何人清空他人的表的权限。
6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
7、不能清空父表。
SELECT FOR UPDATE
select for update语句用于锁定行,阻止其他用户在该行上修改数据。当该行被锁定后其他用户可以用SELECT语句查询该行的数据,但不能修改或锁定该行。
锁定表
LOCK语句常常用于锁定整个表。当表被锁定后,大多数DML语言不能在该表上使用。LOCK语法如下:
| 以下为引用的内容: LOCK schema table IN lock_mode |
share 共享方式
exclusive 唯一方式
例:
| 以下为引用的内容: LOCK TABLE intentory IN EXCLUSIVE MODE |
死锁
当两个事务都被锁定,并且互相都在等待另一个被解锁,这种情况称为死锁。
当出现死锁时,ORACLE将检测死锁条件,并返回一个异常。
事务控制
事务控制包括协调对相同数据的多个同步的访问。当一个用户改变了另一个用户正在使用的数据时,oracle使用事务控制谁可以操作数据。
事务
事务表示工作的一个基本单元,是一系列作为一个单元被成功或不成功操作的SQL语句。在SQL和PL/SQL中有很多语句让程序员控制事务。程序员可以:
1、显式开始一个事物,选择语句级一致性或事务级一致性
2、设置撤销回滚点,并回滚到回滚点
3、完成事务永远改变数据或者放弃修改。
事务控制语句
| 语句 | 用途 |
| Commit | 完成事务,数据修改成功并对其他用户开放 |
| Rollback | 撤销事务,撤销所有操作 |
| rollback to savepoint | 撤销在设置的回滚点以后的操作 |
| set transaction | 响应事务或语句的一致性;特别对于事务使用回滚段 |
例:
| 以下为引用的内容: BEGIN UPDATE checking SET balance=balance-5000 WHERE account='Kieesha'; INSERT INTO checking_log(action_date,action,amount) VALUES (SYSDATE,'Transfer to brokerage',-5000); UPDATE brokerage SET cash_balance=cash_balance+5000 WHERE account='Kiesha'; INSERT INTO brokerage_log(action_date,action,amount) VALUES (SYSDATE,'Tracfer from checking',5000) COMMIT EXCEPTION WHEN OTHERS ROLLBACK END |
Savepoint 和 部分回滚(Partial Rollback)
在SQL和PL/SQL中Savepoint是在一事务范围内的中间标志。经常用于将一个长的事务划分为小的部分。保留点Savepoint可标志长事务中的任何点,允许可回滚该点之后的操作。在应用程序中经常使用Savepoint;例如一过程包含几个函数,在每个函数前可建立一个保留点,如果函数失败,很容易返回到每一个函数开始的情况。在回滚到一个Savepoint之后,该Savepoint之后所获得的数据封锁被释放。为了实现部分回滚可以用带TO Savepoint子句的ROLLBACK语句将事务回滚到指定的位置。
例
| 以下为引用的内容: BEGIN INSERT INTO ATM_LOG(who,when,what,where) VALUES ('Kiesha',SYSDATE,'Withdrawal of $100','ATM54') SAVEPOINT ATM_LOGGED; UPDATE checking SET balance=balance-100 RETURN balance INTO new_balance; IF new_balance<0 THEN ROLLBACK TO ATM_LOGGED; COMMIT RAISE insufficient_funda; END IF END |
关键字SAVEPOINT是可选的,所以下面两个语句是等价的:
| 以下为引用的内容: ROLLBACK TO ATM_LOGGED; ROLLBACK TO SAVEPOINT ATM_LOGGED; |
·数据库处理专题 (7248篇文章)
·城域网专题 (6687篇文章)
·数据库安全技术专题 (11040篇文章)
·数据库安装与卸载 (8959篇文章)
·Oracle 10g基础应用 (4060篇文章)
·Linux数据库宝典 (11231篇文章)
·数据库相关文章 (4477篇文章)
·数据库体系架构 (968篇文章)
·VMware下RedHat安装Oracle 9i RAC全攻略 (5996次浏览)
·简单的Oracle存储过程的创建方法(菜鸟级) (5135次浏览)
·Oracle架构的基础知识(入门级) (4974次浏览)
·ORACLE中的各种数据类型详细的介绍 (4751次浏览)
·ORACLE备份一(ORACLE BACKUP STRATEGY) (1893次浏览)
·双机热备Oracle数据库服务器操作实战 (1792次浏览)
·Oracle的初学者入门心得 (995次浏览)
·Oracle数据库数据操作和控制语言详解 (962次浏览)
·oracle与用户角色权限相关的视图 (46次浏览)
·VMware下RedHat安装Oracle 9i RAC全攻略 (5996次浏览)
·简单的Oracle存储过程的创建方法(菜鸟级) (5135次浏览)
·Oracle架构的基础知识(入门级) (4974次浏览)
·ORACLE中的各种数据类型详细的介绍 (4751次浏览)
·ORACLE备份一(ORACLE BACKUP STRATEGY) (1893次浏览)
·双机热备Oracle数据库服务器操作实战 (1792次浏览)
·Oracle的初学者入门心得 (995次浏览)
·Oracle数据库数据操作和控制语言详解 (962次浏览)
·详细介绍ORACLE sqlplus命令 (340次浏览)
·VMware下RedHat安装Oracle 9i RAC全攻略 (5996次浏览)
·简单的Oracle存储过程的创建方法(菜鸟级) (5135次浏览)
·Oracle架构的基础知识(入门级) (4974次浏览)
·ORACLE中的各种数据类型详细的介绍 (4751次浏览)
·ORACLE备份一(ORACLE BACKUP STRATEGY) (1893次浏览)
·双机热备Oracle数据库服务器操作实战 (1792次浏览)
·Oracle的初学者入门心得 (995次浏览)
·Oracle数据库数据操作和控制语言详解 (962次浏览)
·ORACLE的客户端如何连接到数据库 (445次浏览)
·Oracle数据库数据操作和控制语言详解 07-19
·双机热备Oracle数据库服务器操作实战 07-18
·ORACLE备份一(ORACLE BACKUP STRATEGY) 07-18
·ORACLE中的各种数据类型详细的介绍 07-17
·Oracle架构的基础知识(入门级) 07-17
·VMware下RedHat安装Oracle 9i RAC全攻略 07-16
·简单的Oracle存储过程的创建方法(菜鸟级) 07-16
·Oracle 9i Installation on Red Hat Linux 07-16
·ORACLE SQL性能优化系列 (九) 07-16




