玩转Oracle 10g实战教程全套PPT_韩顺平_第1页
玩转Oracle 10g实战教程全套PPT_韩顺平_第2页
玩转Oracle 10g实战教程全套PPT_韩顺平_第3页
玩转Oracle 10g实战教程全套PPT_韩顺平_第4页
玩转Oracle 10g实战教程全套PPT_韩顺平_第5页
已阅读5页,还剩177页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、神喻神喻 代神说话的人代神说话的人 甲骨文甲骨文暗示暗示 公司预作霸主的决心公司预作霸主的决心地位地位 全球第一大数据库厂商全球第一大数据库厂商 全球第二大独立软件供应商全球第二大独立软件供应商玩转oracle 10g实战教程oracle公司介绍 oracle的含义玩转oracle 10g实战教程oracleoracle公司介绍公司介绍 公司发展与现状公司发展与现状 1970年 数据库起家 1980年 ORACLE6版本 1990年 ORACLE7版本,多元化产品,以数据库为优先发展方向 1995年 ORACLE8版本 1999年 ORACLE8i版本 2001年 ORACLE9i relea

2、se1 2002年 ORACLE9i release2 2003年 ORACLE10g版本 2007年 ORACLE11g版本 2009年年,甲骨文以每股甲骨文以每股9.5美元的价格收购美元的价格收购Sun,交易总价值约为,交易总价值约为74亿亿美元。美元。玩转oracle 10g实战教程oracle 10g 比oracle 9i增加了什么?简要说:简要说:10g支持网格(Grid),支持自动管理(Automatic Management)。详细说:详细说:10g的g是“Grid”缩写,支持网格计算,即,多台结点服务器利用高速网络组成一个虚拟的高性能服务器,负载在整个网格中均衡(Load Ba

3、lance),按需增点,避免单点故障(Single Point of Faliure)。安装容易,安装工作量比9i减少了一半。新增基于浏览器的企业管理器(Enterprise Manager)。oracleoracle公司介绍公司介绍 公司发展与现状公司发展与现状玩转oracle 10g实战教程oracleoracle公司介绍公司介绍 Larry Ellisin Larry Ellisin 2013福布斯全球富豪榜拉里埃利森以430亿美元名列第五 ORACLE的建立者和发展者 IT风云人物玩转oracle 10g实战教程oracle管理工具的介绍管理工具的介绍(1)sql*plus是oracl

4、e自带的工具软件,主要用于执行sql语句,plsql块.如何使用如何使用:1)在开始-程序-oracle oradb_home10g-application development-sql*plus2)在运行栏中输入: sqlplusw即可玩转oracle 10g实战教程oracle管理工具的介绍管理工具的介绍(2)概述:sqlplus 是 dos下操作oracle的工具,其功能和sql*plus相似.1)在运行栏中输入 sqlplus2)找到该可执行文件sqlplus.exe,在oracle主目录ora10gbinsqlplus.exe ,鼠标双击即可玩转oracle 10g实战教程orac

5、le管理工具的介绍管理工具的介绍(3)概述:pl/sql developer 属于第三方软件,主要用于开发,测试,优化 oracle pl/sql 的存储过程比如: 触发器,此软件oracle不带,需要单独安装。玩转oracle 10g实战教程oracle管理工具的介绍管理工具的介绍(4) Enterprise manager console(企业管理器企业管理器) oracle 10g是通过web管理的 一般默认端口是5500, 也有1158的。 访问url(请一定保证oracle服务启动了): http:/ip:1158 (也可能是5500)/em http:/机器名:端口/em玩转ora

6、cle 10g实战教程sql*plus常用命令常用命令 连接命令 (1)connect用法: conn 用户名/密码网络服务名 as sysdba/sysoper当用特权用户身份连接时,必须带上 as sysdba 或是 as sysoper(2)disconnect说明:该命令用来断开与当前数据库的连接(3)password说明:该命令用于修改用户的密码.如果要想修改其它用户的密码,需要用sys/system登陆.(4)show user说明:显示当前用户名(5)exit说明:该命令会断开与数据库的连接,同时会退出sql*plus玩转oracle 10g实战教程sql*plus常用命令常用命

