1.1Oracle数据库系统的特点
1.1.1Oracle的发展史
1977年,Oracle诞生。现CEO劳伦斯.埃里森 Lawrence (Larry) J. Ellison与女上司Robert Miner创立“软件开发实验室”(Software Development Labs)。当时IBM发表“关联数据库”的论文,埃里森以此研发新数据库,名为Oracle。1979年,公司前往硅谷,更名为“关系软件公司”(Relational Software Inc.,RSI)。1983年,为了突出公司的核心产品,RSI再次更名为Oracle。2002年4月26日,正式启用“甲骨文”作为公司的中文注册商标。
Oracle是数据库管理系统,是Oracle公司的核心产品。Oracle在管理信息系统、企业数据处理、因特网及电子商务等领域使用非常广泛。由于其在数据安全性与完整性控制方面的优越性能,以及跨操作系统、跨硬件平台的数据互操作能力,使得越来越多的用户将Oracle作为其应用数据的处理系统。
Oracle数据库系统的主要版本有Oracle 8i、Oracle 9i、Oracle 10g,最新版本是Oracle 11g。其中后缀i的含义是Internet,表示Oracle公司进军互联网。后缀g的含义是Grid,表示支持网格计算。本书中使用的版本是Oracle 11g。
1.1.2Oracle的功能特点
Oracle数据库基于“客户/服务器”(Client/Server,C/S)系统结构。此概念将应用程序功能处理划分到两个系统中,即客户端和服务器端。与用户相关的活动在客户端完成,数据库相关的活动在服务器端完成。
Oracle数据库的主要特点如下:
Ø数据安全性和完整性方面性能优越。
Ø网格计算,Oracle能够把许多低成本的设备集成起来,为用户提供高性能的共享计算能力。
Ø具有高可移植性,能够在主流的操作系统和硬件平台上运行。
1.2如何启动Oracle数据库
我们在学习sql Server的时候,为了正常使用sql Server数据库,会打开Windows操作系统的“服务”组件启动sql Server相应的系统服务。那么为了使用Oracle,该如何启动Oracle数据库呢?
实际上,Oracle数据库库的启动和关闭是日常工作之一。Windows操作系统下的Oracle服务以后台服务进程的方式来进行管理。服务是在数据库创建过程创建的,并且与数据库关联,启动或关闭与Oracle数据库相关的服务,即完成Oracle数据库的启动和关闭。一个数据库有一项或多项服务与之关联。如果要查看Oracle服务,可以选择【开始】→【设置】→【控制面板】→【管理工具】→【服务】来打开“服务”窗口,如图1.21.1所示。
ØOracleOraDb11g_home1TNSListener
OracleOraDb11g_homeTNSListener服务是Oracle服务器的监听程序。客户端必须先连接驻留在数据库服务器上的监听程序,才能连接数据库服务器。监听器接收从客户端发出的请求,然后将请求传递给数据库服务器,以此建立客户端与服务器的连接。一旦建立了连接,客户端便可以与Oracle数据库服务器直接通信。
ØOracleServiceSID
OracleServiceSID服务是为SID(系统标识符)数据库示例创建的。其中,SID是在安装Oracle 11g时输入的数据库名称。该服务是Oracle的核心服务,启动Oracle实例必须启动该服务。
ØOracleJobSchedulerSID
OracleJobSchedulerSID服务是任务调度服务,负责按预先设置的时间周期性地执行某项用户自定义的功能,从而实现Oracle服务器的自动管理功能。
ØOracleDBConsoleSID
OracleDBConsoleSID服务负责在Windows平台下启动Oracle企业管理器。Oracle 11g企业管理器是一个功能完善的Oracle数据库管理工具,可以管理本地数据库环境和网络环境。如图1.21.2所示:
注意
Oracle服务器端,至少应该启动OracleOraDb11g_homeTNSListener和OracleServiceSID两个服务。
1.1如何登录Oracle数据库
启动Oracle数据库之后,就可以开始使用Oracle数据库来完成我们需要的数据处理。启动的内部过程比较复杂,本章暂且不仔细研究,先掌握在正确启动Oracle数据库之后,使用sql Plus和PL/sql Developer两款常用工具登录到数据库。
Oracle默认创建多个用户,其中包括SYS、SYSTEM和SCOTT。
ØSYS用户
SYS用户是Oracle中的超级用户,主要用于维护系统信息和管理示例,数据库中数据字典的所有表和视图都存储在SYS中。
ØSYSTEM用户
SYSTEM用户是Oracle中默认的管理员,它拥有DBA权限。该用户拥有Oracle管理工具使用的内部表和视图,通常通过SYSTEM用户管理Oracle数据库的用户、权限和存储等。
ØSCOTT用户
SCOTT是Oracle数据库的示例用户。SCOTT用户包含4张示范表,该用户的默认口令为tiger。
注意
建议日常的管理任务使用SYSTEM用户登录Oracle数据库服务器。如果需要执行备份、恢复、更改数据库的任务,则必须以SYS用户登录Oracle数据库服务器。
1.1使用sql命令管理数据表
当能够正确启动并登录Oracle数据库之后,我们开始体验Oracle对数据的管理。那么在Oracle当中,我们如何新建数据表,标准的数据类型都有哪些呢?
1.1.1回顾sql语言
sql(结构化查询语言)是一种在关系型数据库中定义和操作数据的标准语言,是应用程序与数据进行交互操作的接口。
(1)数据定义语言(Data Definition Language,DDL):用于创建、修改和删除数据库对象,如CREATE TABLE、ALTER TABLE、DROP TABLE等。DDL语句可以自动提交事务。
(2)数据操纵语言(Data Manipulation Language,DML):用于操纵数据库,包括INSERT、UPDATE、DELETE、SELECT等。
(3)数据控制语言(Data Control Language,DCL):用于执行授予权限和撤销权限的操作,包括GRANT(授予权限)、REVOKE(撤销权限)两条命令。DCL语句可以自动提交事务。
(4)事务控制语言(Transactional Control Language,TCL):用于维护数据的一致性,包括COMMIT(提交事务)、ROLLBACK(回滚事务)和SAVEPOINT(设置保存点)3条语句。
1.1.2Oracle常用数据库数据类型
Oracle 支持的数据类型多达几十种。其中,常用数据类型大致可以分为字符类型、数字类型、日期类型、大对象类型等。以下将讲解常用、典型的数据类型。
1.字符类型
(1)CHAR类型
CHAR表示固定长度字符串,长度不足时使用空格补充,最多可以存储2000个字节。CHAR类型区分中英文,中文在CHAR中占两个字节,而英文只占一个字节,所以CHAR(20)只能存20个字母或10个汉字。
(2)VARCHAR2类型。
VARCHAR2表示可变长度字符串,最多可以存储4000个字节。在定义该数据类型时,应该指定其大小。与CHAR类型相比,使用VARCHAR2可以节省磁盘空间。例如,某列数据定义了VARCHAR(10)的数据类型,当用户输入5个字节的字符时,该列值的长度将是5个字节,而非10个,但该列值最大长度不能超过10个字节。
2.数值类型
NUMBER类型可以存储正数、负数、零、定点数和精度为38位的浮点数,格式为:NUMBER(M,N),其中M表示精度,代表数字的总位数;N表示小数点右侧数字的位数。以下将演示NUMBER数据类型的用法:
(1)size number(2):表示size列的值只能是整数,并且最多只能取两位整数。
(2)price number(6,2):表示price列的整数部分最多只能是4位,小数部分最多只能保留两位。
3.日期类型
(1)DATE类型。
DATE数据类型用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日。DATE类型的长度是7,7个字节分别表示世纪、年、月、日、时、分、秒。
(2)TIMESTAMP类型
TIMESTAMP数据类型用于存储日期的年、月、日以及时间的小时、分和秒值。其中,秒的数据值精确到小数点后6位,该数据类型同时包含时区信息。
4.大对象类型
(1)CLOB大字符串对象类型
CLOB(Character Large Object)数据类型用于存储可变长度的字符数据,最多可存储4GB的数据。该数据类型用于存储VARCHAR2类型不能存储的长文本信息。
(2)BLOB大二进制类型
BLOB(Binary Large Object)数据类型用于存储较大的二进制对象,如图片、视频剪辑和声音剪辑等,最多可存储4GB的数据。
注意
Oracle也支持INTEGER、FLOAT、DOUBLE等数值类型,但建议采用Oracle自身的NUMBER数据类型;Oracle也支持VARCHAR字符类型,但建议采用Oracle自身的VARCHAR2类型。
1.1.3在SCOTT方案中创建数据库表
Oracle中,可以使用CREATE TABLE命令创建数据库表,具体语法如下。
CREATE TABLE[<方案名>.]<表名> ( <列名1><数据类型>, <列名2><数据类型>, …… <列名n><数据类型> ) |
问题:
某移动通信公司需要建设网上营业厅,需要使用Oracle数据库存储用户个人信息,内容包括:机主姓名、手机号码、地市归属、入网时间、消费品牌名称(如动感地带)等基本信息。如何创建数据库表以保存个人信息呢?
以SCOTT用户登录sql Plus,输入示例21.1的sql代码。
示例1.1
CREATE TABLE PERSONAL_INFO
(
OWNER_NAME VARCHAR2(20) NOT NULL,
TEL_CODE VARCHAR2 (15) NOT NULL,
CITY VARCHAR2 (20) NOT NULL,
NETWORK_DATE DATE NOT NULL,
BRAND_NAME VARCHAR2 (20) NOT NULL
);
执行后,使用DESC 命令查看表结构。运行结果如图1.4.11.7所示:
图1.4.11.7创建个人信息表的显示结果
我们在之前学习sql Server知识的时候,已经学习过对表字段添加各种约束,例如唯一约束,在我们新建的个人信息表中,TEL_CODE(手机号码)需要添加唯一约束,怎么实现呢?修改表结构,并添加唯一约束,如示例1.2所示:
示例1.2
sql> ALTER TABLE PERSONAL_INFO ADD CONSTRAINT U_TEL_CODE UNIQUE (TEL_CODE);
sql>COL COLUMN_NAME FOR A20;
该代码表示在接下来的查询中,列“COLUMN_NAME”按照20个字符宽度显示。
sql> SELECT CONSTRAINT_NAME,COLUMN_NAME FROM USER_CONS_COLUMNS WHERE TABLE_NAME='PERSONAL_INFO';
该代码使用了数据库视图USER_CONS_COLUMNS,此视图存储了数据库表中所有的约束信息,对应的列描述见表1-41-1。
表1-41-1 列信息
列名 |
描述 |
CONSTRAINT_NAME |
约束名称 |
COLUMN_NAME |
约束所在的列名称 |
TABLE_NAME |
约束所在的表名称 |
通过对图1.4.21.8的观察,发现在TEL_CODE列上,建立了U_TEL_CODE唯一约束。
1.1使用sql命令管理序列
已经创建了数据库表,下一步就要录入数据。需要解决的一个问题是:个人信息表没有主键,如果有一ID字段并能够实现自动编号功能,就方便多了。Oracle中是如何解决主键自动增长的呢?
Oracle并没有类似sqlServer中的Identity来定义主键自增属性。如果要实现主键自增,常用的方法是定义一个序列Sequence,然后在插入数据记录时取序列中的下一个值nextval即可。
序列(Sequence)是Oracle提供的的用于产生一组等间隔整型数值的数据库对象,可以通过在插入语句中使用序列值来实现主键自增。
Oracle中的CREATE SEQUENCE命令用于创建序列。
CREATE SEQUENCE <序列名称> [START WITH 初始值 ] [INCREMENT BY 步长 ] [MINVALUE 最小值 | NOMINVALUE ] [MAXVALUE 最大值 | NOMAXVALUE ] [CYCLE | NOCYCLE ] [CACHE 预分配序列个数 | NOCACHE] [ORDER | NOORDER] |
说明如下:
ØSTART WITH 用于指定序列的起始值。
ØINCREMENT BY 用来指定序列的增量,如果取负值,则为递减序列。
ØMINVALUE | NOMINVALUE 指定序列是否有最小值。
ØMAXVALUE | NOMAXVALUE 用来说明序列是否有最大值。
ØCYCLE | NOCYCLE 用于指定序列值达到最大之后,是否重新从最小值开始产生。
ØCACHE | NOCACHE 用来指定是否在缓存中保存预先分配的序列值,如果选择CACHE,可以提高获取序列的速度。
ØORDER | NOORDER 是否确保序列值是否唯一和有序。
下面定义SEQ_PERSONAL_INFO序列用来实现PERSONAL_INFO表的主键自动编号,如示例1.3所示。
示例1.3
CREATE SEQUENCE SEQ_PERSONAL_INFO
START WITH 1
INCREMENT BY 1
NOMAXVALUE
CACHE 20;
使用序列时,需要用到序列的两个伪列NEXTVAL和CURRVAL,其中NEXTVAL返回序列的下一个值,而CURRVAL返回序列的当前值。
至此,我们只需要修改PERSONAL_INFO表,添加ID列,之后就可以使用序列实现自增了。如示例1.4所示。
示例1.4
ALTER TABLE PERSONAL_INFO ADD ID NUMBER PRIMARY KEY;
INSERT INTO PERSONAL_INFO VALUES('张三','19900000000','北京','18-7月-2011',
'动感地带',SEQ_PERSONAL_INFO.NEXTVAL);
INSERT INTO PERSONAL_INFO VALUES('李四','19900007777',
'全球通',SEQ_PERSONAL_INFO.NEXTVAL);
首先修改了PERSONAL_INFO表,添加了主键字段ID。然后往表中新增了2条记录。
1.1使用sql命令完成数据增删改查
在本章前一节的内容中,我们接触了INSERT命令,会发现与之前学习的sqlServer操作很相似。事实上,虽然Oracle数据库功能非常强大,体系结构与其他数据库有较大差异,但其同样遵循标准的sql语言。因此,对于修改和表数据,删除表数据不再在过多介绍,只给出语法。
UPDATE 表名 SET 列名=值 [,列名=值 ,…… ] [ WHERE 条件 ] DELETE [ FROM ] 表名 [ WHERE 条件 ] |
使用SELECT编写子查询
在数据库数据操作语句(DML)中,查询是较复杂的一类操作,也是体现数据库技能掌握是否良好的重要指标。在涉及基于数据库编程方面,查询也是至关重要的知识。本节我们着重讲解Oracle数据库数据查询的知识。
1,.SCOTT示例方案简介
Oracle数据库安装的时候会提示是否安装示例数据库,如果选择安装了,会提供SCOTT方案供学习Oracle数据库使用。SCOTT方案有表如1-6-11-2所示的数据表。
表1-1-12
表名 |
描述 |
EMP |
雇员表 |
DEPT |
部门表 |
SALGRADE |
薪水等级表 |
BONUS |
奖金表 |
2,.单行子查询
子查询是指嵌套在其他sql语句中的查询,它可以出现在SELETE、WHERE、FROM等语句中。使用子查询,可以用一系列简单的查询构成复杂的查询,从而增强sql语句的功能。
单行子查询不向外层查询返回记录或者只返回一条记录。子查询可以放在SELECT语句的WHERE或FROM等子句中。
示例1.5要求查询工资最高的雇员信息。
示例1.5
SELECT EMPNO,ENAME,SAL,HIREDATE FROM EMP
WHERE SAL= (SELECT MAX (SAL) FROM EMP);
多行子查询
多行子查询可以向父查询返回多行记录。在WHERE语句中使用多行子查询时,必须使用多行运算符(IN、NOT IN、EXISTS、NOT EXISTS、ALL和ANY等)。例如,查询工资高于部门20中所有员工的雇员信息,先利用子查询获得部门20中所有员工的工资,再利用父查询获得其工资大于等于这些员工的雇员信息。
示例1.6
SELECT ENAME,JOB,DEPTNO FROM EMP
WHERE SAL >= ALL (SELECT SAL FROM EMP WHERE DEPTNO=20);
相关子查询
相关子查询是指引用了父查询中某些列的子查询。在相关子查询中,父查询所处理的每一行都先被传递给子查询。子查询依次处理这些行,即将其应用到子查询,如果满足子查询中的条件,则父查询中的这一行就是最终结果集中的一行,直到父查询中的每一行都处理完成为止。一般可以在SELECT或WHERE语句中使用相关子查询。例如,查询负责管理其他雇员的管理员信息,父查询提供一个雇员编号(EMPNO)给子查询,子查询利用该雇员编号查询是否存在一个管理者(MGR)与父查询提供的雇员编号(EMPNO)对应。若存在,则说明该EMPNO就是管理者,将其显示出来。
示例1.7
SELECT EMPNO,DEPTNO,SAL FROM EMP A
WHERE EXISTS (SELECT * FROM EMP B WHERE B.MGR = A.EMPNO);
添加数据
(1)添加一条语句
sql>insert into dept(deptno,dname,loc) values (60,’市场部’,’Beijing’);
插入多行
将SELECT语句检索出来的所有数据行都插入到表中.这条语句通常在从一个表向另一个表快速复制数据行.
sql> create table dept1(deptno number(2) primary key,dname varchar2(14),loc varchar2(13));
sql> insert into dept1 select * from dept;
修改语句
sql> updatedeptsetdname= ‘国内市场部’,loc=’HongKong’wheredeptno= 60;
删除语句
sql> delete from dept where deptno = 60 or dname = ‘销售部’;
Delete语句中如果没有where子句表示删除表中的所有数据
8.使用Truncate 删除所有数据
sql> truncate table shopinfo;
使用delete语句可以删除表中的全部数据,但是delete操作会被记录在日志文件中,
Rownum是一个伪列,它会根据返回的记录生成一个序列化的数字。可以使用ROWNUM列返回查询结果集中前N条记录
sql> select rownum,deptno,ename,job,mgr,hiredate from emp where rownum<10
分页实现
比如每5行为一页,现在要显示第2页,就是要显示第6行到第10行
sql> select e.* from
( select rownum r,hiredate from emp ) e
Where r>5 and r<11;
10. rowid伪列
rowid就是唯一标志记录物理位置的一个id,内容是当前行位于哪个文件,块,行的详细信息。
sql> select rownum,loc from dept
dual虚表
dual是系统定义的表,只有一行一列数据. 写成select 100*200 from dual 这里的dual只是为了完善语义的。对于虚表(dual)来说,其中的列往往是不相关的或无关紧要的。
sql> select 5*9 from dual;
sql> select sysdate from dual;
;1.1使用JDBC访问Oracle数据
在第二学期,我们详细的学习了JDBC相关知识,在这里我们简要的回顾一下关键步骤和核心对象。
Ø第一步,加载驱动。关键代码:Class.forName(“……”);
Ø第二步,建立连接。关键代码:DriverManager.getConnection(“……”);
Ø第三步,执行sql。核心对象:PreparedStatement
Ø第四步,处理结果。核心对象:ResultSet
Ø第五步,释放资源。
本章前部分,新建了个人信息数据库表,现在需要查询北京地区动感地带用户数量。需要使用JDBC访问Oracle数据库实现。
示例1.8
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.sqlException; import java.util.Date; public class PagingEmpInfo { public static void main(String[] args) { showPagingEmp(2,5); } /** * 分页查询员工信息 * @param pageNum 第几页 * @param pageSize 每页记录数 * */ public static void showPagingEmp(int pageNum,int pageSize){ Connection con = null; PreparedStatement stmt = null; ResultSet rs = null; //数据库连接信息 String driverClass = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String user = "scott"; String password = "tiger"; try { //加载驱动 Class.forName(driverClass); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { //建立数据库连接 con = DriverManager.getConnection(url,user,password); //准备将要执行的sql语句,?号表示占位符,执行是会被具体值替代 String sql = "select e.* from "+ "(select rownum r,hiredate from emp) e"+ " where r> ? and r<?"; //创建语句对象 System.out.println(sql); stmt = con.prepareStatement(sql); //替换占位符 int begin = (pageNum-1)*pageSize; int end = pageNum*pageSize+1; stmt.setInt(1,begin); stmt.setInt(2,end); //执行sql语句,得到结果集 rs = stmt.executeQuery(); //处理数据 while(rs.next()){ int rownum = rs.getInt(1); String ename = rs.getString(2); String job = rs.getString(3); Date hiredate = rs.getDate(4); System.out.println(rownum+"\t"+ename+"\t"+ job+"\t"+hiredate); } } catch (sqlException e) { e.printStackTrace (); }finally { //释放数据库连接 if(con != null){ try { con.close (); } catch (sqlException e) { e.printStackTrace (); } } } } }
执行结果如图1.1.24所示
图1.1.24北京动感地带用户数
从示例1.78可以看出,使用JDBC访问Oracle数据库的步骤与访问sqlServer的步骤相同,只是具体连接参数不同。数据库驱动类名称字符串为“oracle.jdbc.driver.OracleDriver”,数据库连接字符串为“jdbc:oracle:thin:@localhost:1521:orcl”,其中“localhost”是Oracle服务器IP地址或者机器名,“1521”是监听端口,“orcl”是数据库实例示例名称。
Ø本章总结
ØOracle 11g实例启动必须启动OracleOraDb11g_home1TNSListener,OracleServiceSID服务
ØOracle内存可分为系统全局区(SGA)和程序全局区(PGA)
ØSYS用户是Oracle中的超级用户,SYSTEM是Oracle中默认的管理员,它拥有DBA权限,SCOTT是Oracle数据库的一个示范帐户
ØOracle管理工具主要包括sql*PLUS、PL/sql Developer和Oracle Enterprise Manager
Ø使用JDBC访问Oracle数据库
Ørownum是一个伪列,它会根据返回的记录生成一个序列化的数字,rowid就是唯一标志记录物理位置的一个id,内容是当前行位于哪个文件,块,行的详细信息。
ØOracle 支持的数据类型多达几十种。其中,常用数据类型大致可以分为字符类型、数字类型、日期类型、大对象类型等
Ø序列(Sequence)是Oracle提供的的用于产生一组等间隔整型数值的数据库对象,可以通过在插入语句中使用序列值来实现主键自增。Oracle中的CREATE SEQUENCE命令用于创建序列
任务实训部分
1:使用sql命令创建数据表
训练技能点
Ø熟练使用Oracle数据类型
Ø熟练使用CREATE TABLE命令创建表
需求说明
在Oracle中使用sql命令创建一个联系人表,表结构如下所示。
表1-2-1 联系人表
数据类型 |
约束 |
|
id |
number |
主键,自增 |
name |
varchar2 |
非空 |
address |
varchar2 |
|
phone |
varchar2 |
实现步骤
(1)启动相关Oracle服务
(3)使用CREATE TABLE命令按照表1-2-1创建表
2:创建序列
训练技能点
Ø为联系人表的id字段创建序列
Ø在insert语句中使用序列
需求说明
联系人表的id字段是自动增长列,所以在Oracle中需要创建序列,要求从1开始,每次自增1。
实现步骤
(1)使用CREATE SEQUENCE命令创建序列
(2)使用insert命令向联系人表中插入测试数据
3:使用PL/sql Developer工具
训练技能点
Ø使用PL/sql Developer工具登录Oracle数据库
Ø使用PL/sql Developer工具创建表
Ø使用PL/sql Developer工具创建序列
Ø使用PL/sql Developer工具插入测试数据
需求说明
前两个实训任务都是通过sql Plus工具实现的,现在要求把联系人表删掉并使用PL/sql Developer工具实现前两个实训任务
4:JDBC连接Oracle数据库
训练技能点
ØJDBC连接Oracle数据库
ØJDBC查询数据
需求说明
使用JDBC连接联系人表,并查询表中的所有数据显示到JSP页面上
实现步骤
(1)创建DAO类,在该类中实现两个方法:连接数据库和查询数据
巩固练习
一、选择题
1.在使用Oracle数据库时至少需要启动()服务。
A.OracleOraDb11g_home1TNSListener
B.OracleServiceSID
C.OracleDBConsoleSID
D.OracleJobSchedulerSID
2.下列()不是Oracle默认的用户。
A.system
B.sys
C.scott
D.sa
3.关于jdbc:oracle:thin:@localhost:1521:orcl说法正确的是()。
A.1521是Oracle的默认端口号
B.orcl是表名
C.localhost表示应用程序所在的机器
4.下列()用于支持OEM服务。
A.OracleOraDb11g_home1TNSListener
B.OracleServiceSID
C.OracleDBConsoleSID
D.OracleJobSchedulerSID
5.下列关于序列的说法正确的是()。
A.序列一旦创建,就可以立即使用CURRVAL列
B.在引用序列的CURRVAL列前,必须引用过一次NEXTVAL列
C.可以修改序列中的起始值
D.序列的初始值可以从0开始
二、上机练习
在Oracle中使用sql Plus创建新闻表news,表结构如下所示。
表1-3-1 新闻表
约束 |
||
id |
number |
主键,自增 |
title |
varchar2 |
非空 |
content |
varchar2 |
|
author |
varchar2 |
创建好后在PL/sql Developer工具中插入测试数据。
Oracle扩展进阶
sqlplus常用命令
show user
2.建立连接
connect scott/tiger
connect sys/admin as sysdba
3.断开连接
disconnect
exit
quit
Start 或者@d:/aa.sql
6.编辑上一次的sql语句
ed
7.保存输入的代码
Spool
spool d:/b.sql
spool off
8.设置行大小(linesize) 默认80字符
set linesize 150
9.显示行大小
show linesize
10.设置页大小,显示页大小
set pagesize 500
show pagesize
11.select * from scott.emp
12.desc user_tables
13.select table_name from user_tables;
16.SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME = ‘@H_352_3012@T1’