资源描述
西安新展信息技术效劳指定教材
高级IT软件工程师培训系列
Java 企业数据库Oracle应用
西安新展信息技术效劳 编著
学员培训用书
第二学期
西安新展信息技术效劳
内容简介
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
图书在版编目〔CIP〕数据
JavaEE设计模式/西安新展软件
培训中心——西安
中国版本图书馆CIP数据核字〔2021〕第0001号
策 划:XXX
主 编:XXX
责任编辑:XXX
印 刷:XXXXXX
版 次:2021年第一版
印 数:10000册
定 价:元〔全套5册〕
编 委 会
策 划:杨兆峰
主 编:杨兆峰
执行主编:付永杰
责任编辑:付永杰
编 委:许天岭 付永杰 樊凯 孙文博
苏立春 孙静伟 沈扬 李国庆
编 者:付永杰 许天岭 樊凯
前言
西安新展信息技术效劳
目录
第一章 走进Oracle 1
第二章 SQL数据操作和查询 23
第三章 常用函数、事务和锁 51
第四章 表空间、数据库对象 71
第五章 数据库设计 89
第六章 PL/SQL程序设计 103
第七章 子程序和程序包 131
第八章 游标、内置程序包 153
第九章 触发器、数据字典 173
第十章 数据库管理 193
附录 数据库导入导出 211
第1章
走进Oracle
主要内容
ü Oracle安装
ü Oracle创立用户和角色
ü 客户端链接Oracle效劳器
1. Oracle简介
在第一学期已经接触过关系型数据库SQL Server,对数据库、表、记录、表的增删改查操作等这些根本的概念已经了解,接下来我们进入当今主流数据库Oracle的学习。Oracle是基于对象的关系型数据库,Oracle也是用表的形式对数据存储和管理,并且在Oracle的操作中添加了一些面向对象的思想。
Oracle数据库是Oracle〔中文名称叫甲骨文〕公司的核心产品,Oracle数据库是一个适合于大中型企业的数据库管理系统。在所有的数据库管理系统中〔比方:微软的SQL Server,IBM的DB2等〕,Oracle的市场占有率最高,显然Oracle的主要用户涉及面非常广,包括:银行、电信、移动通信、航空、保险、金融、电子商务和跨国公司等。Oracle产品是免费的,可以在Oracle官方网站上下载到安装包,但是Oracle效劳是收费的。在Java开发中,Oracle数据库是非常理想的选择。
Oracle公司成立以来,从最初的数据库版本到Oracle7、Oracle8i、Oracle9i,Oracle10g到Oracle11g,虽然每一个版本之间的操作都存在一定的差异,但是Oracle对数据的操作根本上都遵循SQL标准。因此对Oracle开发来说版本之间的差异不大。
很多人没有学习Oracle就开始发怵,因为人们在误解Oracle,认为Oracle太难学了,认为Oracle不是一般人用的数据库,其实任何数据库对应程序研发人员来说,都是大同小异,因为目前多数数据库都支持标准的SQL,SQL是程序研发人员对数据库操作的工具。在Oracle这本书中,我们能学习到:
Ø Oracle的安装
Ø Oracle数据管理
Ø Oracle锁和事务
Ø PL/SQL编程
Ø Oracle子程序
Ø 游标和触发器
Ø Oracle根本管理
由于在第一学期已经接触了SQL Server,多以学习Oracle不会很难,主要是实践,因此在本书的学习中,认真的完成上机练习是学习好本书的根底。
接下来我们先从Oracle安装开始,接触一些Oracle中根本的概念。
2. Oracle安装
Oracle数据库产品是免费的,我们可以从Oracle的官方网站( :// oracle )下载到程序安装包,Oracle在windows下的安装非常方便,安装开始后,一直点击安装程序的“下一步〞即可。
1. 下载Oracle10g后,解压到一个文件夹下,单击“〞文件即可启动安装界面。如以下图:
图1 Oracle安装启动界面
Oracle主目录位置就是Oracle准备安装的位置,称为“Oracle_Home〞,一般Oracle根据当前计算机的硬盘大小默认给出一个适宜的位置。Oracle安装时可以只安装Oracle软件,然后单独创立数据库,也可以在上图中选中“创立启动数据库〞复选框,在安装安装Oracle产品时,同时创立一个数据库,对初学者来说,推荐这样安装。填写全局数据库名,以及管理员的密码。全局数据库名是数据库在效劳器网络中的唯一标识。
2. 点击“下一步〞,就会出现如以下图内容,开始对Oracle效劳器进行环境检查,主要查看效劳器是否符合Oracle安装的条件,比方操作系统是否支持、系统内存是否符合Oracle安装的最低要求等。
图2 Oracle安装前环境检查
3. Oracle检查通过后,单击“下一步〞,就会列出所有安装Oracle过程中的默认选项。
图3 Oracle默认安装设置
4. 单击“安装〞按钮,进入安装界面,这一过程经历时间比拟长,根据计算机的性能不同有很大差异。
图4 Oracle安装
5. 上图完成后,进入了各种Oracle工具的安装阶段,包括网络配置向导,iSQL*plus等〔后面课程中讲解〕。如以下图所示:
图5 Oracle各种工具的安装
6. 接下来自动启动DBCA〔Database Configuration Assistant〕进入创立默认数据库阶段。
图6 DBCA下安装数据库
Oracle中的数据库主要是指存放数据的文件,这些文件在Oracle安装完成后,在计算机硬盘上都能找到,包括数据文件,控制文件和数据库日志文件。
数据库创立后会有一系列为该数据库提供效劳的内存空间和后台进程,称为该数据库的实例。每一个数据库至少会有一个实例为其效劳。实例中的内存结构称为系统全局区〔SGA〕,系统会根据当前计算机系统的性能给SGA分配非常可观的内存空间。
Oracle创立数据库不能像SQL Server那样用一个简单的create database命令就能完成,在创立数据库的过程中还需要配置各种参数。虽然有DBCA工具向导,但是仍然需要进行比拟麻烦的配置。
虽然一个Oracle数据库效劳器中可以安装多个数据库,但是一个数据库需要占用非常大的内存空间,因此一般一个效劳器只安装一个数据库。每一个数据库可以有很多用户,不同的用户拥有自己的数据库对象〔比方:数据库表〕,一个用户如果访问其他用户的数据库对象,必须由对方用户授予一定的权限。不同的用户创立的表,只能被当前用户访问。因此在Oracle开发中,不同的应用程序只需使用不同的用户访问即可。
7. 数据库创立完毕后,需要设置数据库的默认用户。Oracle中为管理员预置了两个用户分别是sys和system。同时Oracle为程序测试提供了一个普通用户scott,口令管理中,可以对数据库用户设置密码,设置是否锁定。 Oracle客户端使用用户名和密码登录Oracle系统后才能对数据库操作。
图7 DBCA下的口令管理
图8 为system,sys,scott用户设置密码
默认的用户中,sys和system用户是没有锁定的,安装成功后可以直接使用,scott用户默认为锁定状态,因此不能直接使用,需要把scott用户设定为非锁定状态才能正常使用。
这一步完成后,Oracle系统安装成功。
Oracle数据库中,默认情况下,所有系统的数据,SQL关键字等都是大写的,在操作过程中,Oracle会自动把这些内容转换为大写,因此用户操作时不需考虑大小写问题,一般情况下,为了良好的程序风格,程序中建议关键字用大写,非关键字可以使用小写。
3. Oracle客户端工具
Oracle效劳器安装成功后,就可以通过客户端工具连接Oracle效劳器了,可以到Oracle官方下载Oracle专用的客户端软件,大多客户端工具都是基于Oracle客户端软件的。接下来介绍几种常用的Oracle客户端工具。
² SQL*Plus工具
该工具是Oracle系统默认安装下,自带的一个客户端工具。在windows命令行中输入“sqlplusw〞命令,就能够启动该工具了。
图9 SQL*Plus工具
输入用户名和密码后,如果SQL*Plus与数据库效劳器在同一台计算机上,并且当前效劳器下只有一个数据库实例,那么“主机字符串〞可以不用填写。
SQL*Plus工具虽然是Oracle自带的工具,但是在现实开发中,基于该环境对开发不方便,因此很少使用。
SQL*Plus连接成功后就如下图:
图10 SQL*Plus工具登录后
² SQL*Plus命令行工具
该命令行工具,提供了与数据库交互的能力和维护数据库的能力,包括了Oracle自带的SQL*Plus工具的全部功能,在Oracle管理中经常使用。在命令行中输入:“sqlplus /nolog〞即可启动该工具。如以下图:
图11 启动SQL*Plus命令行工具
输入“sqlplus/nolog〞命令后,只是启动了一个客户端进程,并没有与效劳器连接,连接到Oracle效劳器的命令是:
conn 用户名/密码 as 连接身份@效劳器连接字符串
说明:
1. 连接身份:表示该用户连接后拥有的权限。
Ø sysdba: 即数据库管理员,权限包括:翻开数据库效劳器、关闭数据库效劳器、备份数据库、恢复数据库、日志归档、会话限制、管理功能、创立数据库。sys用户必须用sysdba身份才能登录,system用户可以用普通身份登录。
Ø sysyoper:即数据库操作员,权限包括:翻开数据库效劳器、关闭数据库效劳器、备份数据库、恢复数据库、日志归档、会话限制。
Ø normal:即普通用户,权限只有查询某些数据表的数据。默认的身份是normal用户。
2. 客户端工具可以根据“效劳器连接字符串〞对效劳器进行连接,有了连接字符串后客户端就可以像操作本机一样操作远程数据库,因此“效劳器连接字符串〞的配置也叫本地网络效劳配置,如果SQL*Plus工具启动在效劳器上,并且效劳器上只有一个数据库实例的情况下,连接字符串可以缺省,在连接字符串中包括连接效劳器的协议,效劳器的地址,效劳器的端口等设置,Oracle效劳名等,该配置文件在Oracle安装目录下的: network/ADMIN/ tnsnames.ora。该文件是一个文本文件,用记事本翻开后如下所示:
图12 效劳器连接字符串配置
² 配置本地网络效劳名
本地网络效劳名,即客户端与效劳器的连接字符串,本地网络效劳名是客户端的配置,Oracle客户端安装后,可以使用客户端自带的网络配置向导〔Net Configuration Assistant〕进行配置:
1. 启动Net Configuration Assistant。选择“本地Net效劳名配置〞选项。如以下图所示:
图13 启动Net Configuration Assistant
2. 选择“下一步〞,本步骤可以对本地网络效劳名进行添加,删除,测试是否正常连接等操作,选择“添加〞选项。
图14 Net Configuration Assistant
3. 点击“下一步〞,填写效劳名,该效劳名就是Oracle安装时〔图1〕,为数据库取的全局数据库名。
图15 效劳名配置
4. 点击“下一步〞,选择效劳需要的协议,默认是TCP协议。推荐使用默认的TCP协议。
图16 选择协议
5. 点击“下一步〞,输入主机名,主机名可以是计算机名称,也可以是一个IP地址,主机如果是本机,可以使用本机计算机名称、“localhost〞、“〞、或者本机的IP地址。
图17 输入主机名和端口
6. 单击“下一步〞,选择“是,进行测试〞选项。进入以下图界面。
图18 测试成功
在测试时,默认采用的用户名和密码是system/manager进行测试,如果用户system的密码不是“manager〞,有可能测试通不过,更改登录后,输入正确的用户名和密码后再进行测试即可。
7. 测试成功后,单击“下一步〞,出现如下界面,这一步是为本地网络效劳命名,即图12中的效劳器连接字符串名。
图19 为网络效劳名命名
点击“下一步〞,配置就完成了,进入tnsnames.ora文件中查看,就出现了如图12中的内容。
² PL/SQL Developer工具
在实际Oracle开发中,经常使用一个功能强大的第三方工具:“PL/SQL Developer〞工具。PL/SQL Developer根本上可以实现Oracle开发中的任何操作。它运行在客户端时必须先安装Oracle客户端,并且通过网络配置向导配置网络效劳名后才能正常与效劳器连接。
图20 PL/SQL Developer
4. Oracle效劳
Oracle在windows中安装完成后,会安装很多效劳,下面介绍几个主要的效劳。
图21 Oracle效劳
Ø OracleService+效劳名,该效劳是数据库启动的根底,只有该效劳启动了,Oracle数据库才能正常启动。这是必须启动的效劳。
Ø OracleOraDb10g_home1TNSListener,该效劳是效劳器端为客户端提供的监听效劳,只有该效劳在效劳器上正常启动,客户端才能连接到效劳器。该监听效劳接收客户端发出的请求,然后将请求传递给数据库效劳器。一旦建立了连接,客户端和数据库效劳器就能直接通信了。
Ø OracleOraDb10g_home1iSQL*Plus,该效劳提供了用浏览器对数据库中数据操作的方式。该效劳启动后,就可以使用浏览器进行远程登录并进行数据库操作了。如以下图所示:
图22 iSQL*Plus
Ø OracleDBConsole+效劳名,Oracle10g中的一个新效劳。在Oracle9i之前,Oracle官方提供了一个基于图形界面的企业管理器〔EM〕,从Oracle10g开始,Oracle提供了一个基于B/S的企业管理器,在操作系统的命令行中输入命令:emctl start dbconsole,就可以启动OracleDbConsole效劳,如以下图所示:
图23 EM效劳的启动
效劳启动之后,就可以在浏览器中输入上图中进入EM的地址,使用B/S方式管理Oracle效劳器。
5. Oracle启动和关闭
OracleService启动动后,就可以对数据库进行管理了,Oracle的启动和关闭是最根本的命令,在SQL*Plus中,启动Oracle必须是sys用户,命令格式是:
startup open
图24 Oracle效劳启动
Oracle效劳关闭用命令:shutdown immediate
图25 Oracle效劳关闭
6. Oracle用户和权限
Oracle中,一般不会轻易在一个效劳器上创立多个数据库,在一个数据库中,不同的工程由不同的用户访问,每一个用户拥有自身创立的数据库对象,因此用户的概念在Oracle中非常重要。Oracle的用户可以用CREATE USER命令来创立。其语法是:
CREATE USER 用户名 IDENTIFIED BY 口令 [ACCOUNT LOCK|UNLOCK]
说明:
LOCK|UNLOCK创立用户时是否锁定,默认为锁定状态。锁定的用户无法正常的登录进行数据库操作。
比方创立一个用户jerry,密码是tom,默认非锁定,格式是:
SQL> CREATE USER jerry
2 IDENTIFIED BY tom
3 ACCOUNT UNLOCK;
Oracle在SQL*Plus中的命令以分号〔;〕结尾,代表命令完毕并执行,系统同时会把该命令保存在缓存中,缓存中只保存最近执行过的命令,如果重新执行缓存中的命令,直接使用左斜杠符号〔/〕。如果命令不以分号结尾,该命令只是写入缓存保存起来,但并不执行。
尽管用户成功创立,但是还不能正常的登录Oracle数据库系统,因为该用户还没有任何权限。如果用户能够正常登录,至少需要CREATE SESSION系统权限。
Oracle用户对数据库管理或对象操作的权利,分为系统权限和数据库对象权限。系统权限比方:CREATE SESSION,CREATE TABLE等,拥有系统权限的用户,允许拥有相应的系统操作。数据库对象权限,比方对表中的数据进行增删改操作等,拥有数据库对象权限的用户可以对所拥有的对象进行对应的操作。
还有一个概念就是数据库角色〔role〕,数据库角色就是假设干个系统权限的集合。下面介绍几个常用角色:
Ø CONNECT角色:主要应用在临时用户,特别是那些不需要建表的用户,通常只赋予他们CONNECT role。CONNECT是使用Oracle的简单权限, 拥有CONNECT角色的用户,可以与效劳器建立连接会话〔session,客户端对效劳器连接,称为会话〕。
Ø RESOURCE角色:更可靠和正式的数据库用户可以授予RESOURCE role。RESOURCE提供应用户另外的权限以创立他们自己的表、序列、过程〔procedure〕、触发器〔trigger〕、索引〔index〕等。
Ø DBA角色:DBA role拥有所有的系统权限----包括无限制的空间限额和给其他用户授予各种权限的能力。用户system拥有DBA角色。
一般情况下,一个普通的用户〔如scott〕,拥有CONNECT和RESOURCE两个角色即可进行常规的数据库开发工作。
可以把某个权限授予某个角色,可以把权限、角色授予某个用户。系统权限只能由DBA用户授权,对象权限由拥有该对象的用户授权,授权语法是:
GRANT角色|权限 TO 用户〔角色〕
比方给Jerry用户授权CONNECT和RESOURCE的方法是:
SQL> GRANT CONNECT TO jerry;
授权成功。
SQL> GRANT RESOURCE TO jerry;
授权成功。
SQL>
回收权限的语法是:
REVOKE 角色|权限 FROM 用户〔角色〕
修改用户的密码语法是:
ALTER USER 用户名 IDENTIFIED BY 新密码。
修改用户处于锁定〔非锁定〕状态
ALTER USER 用户名 ACCOUNT LOCK|UNLOCK
7. 本章总结
Ø Oracle是基于对象的关系型数据库,Oracle产品免费,效劳收费。
Ø Oracle安装后默认会有两个管理员用户〔system,sys〕和一个普通用户scott。
Ø Sql*plus是Oracle管理和数据操作的客户端工具。
Ø 客户端链接效劳器前,效劳器要启动监听效劳,并且客户端工具要安装Oracle客户端,并且在客户端要建立本地网络效劳名。
Ø Oracle效劳和监听启动后才能对数据库进行操作。
Ø 用startup命令启动数据库,用shutdown命令关闭数据库。
Ø Oracle的角色包括了一系列系统权限和普通对象权限,可以把权限授权给角色,把权限或者角色授权给用户。
8. 本章练习
1. 描述Oracle安装过程中的关键点。
2. 描述创立本地网络效劳名的步骤。
3. 描述Oracle主要效劳的作用。
4. Oracle使用什么命令才能启动和关闭。
5. 什么是Oracle权限和角色?他们的关系是什么?
6. 创立一个用户,并授权CONNECT和RESOURCE。
章节知识结构图
第2章
SQL数据操作和查询
主要内容
ü Oracle数据类型
ü SQL建表和约束
ü SQL对数据增删改
ü SQL查询
ü Oracle伪列
1. SQL简介
在第一学期的SQL Server学习中,已经知道,SQL是结构化查询语言〔Structured Query Language〕,专门用于数据存取、数据更新及数据库管理等操作。并且已经学习了用SQL语句对数据库的表进行增删改查的操作。
在Oracle开发中,客户端把SQL语句发送给效劳器,效劳器对SQL语句进行编译、执行,把执行的结果返回给客户端。Oracle SQL语句由如下命令组成:
Ø 数据定义语言〔DDL〕,包括CREATE〔创立〕命令、ALTER〔修改〕命令、DROP〔删除〕命令等。
Ø 数据操纵语言〔DML〕,包括INSERT〔插入〕命令、UPDATE〔更新〕命令、DELETE〔删除〕命令、SELECT … FOR UPDATE〔查询〕等。
Ø 数据查询语言〔DQL〕,包括根本查询语句、Order By子句、Group By子句等。
Ø 事务控制语言〔TCL〕,包括COMMIT〔提交〕命令、SAVEPOINT〔保存点〕命令、ROLLBACK〔回滚〕命令。
Ø 数据控制语言〔DCL〕,GRANT〔授权〕命令、REVOKE〔撤销〕命令。
目前主流的数据库产品〔比方:SQL Server、Oracle〕都支持标准的SQL语句。数据定义语言,表的增删改操作,数据的简单查询,事务的提交和回滚,权限的授权和撤销等,Oracle与SQL Server在操作上根本一致。
2. Oracle数据类型
Oracle数据库的核心是表,表中的列使用到的常见数据类型如下:
类型
含义
CHAR(length)
存储固定长度的字符串。参数length指定了长度,如果存储的字符串长度小于length,用空格填充。默认长度是1,最长不超过2000字节。
VARCHAR2(length)
存储可变长度的字符串。length指定了该字符串的最大长度。默认长度是1,最长不超过4000字符。
NUMBER(p,s)
既可以存储浮点数,也可以存储整数,p表示数字的最大位数〔如果是小数包括整数局部和小数局部和小数点,p默认是38为〕,s是指小数位数。
DATE
存储日期和时间,存储纪元、4位年、月、日、时、分、秒,存储时间从公元前4712年1月1日到公元后4712年12月31日。
TIMESTAMP
不但存储日期的年月日,时分秒,以及秒后6位,同时包含时区。
CLOB
存储大的文本,比方存储非结构化的XML文档
BLOB
存储二进制对象,如图形、视频、声音等。
表1 Oracle的局部数据类型
对应NUMBER类型的例如:
格式
输入的数字
实际的存储
NUMBER
NUMBER〔6,2〕
NUMBER〔4,2〕
输入的数字超过了所指定的精度,数据库不能存储
表2 Number例如
对于日期类型,可以使用sysdate内置函数可以获取当前的系统日期和时间,返回DATE类型,用systimestamp函数可以返回当前日期、时间和时区。
图1 sysdate和sysTimestamp
Oracle的查询中,必须使用“select 列… from 表〞的完整语法,当查询单行函数的时候,from后面使用DUAL表,dual表在系统中只有一行一列,该表在输出单行函数时为了select…from的语法完整性而使用。
3. 创立表和约束
Oracle创立表使用CREATE TABLE命令。创立约束使用如下命令:
ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束内容。
不管创立表还是约束,与SQL Server根本相同,注意:在Oracle中default是一个值,而SQL Server中default是一个约束,因此Oracle的default设置可以在建表的时候创立。比方创立一个学生信息表的约束。
代码演示:Oracle创立表和约束
CREATE TABLE INFOS
(
STUID VARCHAR2(7) NOT NULL, --学号 学号=‘S’+班号+2位序号
STUNAME VARCHAR2(10) NOT NULL, --姓名
GENDER VARCHAR2(2) NOT NULL, --性别
AGE NUMBER(2) NOT NULL, --年龄
SEAT NUMBER(2) NOT NULL, --座号
ENROLLDATE DATE, --入学时间
STUADDRESS VARCHAR2(50) DEFAULT '地址不详', --住址
CLASSNO VARCHAR2(4) NOT NULL --班号 班号=学期序号+班级序号
)
/ ①
ALTER TABLE INFOS ADD CONSTRAINT PK_INFOS PRIMARY KEY(STUID) ②
/
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_GENDER
CHECK(GENDER = '男' OR GENDER = '女') ③
/
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_SEAT
CHECK(SEAT >=0 AND SEAT <=50) ④
/
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_AGE
CHECK(AGE >=0 AND AGE<=100) ⑤
/
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_CLASSNO
CHECK((CLASSNO >='1001' AND CLASSNO<='1999') OR
(CLASSNO >='2001' AND CLASSNO<='2999')) ⑥
/
ALTER TABLE INFOS ADD CONSTRAINTS UN_STUNAME UNIQUE(STUNAME) ⑦
/
代码解析:
① 在Oracle代码中,“/〞执行缓存区中的语句,由于缓冲区中只存储一条刚刚保存过语句,由于每条语句没有用分号结尾,只是保存在缓冲区,因此每条语句后面都有单独一行“/〞。
② 创立一个主键约束。
③ 与 ④ ⑤ ⑥ ⑦一起创立各种check约束。其中⑦是唯一约束,表示该列值是唯一的,列中的值不能重复。
Oracle中创立外键约束与SQL Server相同。比方:现有成绩表定义如下:
代码演示:Oracle创立表和约束
CREATE TABLE SCORES
(
ID NUMBER , --ID ①
TERM VARCHAR2(2), --学期 S1或S2
STUID VARCHAR2(7) NOT NULL, --学号
EXAMNO VARCHAR2(7) NOT NULL, --考号 E+班号+序号
WRITTENSCORE NUMBER(4,1) NOT NULL, --笔试成绩
LABSCORE NUMBER(4,1) NOT NULL --机试成绩
)
ALTER TABLE SCORES
ADD CONSTRAINT CK_SCORES_TERM CHECK(TERM = 'S1' OR TERM ='S2')
/
ALTER TABLE SCORES
ADD CONSTRAINT FK_SCORES_INFOS_STUID FOREIGN KEY(STUID) REFERENCES INFOS(STUID) ②
/
代码解析:
① SQL Server中可以使用identify创立自动增长列,但是Oracle中的自动增长需要借助序列〔Sequence〕完成,在后面章节中讲解。
② Oracle中的外键约束定义。
4. 数据操纵语言〔DML〕
数据操纵语言〔DML〕用于对数据库的表中数据进行添加、修改、删除和Select…For Update(后面专门学习该查询)操作。比照一期学习过的SQL Server操作,接下来一一介绍在Oracle中的操作。
² 简单查询
数据查询是用SELECT命令从数据库的表中提取信息。SELECT语句的语法是:
SELECT *|列名|表达式 FROM 表名 WHERE 条件 ORDER BY 列名
说明:
1. *表示表中的所有列。
2. 列名可以选择假设干个表中的列名,各个列表中间用逗号分隔。
3. 表达式可以是列名、函数、常数等组成的表达式。
4. WHERE子句是查询的条件。
5. ORDER BY 要求在查询的结果中排序,默认是升序。
图2 数据查询
Oracle中可以把查询的结果根据结果集中的表结构和数据形成一张新表。语法是:
CREATE TABLE 表名 AS SELECT语句。
代码演示:根据结果集创立表
SQL> CREATE TABLE INFOS1 AS SELECT * FROM INFOS;
TABLE CREATED
使用上面命令创立的新表中,不存在任何约束,并且把查询的数据一起插入到新表中。如果只复制表结构,只需使查询的条件不成立〔比方where 1=2〕,就不会查询从出任何数据,从而复制一个表结构。
代码演示:复制表结构
SQL> CREATE TABLE INFOS2 AS SELECT * FROM INFOS WHERE 1=2;
TABLE CREATED
² 数据插入
用INSERT命令完成对数据的插入。INSERT命令的语法是:
INSERT INTO 表名(列名1,列名2……) VALUES (值1,值2……)
说明:
1. 列名可以省略。当省略列名时,默认是表中的所有列名,列名顺序为表定义中列的先后顺序。
2. 值的数量和顺序要与列名的数量和顺序一致。值的类型与列名的类型一致。
代码演示:向INFOS表和SCORES表中插入数据
SQL> INSERT INTO INFOS VALUES ( ①
2 's100102', '林冲', '男', 22, 2,
3 TO_DATE('2021-8-9 06:30:10',' YYYY-MM-DD HH24:MI:SS '), ②
4 '西安', '1001'
5 )
6 /
1 row inserted
SQL> INSERT INTO INFOS VALUES (
's100104','阮小二','男',26,3,SYSDATE,default,'1001'); ③
1 row inserted
SQL>COMMIT; ④
代码解析:
① 表名后面缺省了列名,默认是表Infos中的所有列名,values中的值要与表中列一一对应,包括顺序和数据类型的对应。在SQL*Plus中一条语句可以写在多行,那么从第二行开始,sqlplus会为每一行前面给出行号。
② 在Oracle中,日期是国际化的,不同的区域安装的数据库,默认的日期格式不同,因此为了程序便于移植,日期的输入要使用TO_DATE函数对日期格式化后输入,采用格式化字符串对日期进行格式化时,格式化字符串中字符不区分大小写,常见的格式化字符如下:
1. yyyy表示四位年份
2. mm表示两位月份,比方3月表示为03
3. dd表示两位日期
4. hh24表示小时从0-23,hh12也表示小时从0-11。
5. mi 表示分钟
6. ss表示秒
③ 在遇到存在默认值的列时,可以使用default值代替。
④ commit是把用户操作〔添加、删除、修改操作〕提交,只有提交操作后,数据才能真正更新到表中,否那么其他用户无法查询到当前用户操作的结果。
在Oracle中,一个INSERT命令可以把一个结果集一次性插入到一张表中。使用的语句是:INSERT INTO 表 SELECT子句,如下例如:
代码演示:INSERT向表中插入一个结果集
SQL> INSERT INTO INFOS2 SELECT * FROM INFOS;
5 rows inserted
在这种语法下,要求结果集中每一列的数据类型必须与表中的每一列的数据类型一致,结果集中的列的数量与表中的列的数量一致。比方表INFOS2,该表的结构与INFO表一样,那么可以把INFO表中的所有记录一次性插入到INFOS2表中。
Oracle的简单查询和SQL Server一样都可以在查询列中使用常量,如图:
图3 Select中的常量
可以使用刚刚的做法,把该结果集中的数据插入到表INFOS中。
代码演示:INSERT向表中插入一个常量结果集
SQL> INSERT INTO INFOS
SELECT 's100106','卢俊义','男',23,5,
TO_DATE('2021-8-9 08:00:10','YYYY-MM-DD HH24:MI:SS'),
展开阅读全文