7、令 交互式命令(1)& 说明:可以替代变量,而该变量在执行时,需要用户输入。 sqlselect * from emp where job=&job(2)edit 说明:该命令可以编辑指定的sql脚本 案例:sqledit d:a.sql(3)spool 说明:该命令可以将sql*plus屏幕上的内容输出到指定文件中去. 案例:sqlspool d:b.sql 并输入 sqlspool off玩转oracle 10g实战教程sql*plus常用命令常用命令 显示和设置环境变量概述:可以用来控制输出的各种格式。(1)linesize 说明:设置显示行的宽度,默认是80个字符 sqlshow li

8、nesize sqlset linesize 90(2)pagesize 说明:设置每页显示的行数目,默认是14,用法和linesize一样。至于其它环境参数的使用也是大同小异玩转oracle 10g实战教程oracle用户管理用户管理 创建用户创建用户(简单版简单版)概述:在oracle中要创建一个新的用户使用 create user 语句,一般是具有dba(数据库管理员)的权限才能使用。基本语法:create user 用户名用户名 identified by 密码密码 给用户修改密码给用户修改密码 概述:如果给自己修改密码可以直接使用 sqlpassword 用户名 如果给别人修改密码则

9、需要具有dba的权限,或是拥有alter user的系统权限 sqlalter user 用户名 identified by 新密码玩转oracle 10g实战教程oracle用户管理用户管理 创建用户(细节)例子: sql create user shunping identified by m123default tablespace userstemporary tablespace tempquota 3m on users;identified by 表明该用户shunping 将用数据库方式验证 default tablespace users /用户的表空间在users上temp

10、orary tablespace temp /用户shunping的临时表健在temp 空间quota 3m on users /表明用户shunping 建立的数据对象(表,索引,视图,pl/sql块.)最大只能是3m刚刚创建的用户是没有任何权限的,因此,需要dba给该用户授权.sqlgrant connect to shunping 如果你希望该用户建表没有空间的限制sqlgrand resource to shunping如果你希望该用户成为dbasqlgrant dba to shunping玩转oracle 10g实战教程oracle用户管理用户管理 删除用户删除用户概述:一般以db

11、a的身份去删除某个用户,如果用其它用户去删除用户则需要具有 drop user的权限。比如 drop user 用户名用户名 【cascade】玩转oracle 10g实战教程oracle用户管理用户管理 用户管理的综合案例概述:创建的新用户是没有任何权限的,甚至连登录的数据库的权限都没有,需要为其指定相应的权限。给一个用户赋权限使用命令grant,回收权限使用命令 revoke。基本语法基本语法: grant 权限权限/角色角色 to 用户用户为了给讲清楚用户的管理,这里我给大家举一个案例。创建 xiaoming,并赋予 connect 和 resource 回收权限玩转oracle 10g

12、实战教程oracle用户管理用户管理 使用profile管理用户口令概述:profile是口令限制,资源限制的命令集合,当建立数据时,oracle会自动建立名称为default的profile,当建立用户没有指定profile选项,那oracle就会将default分配给用户。(1)帐户锁定帐户锁定概述: 指定该帐户(用户)登陆时最多可以输入密码的次数,也可以指定用户锁定的时间(天)一般用dba的身份去执行该命令例子:指定scott这个用户最多只能尝试3次登陆,锁定时间为2天,让我们看看怎么实现。创建创建profile文件文件sql create profile lock_account li

13、mit failed_login_attempts 3 password_lock_time 2;sqlalter user tea profile lock_account;玩转oracle 10g实战教程oracle用户管理用户管理2)给帐户给帐户(用户用户)解锁解锁sql alter user tea account unlock;(3)终止口令终止口令为了让用户定期修改密码可以使用终止口令的指令来完成,同样这个命令也需要dba身份来操作.例子:给前面创建的用户tea创建一个profile文件,要求该用户每隔10天要修改自家的登陆密码,宽限期为2天。看看怎么做.sql create pr

14、ofile myprofile limit password_life_time 10 password_grace_time 2;sqlalter user tea profile myprofile玩转oracle 10g实战教程oracle用户管理用户管理 口令历史口令历史概述:如果希望用户在修改密码时,不能使用以前使用过的密码,可使用口令历史,这样oracle就会将口令修改的信息存放到数据字典中,这样当用户修改密码时,oracle就会对新旧密码进行比较,当发现新旧密码一样时,就提示用户重新输入密码。例子: 1)建立建立profile sql create profile passwor

15、d_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10 password_reuse_time /指定口令可重用时间即10天后就需要修改 2)分配给某个用户分配给某个用户. sqlalter user tea profile myprofile玩转oracle 10g实战教程oracle用户管理用户管理 删除删除profileprofile概述:当不需要某个profile文件时,可以删除该文件.sql drop profile sql drop profile profileprofi

16、le文件名文件名玩转oracle 10g实战教程oracle数据库启动流程数据库启动流程oracle也可以通过命令行的方式启动,我们看看具体是怎样操作。 oracle启动流程启动流程-windows下下 1)lsnrctl start (启动监听启动监听) 2)oradim startup sid 数据库实例名数据库实例名 oracle启动流程启动流程-linux下下 1)lsnctl start(启动监听启动监听) 2)sqlplus sys/change_on_install as sysdba (以以sysdba身份登录身份登录,在在oracle10g后可以这样写后可以这样写)sqlpl

17、us /nologconn sys/change_on_install as sysdba 3)startup 玩转oracle 10g实战教程oracle登录认证方式登录认证方式 oracle登录认证方式登录认证方式-windows下下概述:oracle登录认证在windows下和linux下是不完全相同的,这里我们先说说windows下oracle的登录认证方式.操作系统认证操作系统认证如果当前用户属于本地操作系统的ora_dba组(对于Windows操作系统而言),即可通过操作系统认证。oracle数据库验证数据库验证(密码文件验证密码文件验证)对于普通用户对于普通用户,oracle默认

18、使用数据库验证。对于特权用户对于特权用户(比如比如sys用户用户),oracle默认使用操作系统认证,如果验证不通过,再到数据库验证(密码文件验证)。通过配置sqlnet.ora文件,可以修改oracle登录认证方式SQLNET.AUTHENTICATION_SERVICES= (NTS)是基于操作系统验证;SQLNET.AUTHENTICATION_SERVICES= (NONE)是基于Oracle验证;SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)是二者共存。玩转oracle 10g实战教程oracle登录认证方式登录认证方式 oracle登录认证方式

19、登录认证方式-linux下下这里大家了解即可:默认情况下linux下的oracle数据库sqlnet.ora文件没有SQLNET.AUTHENTICATION_SERVICES参数,此时是基于操作系统认证和oracle密码验证共存的,加上SQLNET.AUTHENTICATION_SERVICES参数后,不管SQLNET.AUTHENTICATION_SERVICES设置为NONE或者NTS,都是基于oracle密码验证的。玩转oracle 10g实战教程丢失管理员密码怎么办丢失管理员密码怎么办恢复办法:把原有密码文件删除,生成一个新的密码文件。恢复步骤如下:恢复步骤如下: 搜索名为 PWD数

20、据库实例名.ora 文件 删除该文件,为预防万一,建议大家备份 生成新的密码文件,在dos控制台下输入命令:orapwd file=原来密码文件的全路径密码文件名.ora password=新密码 entries=10;/entries:允许几个特权用户 密码文件名 一定要和原来的密码文件名一样。玩转oracle 10g实战教程基本概念基本概念-数据库服务器、数据库和表的关系数据库服务器、数据库和表的关系MySQLDBDB表表Clientl所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。l为保存应用中实体的数

21、据,一般会在数据库创建多个表,以保存程序中实体的数据。l数据库服务器、数据库和表的关系如图所示:表玩转oracle 10g实战教程基本概念-数据在数据库中的存储方式id=1name=“lisi”age=23User对象idnameage1lisi232wang24User表id=2name=“wang”age=24行(row)列(column)l表的一行称之为一条记录l表中一条记录对应一个java对象的数据User对象玩转oracle 10g实战教程表的管理-创建表(基本语句)CREATE TABLE table_name(field1 datatype,field2 datatype,fie

22、ld3 datatype,)field:指定列名datatype:指定列类型注意:创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。例:user对象 id int name string password string birthday dateIdName Passwordbirthday玩转oracle 10g实战教程表的管理表的管理oracle常用数据类型常用数据类型分类数据类型说明文本、二进制类型CHAR(size) char(20)VARCHAR(size) varchar(20)nchar(n) nvarchar2(n)clob(character lar

23、ge object)blob(binary large object) 定长 最大2000字符变长 最大4000字符Unicode数据类型 ,定长 最大2000字符Unicode数据类型 ,变长 最大4000字符字符型大对象 ,最大8tb二进制数据 可以存放图片/声音 8tb数值类型number(p,s)p为整数位,s为小数位.范围: 1 = p =38, -84 = s = 127保存数据范围:-1.0e-130 = number value 1.0e+126 保存在机器内部的范围: 1 22 bytes时间日期dateTIMESTAMP(n)包含年月日,时分秒。默认格式:DD-MON-YY

24、YY。从公元前4712年1月1日到公元4712年12月31日的所有合法日期n的取值为09.表示指定TIMESTAMP中秒的小数位数。N为可选。如果n为0,timestamp与date等价不推荐 number可以理解成是一个可变的数值类型,比如 number(12) ,你放一个小整数,它占用的字节数就少,你放一个大整数,它占用的字节数就多,很好!玩转oracle 10g实战教程oracle表的管理表的管理-oracle支持的数据类型支持的数据类型 数值型数值型 NUMBER(precision , scale) NUMBER(p,s)范围: 1 = p =38, -84 = s = 127保存数

25、据范围:-1.0e-130 = number value 0精确到小数点右边s位,并四舍五入。然后检验有效位是否 = p。s 0 精确到小数点左边s位,并四舍五入。然后检验有效位是否 all (select sal from emp where deptno=30);扩展要求:大家想想还有没有别的查询方法.Select ename,sal,deptno from emp where sal(select max(sal) from emp where deptno=30);玩转oracle 10g实战教程oracle表复杂查询表复杂查询子查询子查询 在多在多行子查询中使用在多在多行子查询中使用

26、any操作符操作符请思考:如何显示工资比部门30的任意一个员工的工资高的员工的姓名、工资和部门号扩展要求:大家想想还有没有别的查询方法.玩转oracle 10g实战教程oracle表复杂查询表复杂查询子查询子查询 多列子查询多列子查询单行子查询是指子查询只返回单列、单行数据,多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查序则是指查询返回多个列数据的子查询语句玩转oracle 10g实战教程oracle表复杂查询表复杂查询子查询子查询 在在from子句中使用子查询子句中使用子查询请思考:如何显示高于自己部门平均工资的员工的信息这里要用到数据查询的小技巧,把一个子查询当作一个临时表

27、使用解法select e1.*,e2.myavg from emp e1,(select avg(sal) myavg,deptno from emp group by deptno) e2 where e1.deptno=e2.deptno and e1.sale2.myavg解法select e1.* from emp e1 where e1.sal(select avg(sal) from emp where deptno=e1.deptno)玩转oracle 10g实战教程oracle表复杂查询表复杂查询子查询子查询 在在fromfrom子句中使用子查询子句中使用子查询请思考:查找每个

28、部门工资最高的人的详细资料解法解法思路:得到所有的员工,进行筛选,每拿到一个员工,判断该员工的工资是否是他们部门的最高工资。select * from emp e where sal=(select max(sal) from emp where deptno=e.deptno);玩转oracle 10g实战教程oracle表复杂查询表复杂查询子查询子查询 在在fromfrom子句中使用子查询子句中使用子查询请思考:显示每个部门的信息和人员数量解法自己完成解法查询获得所有的部门信息,每获得一个部门,我们就查询该部门的人数,保存为一个新的列。select d.*,(select count(*)

29、 from emp where deptno=d.deptno) allnum from dept d; 玩转oracle 10g实战教程oracle表复杂查询表复杂查询子查询子查询 在from子句中使用子查询这里需要说明的当在from子句中使用子查询时,该子查询会被作为一个临时表来对待,当在from子句中使用子查询时,必须给子查询指定别名.玩转oracle 10g实战教程oracle表复杂查询表复杂查询子查询子查询 用查询结果创建新表用查询结果创建新表这个命令是一种快捷的建表方法.create table mytable (id,name,sal,job,deptno) as select

30、empno,ename,sal,job,deptno from emp; 自我复制数据自我复制数据(蠕虫复制蠕虫复制)有时,为了对某个sql语句进行效率测试,我们需要海量数据时,可以使用此法为表创建海量数据。insert into mytable (id,name,sal,job,deptno) select empno,ename,sal,job,deptno from emp;玩转oracle 10g实战教程oracle表复杂查询表复杂查询合并查询合并查询 合并查询合并查询有时在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号 union , union all,int

31、ersect , minus1)union 1)union 该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。select ename,sal,job from emp where sal2500 union select ename,sal,job from emp where job=MANAGER;玩转oracle 10g实战教程oracle表复杂查询表复杂查询合并查询合并查询2)union all2)union all该操作赋与union相似,但是它不会取消重复行,而且不会排序。select ename,sal,job from emp where sal2

32、500 union all select ename,sal,job from emp where job=manager; 3)intersect3)intersect使用该操作符用于取得两个结果集的交集。select ename,sal,job from emp where sal2500 intersect select ename,sal,job from emp where job=manager;玩转oracle 10g实战教程oracle表复杂查询表复杂查询合并查询合并查询4) minus4) minus使用该操作符用于取得两个结果集的差集,它只会显示存在第一个集合中,而不存在第

33、二个集合中的数据。select ename,sal,job from emp where sal2500 minus select ename,sal,job from emp where job=manager;玩转oracle 10g实战教程oracle表内连接和外连接表内连接和外连接 概述概述表连接分为内连接和外连接。 内连接内连接内连接实际上就是利用 where 子句对两张表形成的笛卡尔积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中用的最多的连接查询。 玩转oracle 10g实战教程oracle表内连接和外连接表内连接和外连接 外连接外连接左外连接左外连接 (如果左侧的表

34、完全显示我们就说是左外连接)右外连接右外连接 (如果右侧的表完全显示我们就说是右外连接)完全外连接完全外连接(完全显示两个表,没有匹配的记录置为空)为了讲清楚,我们举例说明。 -表stuid name 1, Jack2, Tom3, Kity4, nono-表examid grade1, 562, 7611, 8玩转oracle 10g实战教程oracle表内连接和外连接表内连接和外连接 外连接外连接1)内连接案例(显示两表内连接案例(显示两表id匹配的)匹配的)2)2)左连接(显示所有人的成绩,如果没有成绩,也要显示该人的姓名左连接(显示所有人的成绩,如果没有成绩,也要显示该人的姓名和和id

35、id号号, ,成绩显示为空)成绩显示为空)select stu.id,, exam.grade from stu left join exam on stu.id=exam.id 有的程序员喜欢这样写左外连接select stu.id,, exam.grade from stu , exam where stu.id=exam.id(+)玩转oracle 10g实战教程oracle表内连接和外连接表内连接和外连接 外连接外连接3)3)右连接(显示所有成绩,如果没有名字匹配,显示空)右连接(显示所有成绩,如果没有名字匹配,显示空)select exam.id,st

36、, exam.grade from stu right join exam on stu.id=exam.id 有的程序员喜欢这样写左外连接select exam.id,, exam.grade from stu , exam where stu.id(+)=exam.id4)4)完全外连接(显示所有成绩和所有人的名字,如果相应的匹配值,完全外连接(显示所有成绩和所有人的名字,如果相应的匹配值,则显示空)则显示空)玩转oracle 10g实战教程oracle表内连接和外连接表内连接和外连接 一个小练习一个小练习为加深大家对外连接的理解,我们做一个小练习列出部门名称和

37、这些部门的员工信息,同时列出那些没有员工的部门。玩转oracle 10g实战教程oracle表复杂查询表复杂查询创建新数据库实例创建新数据库实例 创建数据库有两种方法创建数据库有两种方法:1) 通过oracle提供的向导工具 2) 我们可以用手工步骤直接创建.玩转oracle 10g实战教程oracle第第3讲讲1. java程序如何操作oracle 2. 如何在oracle中操作数据 3. oracle事务处理4. sql函数的使用玩转oracle 10g实战教程java连接连接oracle 介绍介绍前面我们一直在plsql中操作oracle,那么如何在java程序中操作数据库呢?下面我们举

38、例说明,写一个ShowEmp.java(jsp),分页显示emp表的用户信息。java连接oracle odbc桥连接:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection ct=DriverManager.getConnection(jdbc:odbc:testsp,scott,m123);java连接oracle jdbc连接Class.forName(oracle.jdbc.driver.OracleDriver);Connection ct=DriverManager.getConnection(jdbc:oracle:thin:

39、:1521:myora1,scott,m123);玩转oracle 10g实战教程在在oracle中操作数据中操作数据使用特定的格式插入日期使用特定的格式插入日期 使用 to_date函数请大家思考:如何插入列带有日期的表,并按照年-月-日的格式插入?玩转oracle 10g实战教程oracle中操作数据中操作数据使用子查询插入数据使用子查询插入数据 介绍介绍当使用values子句时,一次只能插入一行数据,当使用子查询插入数据时,一条insert语句可以插入大量的数据.当处理行迁移或者装载外部表的数据到数据库时,可以使用子查询来插入数据.玩转oracle 10g实战教程ora

40、cle中操作数据中操作数据使用子查询更新数据使用子查询更新数据 介绍介绍使用update语句更新数据时,既可以使用表达式或者数值直接修改数据,也可以使用子查询修改数据。?希望员工scott的岗位、工资、补助与smith员工一样玩转oracle 10g实战教程oracle中事务处理中事务处理 什么是事务什么是事务事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。如:网上转账就是典型的要用事务来处理,用以保证数据的一致性。 事务和锁事务和锁当执行事务操作时(dml语句),oracle会在被作用的表上加锁,防止其它用户改表表的结构.这里对我们用户来讲

41、是非常重要的。 提交事务提交事务当执使用commit语句可以提交事务.当执行了commit语句子后,会确认事务的变化、结束事务、删除保存点、释放锁,当使用commit语句结束事务子后,其它会话将可以查看到事务变化后的新数据玩转oracle 10g实战教程oracle中事务处理中事务处理 回退事务回退事务在介绍回退事务前,我们先介绍一下保存点(savepoint)的概念和作用.保存点是事务中的一点.用于取消部分事务,当结束事务时,会自动的删除该事务所定义的所有保存点.当执行rollback时,通过指定保存点可以回退到指定的点,这里我们作图说明 事务的几个重要操作事务的几个重要操作1) 设置保存点

42、 savepoint 保存点名2) 取消部分事务 rollback to 保存点名3) 取消全部事务 rollback玩转oracle 10g实战教程oracle中事务处理中事务处理 java程序中如何使用事务程序中如何使用事务在java操作数据库时,为了保证数据的一致性,比如转帐操作(图):(1)从一个帐户减掉10$(2)在另一个帐户上加入10$,我们看看如何使用事务?玩转oracle 10g实战教程oracle中事务处理中事务处理 事务隔离级别事务隔离级别 事务隔离级别事务隔离级别概念:隔离级别定义了事务与事务之间的隔离程度。ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别(

43、这是国际标准化组织定义的一个标准而已,不同的数据库在实现时有所不同不同的数据库在实现时有所不同):隔离级别隔离级别 脏读脏读 不可重复读不可重复读 幻读幻读 读未提交(Read uncommitted)VVV读已提交(Read committed)xVV可重复读(Repeatable read)xxV可串行化(Serializable )xxxV 可能出现 x 不会出现 玩转oracle 10g实战教程oracle中事务处理中事务处理 事务隔离级别事务隔离级别 事务隔离级别事务隔离级别脏读(脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。不可重复读(不可重复读

44、(nonrepeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。幻读(幻读(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读。玩转oracle 10g实战教程oracle中事务处理中事务处理 事务隔离级别事务隔离级别 oracle的事务隔离级别的事务隔离级别 ORACLE提供了SQL92标准中的read committed和serializable,同时提供了非SQL92标准的read-only oracle的 read committe

45、d 说明: 这是ORACLE缺省的事务隔离级别。 保证不会脏读;但可能出现非重复读和幻像。 oracle的 serializable 说明: serializable就是使事务看起来象是一个接着一个地顺序地执行(从效果上可以这样理解) 仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改 保证不会出现脏读、不可重复读和幻读 Serializable隔离级别提供了read-only事务所提供的读一致性(事务级的读一致性),同时又允许DML操作玩转oracle 10g实战教程oracle中事务处理中事务处理 事务隔离级别事务隔离级别 oracle的事务隔离级别的事务隔离级别 orac

46、le的 read only 说明: 遵从事务级的读一致性,仅仅能看见在本事务开始前由其它事务提交的更改。 不允许在本事务中进行DML操作。 read only是serializable的子集。它们都避免了不可重复读和幻读。区别是在read only中是只读;而在serializable中可以进行DML操作玩转oracle 10g实战教程oracle中事务处理中事务处理 事务隔离级别事务隔离级别 oracle的事务隔离级设置的事务隔离级设置 设置一个事务的隔离级别 设置整个会话的隔离级别玩转oracle 10g实战教程oracle中事务处理中事务处理 事务隔离级别事务隔离级别 oracle的事务

47、隔离级的事务隔离级-案例案例 我们举例一个案例来说明oracle的事务隔离级别. 以对emp表进行操作为例。sqlplus控制台sqlplus控制台玩转oracle 10g实战教程oracle中事务处理中事务处理 事务隔离级别事务隔离级别 oracle的事务隔离级在的事务隔离级在java程序中如何使用程序中如何使用connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);特别说明特别说明:java程序中Connection.XXXXXX有五个,但不是所有的数据库对有对应的五个事务隔离级别实现。在实际工作中

48、,我们极少去修改各个数据库默认的隔离级别。 玩转oracle 10g实战教程oracle中事务处理中事务处理只读事务只读事务 只读事务实际运用案例只读事务实际运用案例只读事务是指只允许执行查询的操作,而不允许执行任何其它dml操作的事务,使用只读事务可以确保用户只能取得某时间点的数据。假定机票代售点每天18点开始统计今天的销售情况,这时可以使用只读事务.在设置了只读事务后,尽管其它会话可能会提交新的事务,但是只读事务将不会取得最新数据的变化,从而可以保证取得特定时间点的数据信息。(图示) 设置只读事务设置只读事务set transaction read only玩转oracle 10g实战教程

49、sql函数的使用函数的使用字符函数字符函数 介绍介绍字符函数是oracle中最常用的函数,我们来看看有哪些字符函数: replace(char1,search_string,replace_string) instr(char1,char2,n,m)取子串在字符串的位置?显示所有员工的姓名,用”我是A”替换所有A“玩转oracle 10g实战教程sql函数的使用函数的使用数学函数数学函数 介绍介绍数学函数的输入参数和返回值的数据类型都是数字类型的.数学函数包括cos,cosh,exp,ln,log,sin,sinh,sqrt,tan, tanh,acos,asin,atan,round,我们讲

50、最常用的 : round(n,m) trunc(n,m) mod(m,n) floor(n) ceil(n)对数字的处理,在财务系统或银行系统中用的最多,不同的处理方法,对财务报表有不同的结果。玩转oracle 10g实战教程sql函数的使用函数的使用数学函数数学函数 介绍介绍 round(n,m) 该函数用于执行四舍五入,如果省掉m,则四舍五入到整数;如果m是正数,则四舍五入到小数点的m位后.如果m是负数,则四舍五入到小数点的m位前 trunc(n,m) 该函数用于截取数字.如果省掉m,就截去小数部分,如果m是正数就截取到小数点的m位后,如果m是负数,则截取到小数点的前m位 mod(m,n)

51、 floor(n) 返回小于或是等于n的最大整数 ceil(n) 返回大于或是等于n的最小整数案例数据: 2345.56 45.94?显示在一个月为30天的情况所有员工的日薪金,忽略余数.玩转oracle 10g实战教程sql函数的使用函数的使用数学函数数学函数 介绍介绍其它的数学函数,有兴趣的同学可以自己去看看:abs(n) 返回数字n的绝对值select abs(-13) from dual;acos(n) :返回数字的反余旋值asin(n): 返回数字的反正旋值atan(n): 返回数字的反正切cos(n)exp(n): 返回e的n次幂log(m,n)返回对数值power(m,n):返回

52、m的n次幂玩转oracle 10g实战教程sql函数的使用函数的使用日期函数日期函数 介绍介绍日期函数用于处理date类型的数据.默认情况下日期格式是dd-mon-yy 即12-7月-78(1)sysdate: 该函数返回系统时间(2)add_months(d,n)(3)last_day(d):返回指定日期所在月份的最后一天?查找已经入职8个月多的员工?显示满10年服务年限的员工的姓名和受雇日期.?对于每个员工,显示其加入公司的天数.?找出各月倒数第3天受雇的所有员工.玩转oracle 10g实战教程sql函数的使用函数的使用转换函数转换函数 介绍介绍 转换函数用于将数据类型从一种转为另外一种

53、.在某些情况下,oracle server允许值的数据类型和实际的不一样,这时oracle server会隐含的隐含的转化数据类型转化数据类型,比如:create table t1(id number);insert into t1 values(10) -这样oracle会自动的将10-10create table t2 (id varchar2(10);insert into t2 values(1); -这样oracle 就会自动的将1-1;我们要说的是尽管oracle可以进行隐含的数据类型的转换,但是它并不适应所有的情况,为了提高程序的可靠性,我们应该使用转换函数进行转换玩转oracl

54、e 10g实战教程sql函数的使用函数的使用转换函数转换函数 to_char你可以使用 select ename,hiredate,sal from emp where deptno=10;显示信息,可是,在某些情况下,这个并不能满足你的需求。?日期是否可以显示 时/分/秒?薪水是否可以显示指定的货币符号yy: yy: 两位数字的年份两位数字的年份 2004-04 2004-04 yyyy: yyyy: 四位数字的年份四位数字的年份 20042004年年mm :mm :两位数字的月份两位数字的月份 8 8月月-08-08dd: 2dd: 2位数字的天位数字的天 3030号号-30-30hh24

55、: 8hh24: 8点点2020hh12: 8hh12: 8点点0808mimi、ss -ss -显示分钟显示分钟 秒秒9:9:显示数字显示数字, ,并忽略前面并忽略前面0 00:0:显示数字显示数字, ,如位数不足如位数不足, ,则用则用0 0补齐补齐. .:在指定位置显示小数点:在指定位置显示小数点,: ,: 在指定位置显示逗号在指定位置显示逗号$: $: 在数字前加美元在数字前加美元L: L: 在数字前加本地货币符号在数字前加本地货币符号C: C: 在数字前加国际货币符号在数字前加国际货币符号G:G:在指定位置显示组分隔符、在指定位置显示组分隔符、D:D:在指定位置显示小数点符号在指定位

56、置显示小数点符号(.)(.)select ename,to_char(sal,L99G999D99) from emp ;玩转oracle 10g实战教程sql函数的使用函数的使用转换函数转换函数 小练习小练习(to_char)?显示1980年入职的所有员工?显示所有12月份入职的员工 to_date函数to_date用于将字符串转换成date类型的数据.?能否按照中国人习惯的方式年-月-日添加日期 玩转oracle 10g实战教程sql函数的使用函数的使用系统系统函数函数 sys_context1) terminal :当前会话客户所对应的终端的标识符2) lanuage: 语言3) db_

57、name: 当前数据库名称4) nls_date_format:当前会话客户所对应的日期格式5) session_user: 当前会话客户所对应的数据库用户名6) current_schema: 当前会话客户所对应的默认方案名?7) host: 返回数据库所在主机的名称通过该函数,可以查询一些重要信息,比如你怎在使用哪个数据库?select sys_context(userenv,db_name) from dual;玩转oracle 10g实战教程oracle第第4讲讲1. 1. 维护数据的完整性维护数据的完整性 2. 2. 序列序列(sequence) (sequence) 3. 3. 管

58、理管理索引索引4. 4. 管理权限和角色管理权限和角色玩转oracle 10g实战教程维护数据的完整性维护数据的完整性 介绍介绍数据的完整性用于确保数据库数据遵从一定的商业的逻辑规则。在oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能,所以作为维护数据完整性的首选.玩转oracle 10g实战教程维护数据的完整性维护数据的完整性 约束约束约束用于确保数据库数据满足特定的商业规则。在oracle中,约束包括: not null、unique,primary key,foreign key,和check 五种

59、.玩转oracle 10g实战教程维护数据的完整性维护数据的完整性 not null(非空非空)如果在列上定义了not null,那么当插入数据时,必须为列提供数据。 unique(唯一唯一)当定义了唯一约束后,该列值是不能重复的.但是可以为null。 primary key(主键主键)用于唯一的标示表行的数据,当定义主键约束后,该列不但不能重复而且不能为null。需要说明的是:一张表最多只能有一个主键,但是可以有多个unqiue约束。 foreign key(外键外键)用于定义主表和从表之间的关系.外键约束要定义在从表从表上,主表则必须具有主键约束或是unique约束.,当定义外键约束后,要

60、求外键列数据必须在主表的主键列存在或是为null玩转oracle 10g实战教程维护数据的完整性维护数据的完整性 check用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在10002000之间如果不再10002000之间就会提示出错。玩转oracle 10g实战教程维护数据的完整性维护数据的完整性 商店售货系统表设计案例商店售货系统表设计案例(1)(1)现有一个商店的数据库,记录客户及其购物情况,由下面三个表组成:现有一个商店的数据库,记录客户及其购物情况,由下面三个表组成:商品商品goodsgoods(商品号(商品号goodsIdgoodsId,商品名,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论