第2篇 PL/SQL基础
第3章 数据表的基本操作
第4章 表中数据的基本操作
第5章 数据的基本查询
第6章 查询中函数的使用
第7章 查询中特殊的转换函数
第8章 数据表的高级查询
第3章 数据表的基本操作
在Oracle数据库中数据表是存放在表空间中的,每一个表空间都可以存放多个数据表。如果没有指定创建表的表空间,默认是存放在SYSTEM表空间中的。例如,一个公司数据库的表空间中,包括雇员表、部门表、库存表、销售表、工资表等。本章将学习数据表的创建、修改以及删除等基本操作。
3.1 创建表
在Oracle中创建表有两种方式:一种是直接使用PL/SQL的语法创建;另一种是使用可视化工具创建,比如SQL Developer、企业管理器等。本节主要介绍使用CREATE命令创建表的操作。本章的最后一节将介绍如何使用企业管理器来创建表。
3.1.1 创建表的语法
数据表主要包括以下几个组成部分。
◆ 字段名(列名):可长达128个字符,包含中文、英文字母、下画线、#号、货币符号(¥)及AT符号(@),且同一表中不许有重名列。
◆ 字段数据类型:可采用的数据类型参见3.1.2节的介绍。
◆ 字段的长度、精度和小数位数:字段的长度是指字段所能容纳的最大数据量,但对不同的数据类型来说,长度对字段的意义可能有些不同。
● 对字符串与Unicode数据类型而言,长度代表字段所能容纳字符的数目,因此它会限制用户所能输入的文本长度。
● 对数值类的数据类型而言,长度则代表字段使用多少个字节来存放数字。
● 对binary、varbinary、image数据类型而言,长度代表字段所能容纳的字节数。
精度是指数中数字的位数,包括小数点左侧的整数部分和右侧的小数部分;小数位数则是指数字小数点右侧的位数。例如,数字12345.678,其精度为8,小数位数为3。所以,只有数值类的数据类型,才有必要指定精度和小数位数。
与SQL标准语法相同,在PL/SQL中,创建一个新表可以使用CREATE TABLE命令。在Oracle 11g R2中,该语句的完整语法非常复杂,可选项很多,这里只简单介绍其最基本的创建语法,如下所示。
CREATE TABLE table_name ( column_name datatype, column_name datatype; … )
在CREATE TABLE命令后,指明创建表的名称,接着分别定义表中各列的名称、数据类型等。表中各列的定义在括号中完成,且各列之间以逗号隔开。本语法没有指定数据表存放的表空间,在默认情况下是存放在SYSTEM表空间中的。
3.1.2 常用的数据类型
在Oracle 11g R2中提供的数据类型大致有23种,可以简单地分成数字型、字符型、日期型和其他类型4种。下面分别用表格的形式介绍每种数据类型的写法和取值范围,以方便在下一节中创建表时使用。
1.数字型
数字型就是用来存放数的,包括整数和小数,主要用到的数据类型是number类型和float类型,如表3.1所示。
表3.1 数字型
数字型除了上面2种之外,定义数据类型时如果使用decimal类型,Oracle会自动把该类型的数据转换成number类型的数据。
2.字符型
字符型是用来存放字符和字符串的,在Oracle数据库中主要有varchar2、nvarchar2、char、nchar、long等类型,如表3.2所示。
表3.2 字符型
3.日期型
日期型是用来存放表示日期的数据的,以日期格式存放。在实际编程时,需要在数据库中存放日期型的数据时,也经常使用varchar2类型来表示。在Oracle数据库中,日期型主要有date和timestamp类型,其中date类型是比较常用的类型。
表3.3 日期型
4.其他数据类型
除了上面讲的3种常用的数据类型外,还有一些特殊的类型,比如:存放大数据的blob类型和clob类型,这两种数据类型经常用于存放XML类型的数据或图片信息,如表3.4所示。
表3.4 其他数据类型
3.1.3 创建表实例
下面就利用创建表的语法完成下面的实例。
【实例3-1】创建简单的BOOKINFO表。
本实例将采用最基本的创建语法创建BOOKINFO表,表结构如表3.5所示。
表3.5 图书信息表(BOOKlNFO)
相关脚本如下:
01 CREATE TABLE BOOKINFO 02 ( 03 BOOKID INT, 04 BOOKNAME CHAR, 05 PUBLISH VARCHAR2(20), 06 PUBDATE VARCHAR2(20), 07 PRICE DECIMAL, 08 AUTHOR CHAR, 09 STORE INT, 10 READER INT, 11 REMARKS VARCHAR2(50) 12 );
通过上面语句,即可在数据库中创建一个名为BOOKINFO的数据表。
【执行效果】
在SQL*Plus中的执行效果如图3.1所示。
图3.1 创建BOOKlNFO表
在创建表时,必须要保证该表名在表空间中不存在,否则数据库会提示创建失败。如果需要创建已经存在的表,必须先将原来的表删除,再重新创建。
【实例3-2】创建指定默认值的表。
使用CREATE TABLE命令创建表时,可以为每列指定默认值。即当向表中插入数据,且不指定该列的值时,系统会自动地采用设定的默认值,该默认值是通过DEFAULT关键字来实现的。其语法如下:
<column name> <data type> DEFAULT <default value>
【语法说明】
◆ column name:列的名称。
◆ data type:列的数据类型。
◆ DEFAULT:关键字后面指定该列的默认值,无论<default value>使用什么类型的值,都必须符合在列定义中指定的数据要求。如果使用char数据类型,那么指定的默认值也必须是该数据类型的。
相比【实例3-1】,本实例创建BOOKINFO表,并把Price和store两个字段指定为默认值。代码如下:
01 CREATE TABLE BOOKINFO 02 ( 03 BOOKID INT 04 BOOKNAME CHAR, 05 PUBLISH VARCHAR(60), 06 PUBDATE DATE, 07 PRICE DECIMAL(7,2) DEFAULT 0.0, 08 AUTHOR CHAR(40), 09 STORE INT DEFAULT 0 NOT NULL, 10 READER INT, 11 REMARKS VARCHAR2(50) 12 );
【执行效果】
在SQL*Plus中的执行效果如图3.2所示。
图3.2 创建指定默认值的表
3.2 约束
约束就是用来束缚表中数据的,使表中的数据满足某种条件。在Oracle数据库中一共有5种约束:主键约束、外键约束、唯一约束、检查约束、非空约束。本节将分别讲解每一种约束的使用方法。
3.2.1 约束的类型
主键约束、外键约束、唯一约束、检查约束、非空约束是Oracle数据表的5个约束,下面详细解释一下。
◆ 主键约束:用来唯一标识表中一个列,一个表中的主键约束只能有一个,但是可以在一个主键约束中包括多个列,也称为联合主键。
◆ 外键约束:用来约束两个表中列之间的关系。
◆ 唯一约束:用来唯一标识表中的列。与主键约束不同的是,在一个数据表中可以有多个唯一约束。
◆ 检查约束:用来约束表中列的输入值的范围,比如在输入性别时,要求在数据库中只能输入男或者女,就可以使用检查约束来约束该列。
◆ 非空约束:约束该列一定要输入值。
3.2.2 创建一个带检查约束的表
使用PL/SQL语句创建检查约束的语法如下:
CONSTRAINT constraint_name CHECK(condition)
【语法说明】
◆ CONSTRAINT:关键词。
◆ constraint_name:约束名称。
◆ condition:用来唯一标识表中一个列,一个表中的主键约束只能有一个,但是可以在一个主键约束中包括多个列,也称为联合主键。例如,给“性别”字段加一个约束,要求只能输入男或者女。假设输入性别的字段名为“性别”,条件可以写成“性别='男'OR性别='女'”。
【实例3-3】在创建BOOKINFO表时,给图书价格加上一个检查约束,要求图书价格在10元到100元之间。
在【实例3-1】的基础上,给图书价格加上检查约束,相关脚本如下:
01 CREATE TABLE BOOKINFO 02 ( 03 BOOKID INT, 04 BOOKNAME CHAR, 05 PUBLISH VARCHAR2(20), 06 PUBDATE DATE, 07 PRICE DECIMAL, 08 AUTHOR CHAR, 09 STORE VARCHAR2(1), 10 READER INT, 11 REMARKS VARCHAR2(50), 12 CONSTRAINT CK_PRICE CHECK (PRICE>=10 AND PRICE<=100) 13 );
【代码解析】
◆ 以上脚本表示创建BOOKINFO表,并且带有检查约束CK_PRICE。
【执行效果】
通过上面代码就可以在数据库中创建一个带检查约束的数据表,效果如图3.3所示。
图3.3 创建一个带检查约束的表
3.2.3 创建一个带非空约束的表
给表中的列设置了非空约束,就意味着在向数据表添加数据时,该列是必须要添加的。非空约束就是在创建表时,在字段名的后面添加上NOT NULL。
【实例3-4】在创建BOOKINFO表时,给图书名称加上一个非空约束。
实际上,在创建表时,可以直接在BOOKNAME列名后面加上NOT NULL,代码如下:
01 CREATE TABLE BOOKINFO 02 ( 03 BOOKID INT NOT NULL, 04 BOOKNAME CHAR NOT NULL, 05 PUBLISH VARCHAR2(20), 06 PUBDATE VARCHAR2(20), 07 PRICE DECIMAL, 08 AUTHOR CHAR, 09 STORE VARCHAR2(1), 10 READER INT, 11 REMARKS VARCHAR2(50) 12 );
【代码解析】
◆ 该脚本表示创建BOOKINFO表,并带有非空约束。
◆ 在给列设置成非空约束时,可以一起给表中的多个列设置非空约束。
【执行效果】
在SQL*Plus中的执行效果如图3.4所示。
图3.4 创建一个带非空约束的表
3.2.4 创建一个带唯一约束的表
前面已经说过,在表中创建唯一约束(UNIQUE)是用来唯一标识一个列中的输入值的,比如:在网上注册的用户名都是唯一的,就可以用唯一约束来约束用户名这个列。使用PL/SQL语句创建唯一约束的语法如下:
CONSTRAINT constraint_name UNIQUE(column_name)
【语法说明】
◆ UNIQUE:唯一约束的关键词。
◆ column_name:唯一约束的名称。
【实例3-5】在创建BOOKINFO表时,为图书名称(BOOKNAME)列添加唯一约束。
在【实例3-1】的基础上,加上一个唯一约束,脚本如下:
01 CREATE TABLE BOOKINFO 02 ( 03 BOOKID INT, 04 BOOKNAME CHAR, 05 PUBLISH VARCHAR2(20), 06 PUBDATE VARCHAR2(20), 07 PRICE DECIMAL, 08 AUTHOR CHAR, 09 STORE VARCHAR2(1), 10 READER INT, 11 REMARKS VARCHAR2(50), 12 CONSTRAINT UN_BOOKNAME UNIQUE (BOOKNAME) 13 );
【代码解析】
◆ 以上脚本表示创建BOOKINFO表,并带有唯一约束,约束名称为“UN_BOOKNAME”。
◆ 唯一约束针对的是BOOKNAME列,达到的效果就是在创建BOOKINFO表的同时为图书名称列加上一个唯一约束,这样在向BOOKINFO表中添加数据时,图书名称必须是唯一的。
【执行效果】
在SQL*Plus中执行该脚本,效果如图3.5所示。
图3.5 创建一个带唯一约束的表
3.2.5 创建一个带外键约束的表
外键(FOREIGN KEY)用于建立和加强两个表数据之间连接的一列或多列。当创建或修改表时可通过定义FOREIGN KEY约束来创建外键。在外键引用中,当一个表的列被引用作为另一个表主键值的列时,就在两个表之间创建了连接,这个列就成为第2个表的外键。
系统保证表在外键上的取值要么是主表中某一个主键值或唯一键值,要么取空值,以此保证两个表之间的连接,确保了实体的参照完整性。FOREIGN KEY既可用于列约束,也可用于表约束,其语法格式为:
CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCE table_name (column_name ) ON DELETE CASCADE
【语法说明】
◆ CONSTRAINT:创建约束的关键词。
◆ FOREIGN KEY:外键约束的关键词。
◆ REFERENCE:引用外表的关键词。
◆ table_name:需要引用的外表,column_name表示该表的列。
下面通过一个具体实例来讲解外键约束的使用情况。
【实例3-6】外键约束的创建与使用。
本实例将创建一个出版社信息表,表名为PUBLISHINFO,包含PublishID、PublishName两列信息,并通过定义表约束的方法,为【实例3-1】所建的BOOKINFO表中的publish列创建外键约束,使其与出版社信息表(PUBLISHINFO)的PublishID列相关联。出版社信息表(PUBLISHINFO)的结构如表3.6所示。
表3.6 出版社信息表(PUBLlSHlNFO)
BOOKINFO表为子表,它以PUBLISHINFO表为父表,通过定义外键约束,保证BOOKINFO表在外键(publish)上的取值要么是父表中某一个主键(PublishID),要么是空值,以此保证两个表之间的连接,确保了实体的参照完整性。创建PUBLISHINFO表的代码如下:
01 CREATE TABLE PUBLISHINFO 02 ( 03 PUBLISHID VARCHAR(20) PRIMARY KEY, 04 PUBLISHNAME VARCHAR(30) 05 )
【代码解析】
◆ 以上脚本将创建PUBLISHINFO表,其中PublishID为该表的主键,主键名称使用默认值。
【执行效果】
在SQL*Plus下运行这段脚本,效果如图3.6所示。
图3.6 创建PUBLlSHlNFO表
创建好出版社信息表(PUBLISHINFO)后,就可以在创建BOOKINFO表时,为Publish列加上外键约束,脚本如下:
01 CREATE TABLE BOOKINFO 02 ( 03 BOOKID INT, 04 BOOKNAME CHAR, 05 PUBLISH VARCHAR2(20), 06 PUBDATE VARCHAR2(20), 07 PRICE DECIMAL, 08 AUTHOR CHAR, 09 STORE INT, 10 READER INT, 11 REMARKS VARCHAR2(50), 12 CONSTRAINT FK_PUBLISH FOREIGN KEY(PUBLISH) REFERENCES 13 PUBLISHINFO(PUBLISHID) 14 );
【代码解析】
◆ 创建BOOKINFO表,该表带有外键约束,约束名称为“FK_PUBLISH”。相关列为publish,该外键和PUBLISHINFO表中的publishID列相关联。
【执行效果】
在SQL*Plus下执行脚本,效果如图3.7所示。
图3.7 创建带外键约束的表
运行该代码,即创建了BOOKINFO表,并为表中的publish列添加了FOREIGN KEY约束。这样,publish列的取值只能是PUBLISHINFO表中PublishID列的值,或是空值。
FOREIGN KEY约束并不仅仅可以与另一个表的PRIMARY KEY约束相连接,它还可以定义为引用另一个表的UNIQUE约束。FOREIGN KEY约束可以包含空值,但是,如果任何组合FOREIGN KEY约束的列包含空值,则将跳过组成该约束的所有值的验证。下面就通过一个实例讲解组合外键约束的使用情况。
当使用外键约束时,应注意以下几个方面的问题。
◆ 如果在FOREIGN KEY约束的列中输入非NULL值,则此值必须在被引用列中存在;否则,将返回违反外键约束的错误信息。
◆ FOREIGN KEY约束仅能引用位于同一个服务器上同一个数据库中的表,跨数据库的引用完整性必须通过触发器实现。
◆ FOREIGN KEY约束可以引用同一个表中的其他列,此行为称为自引用。
◆ 列级FOREIGN KEY约束的REFERENCES子句只能列出一个引用列,此列的数据类型必须与定义约束列的数据类型相同。
◆ 表级FOREIGN KEY约束的REFERENCES子句中引用列的数目必须与约束列列表中的列数相同,每个引用列的数据类型也必须与列表中相应列的数据类型相同。
◆ 在临时表中,不能使用外键约束。
3.2.6 创建一个含多个约束的表
上面已经介绍了5种约束的创建方法,在创建表时并不是每次只能创建一个约束,可以为表中的列创建多个约束,其中主键约束在一个表中只有一个,其他约束没有限制。接下来就利用5种约束来完成下面的实例。
【实例3-7】在创建BOOKINFO表时为图书名称(bookname)列添加一个唯一约束,为图书价格(price)列添加一个检查约束,为出版社(publish)列添加一个非空约束。
根据前面的实例,编写代码如下:
01 CREATE TABLE BOOKINFO 02 ( 03 BOOKID INT, 04 BOOKNAME CHAR, 05 PUBLISH VARCHAR2(20) NOT NULL, 06 PUBDATE VARCHAR2(20), 07 PRICE DECIMAL, 08 AUTHOR CHAR, 09 STORE VARCHAR2(1), 10 READER INT, 11 REMARKS VARCHAR2(50), 12 CONSTRAINT UN_BOOKNAME UNIQUE (BOOKNAME), 13 CONSTRAINT CK_PRICE CHECK (PRICE<=100) 14 );
【代码解析】
◆ 创建BOOKINFO表,该表将为publish列添加非空约束,具体见第5行。
◆ 第12行表示为bookname列添加唯一约束。
◆ 第13行表示为price列添加检查约束,要求价格必须小于等于100。
◆ 该脚本为BOOKINFO表添加3个不同的约束,当然还可以添加其他约束。
【执行效果】
在SQL*Plus下执行脚本,效果如图3.8所示。
图3.8 创建表时添加多个约束
3.3 修改表
上一节学习了如何创建表,并在创建时为列设置一个或多个约束。本节将学习如何修改表,以及如何为表添加或删除约束。
3.3.1 修改表的结构
在Oracle数据库中使用PL/SQL语句不仅允许改变列的数据长度,而且还允许改变其数据类型。在Oracle数据库中,可以在ALTER TABLE语句中使用ALTER COLUMN关键词修改表中列的定义。其语法格式如下:
ALTER TABLE<表名> ADD column_name | MODIFY column_name|DROP COLUMN column_name
【语法说明】
◆ ALTER TABLE:修改表结构的关键词。
◆ ADD:表示增加。
◆ column_name:列名。
◆ MODIFY:表示修改某列。
◆ DROP:表示删除某列。
这里的ADD表示向表中添加列;MODIFY表示修改表中的列;DROP表示删除表中的列。
【实例3-8】向BOOKINFO表中添加一列“ISBN”(编号)。
本实例将向BOOKINFO表中添加一个varchar2类型等于20的ISBN字段,代码如下:
01 ALTER TABLE BOOKINFO 02 ADD ISBN VARCHAR2 (20) ..添加列
【代码解析】
◆ 该脚本表示修改BOOKINFO表,修改操作是给该表添加列,名为“ISBN”,数据类型为varchar2类型。
【执行效果】
在SQL*Plus下执行以上脚本,效果如图3.9所示。添加后查看BOOKINFO表的结构,效果如图3.10所示。
图3.9 添加lSBN列
图3.10 查看BOOKlNFO表结构
从图3.10可以看到,已向BOOKINFO表中添加了一列“ISBN”。
【实例3-9】修改BOOKINFO表中publish字段的长度。
本实例将BOOKINFO表中publish字段的最大长度更改为80,代码如下:
01 ALTER TABLE BOOKINFO 02 MODIFY PUBLISH VARCHAR2(80) NOT NULL ..修改列
【代码解析】
◆ 通过上面的语句就把出版社这个字段的长度改成了80。
【执行效果】
在SQL*Plus下执行修改脚本,效果如图3.11所示。
在PL/SQL中,使用ALTER COLUMN关键词修改表中列的结构有如下一些限制:
(1)不能改变列的列名。
(2)不能将含有空值的列定义修改为NOT NULL约束。
(3)若列中已有数据,减少该列的宽度时,不能比已有的数据还短。
(4)只能修改NULL|NOT NULL约束,其他类型的约束在修改之前必须先删除,然后再重新添加修改过的约束定义。
(5)当改变列的数据类型时,列中已有的数据类型必须与新的数据类型兼容。比较常用的转换是从integer类型转换为字符型,因为char列可保存数字、字母和特殊符号。但是,如果将char类型转换为integer类型,必须保证表中每行上所转换的char字段具有数字或NULL值。
图3.11 查看BOOKlNFO表结构
【实例3-10】删除BOOKINFO表中的ISBN列。
本实例将BOOKINFO表中的ISBN字段删除,代码如下:
01 ALTER TABLE BOOKINFO 02 DROP COLUMN ISBN ..删除列
【代码解析】
◆ ALTER TABLE:修改表结构的关键词。
◆ DROP:删除列的操作,这里指删除ISBN列。
【执行效果】
在SQL*Plus下执行这段脚本,效果如图3.12所示。
图3.12 删除数据列
3.3.2 给表添加约束
如果在在SYS用户下执行该操作,就无法删除字段。DROP COLUMN关键词后面为要删除列的名字。在T-SQL语句中一次可以删除多个列,只需要在DROP COLUMN关键词后面依次列出要删除列的名字,中间用逗号分开即可。但是在PL/SQL中是不允许的。
可以通过ALTER TABLE语句为已有表添加各种约束。这里以添加PRIMARY KEY约束为例,讲解约束的添加。其语法可表示如下:
ALTER TABLE table_name ADD CONSTRAINTS constraint_name PRIMARY KEY (column_name)
【语法说明】
◆ 这段语法描述了如何为指定表添加约束。
◆ ADD CONSTRAINTS:添加约束的关键词。
◆ constraint_name:约束名称。
◆ PRIMARY KEY:这里表示添加的是主键约束。
◆ column_name:约束的列。
【实例3-11】为BOOKINFO表添加主键约束。
本实例将为BOOKINFO表的bookid列添加PRIMARY KEY约束,实现代码如下:
01 ALTER TABLE BOOKINFO 02 ADD CONSTRAINT PK_BOOKINFO 03 PRIMARY KEY (BOOKID);
【代码解析】
◆ 第1行表示修改BOOKINFO表。
◆ 第2行表示为该表添加约束,约束名称为“PK_BOOKINFO”。
◆ 第3行表示添加的约束为主键约束,约束所在列为bookid列。
【执行效果】
在SQL*Plus下执行以上脚本,效果如图3.13所示。
图3.13 添加主键约束
为表中的现有列添加PRIMARY KEY约束时,Oracle数据库引擎将检查现有列的数据和元数据,以使添加主键约束的列没有NULL值,同时没有重复值。
如果为具有重复值或允许有空值的列添加PRIMARY KEY约束,则数据库引擎将返回一个错误并且不添加约束。同样,为已有表添加其他约束时,其实现方式以及对列值的要求与此相似。
3.3.3 删除表中的约束
可以通过ALTER TABLE语句删除已有表的约束,其语法可表示如下:
ALTER TABLE table_name DROP [CONSTRAINT] constraint_name
【语法说明】
◆ DROP:表示修改表时删除约束操作。
◆ constraint_name:需要删除的约束名称。
【实例3-12】删除表中的约束。
本实例将删除【实例3-3】中,为BOOKINFO表的price字段创建的CHECK约束“CK_PRICE”。实现代码如下:
01 ALTER TABLE BOOKINFO 02 DROP CONSTRAINT CK_PRICE;
【代码解析】
◆ 该脚本进行修改表操作,将删除表中的约束,删除的约束名称为“CK_PRICE”,即删除作用在BOOKINFO表上的CK_PRICE约束。
【执行效果】
在SQL*Plus下执行脚本,效果如图3.14所示。
图3.14 删除约束
如果要修改一个表中的约束,则需要首先删除该约束,然后再添加新的约束。
3.4 删除表
当某个基本表无用时,可以使用DROP TABLE命令将其删除。删除后,该表中的数据,以及在此表上所创建的索引都被删除,而建立在该表上的视图不会随之删除,系统将继续保留其定义,但已无法使用。如果恢复该表,这些视图可重新使用。关于视图和索引的相关概念,将在后面的章节中讲述。
删除表的语法如下:
DROP TABLE <表名>
比如要删除BOOKINFO表,可采用如下代码:
DROP TABLE BOOKINFO
不能使用DROP TABLE删除被FOREIGN KEY约束引用的表,必须先删除引用FOREIGN KEY约束的表。在系统表上不能使用DROP TABLE语句。
3.5 重命名表
在实际的数据库设计中经常会更改原有的表名,更改表名并不是把原有的表删除再重新建立,而是像更改文件的名字一样简单。在Oracle数据库中重命名表的语法如下:
RENAME oldname TO newname
【语法说明】
◆ RENAME:重命名的关键词。
◆ oldname:表的旧名称。
◆ TO:关键词。
◆ newname:表的新名称。
使用上面的语法重命名图书信息表BOOKINFO为NewBOOKINFO,代码如下:
RENAME BOOKINFO TO NewBOOKINFO
3.6 使用企业管理器操作表
前面的几个小节已经讲解了如何使用PL/SQL语言操作表,使用Oracle数据库自带的企业管理器也可以完成前面的操作,并且不需要编写语句,可以通过可视化的操作完成对数据库表的操作。本节将对前面所创建的BOOKINFO表使用企业管理器进行创建、修改以及删除操作。
3.6.1 启用企业管理器
企业管理器是在安装Oracle数据库后自动安装上的,在Oracle 11g R2中它是以一种Web页面的形式显示的。要在企业管理器中创建表,首先需要登录Oracle 11g R2的企业管理器,在默认情况下,企业管理器和Oracle数据库安装到同一个目录下,在“开始”菜单的Oracle程序中就可以看到它,如图3.15所示。
图3.15 企业管理器菜单
进入企业管理器中选择一个用户登录,登录后进入如图3.16所示的界面。
图3.16 企业管理器首界面
至此,已经登录到企业管理器界面中,在企业管理器中基本可以完成PL/SQL语句能完成的任何工作。这里就不一一介绍企业管理器的菜单了,请读者自己熟悉企业管理器界面。
3.6.2 使用企业管理器创建表
在企业管理器中,创建表是通过企业管理器的“方案”选项实现的,步骤如下:
step 1 在如图3.16所示的界面中单击【方案】选项,进入如图3.17所示的界面。
图3.17 “方案”选项界面
step 2 在此界面中主要是对数据库对象和程序进行操作,选择【数据库对象】组中的【表】选,进入如图3.18所示的界面。
图3.18 “表”选项界面
step 3 在此界面中可以根据输入的方案和对象名,查询在表空间中存在的数据表。如果要新创建数据表,单击【创建】按钮,进入如图3.19所示的界面。
图3.19 创建表界面
step 4 在此界面中输入列名称、数据类型、大小,并且可以直接设置非空和默认值约束,输入好相应的信息后即可。假设以创建BOOKINFO表为例,如图3.20所示。
图3.20 创建BOOKlNFO表
step 5 这里,在“名称”后面添加的就是表名,这个是创建表的必填项。表空间如果选择“默认”,那么就是SYSTEM表空间。也可以通过用户自定义的方式来创建表空间,然后将表创建到自己定义的表空间中。填好数据后,单击【确定】按钮,即可完成表的创建,并给予一个成功创建表的提示,如图3.21所示。
图3.21 成功创建BOOKlNFO表
step 6 至此,成功地完成了BOOKINFO表的创建。
3.6.3 使用企业管理器修改表
如果需要在创建表时为表添加约束,则可以在如图3.20所示的界面中,选择【约束条件】项,进入约束界面中,添加相应的约束。
上一小节已经通过企业管理器,在表空间SYSTEM中创建了名为“BOOKINFO”的数据表,如果要修改该数据表,操作也是很简单的,详细步骤如下:
step 1 在如图3.18所示的界面中,选择企业管理器方案,并输入对象名,也就是表名“BOOKINFO”,单击【开始】按钮,查询结果如图3.22所示。
图3.22 查询BOOKlNFO表
step 2 可以看到刚才创建的名为“BOOKINFO”的数据表,修改数据表可以选择当前记录,并单击【编辑】按钮,进入表的“一般信息”页面(见图3.20)。假设要给BOOKINFO表添加一个唯一约束,在“编辑表”界面中,单击【约束条件】按钮,如图3.23所示。
图3.23 添加约束界面
step 3 在此界面中,可以为表中的字段添加主键约束、唯一约束、检查约束、外键约束。这里在“约束条件”下拉列表框中选择【UNIQUE】项,单击【添加】按钮,如图3.24所示。
图3.24 添加唯一约束界面
step 4 在此界面中,从表的全部列中选择要添加约束的列,并给约束一个名称。这里从“可用列”中选择BOOKNAME列,并单击【移动】按钮,就把该列移动到“所选列”中,并添加约束名称“UN_BOOKNAME”,如图3.25所示。
图3.25 选择为BOOKNAME列添加唯一约束
step 5 在此界面中,添加好要设置约束的列后,单击【继续】按钮,进入如图3.26所示的界面。
图3.26 添加约束成功
step 6 在此界面中,可以看到刚添加的唯一约束;此外,还可以看见在BOOKINFO表中存在的所有约束。
3.6.4 使用企业管理器删除表
前面介绍了在企业管理器中创建表和修改表的操作,删除表在编写PL/SQL删除语句时就是最简单的,使用企业管理器删除表也是很简单的,只需查询到要删除的表,就可以根据所选择的删除方式删除指定的数据表。
step 1 假设要删除前面创建和修改过的BOOKINFO表,在如图3.22所示的界面中查询到该表,选中它,单击【使用选项删除】按钮,进入如图3.27所示的界面。
图3.27 “使用选项删除”界面
step 2 此界面提供了3种删除表的方式:一种是删除表的定义,相当于使用DROP TABLE语句删除表;一种是删除表中的数据,相当于使用DELETE语句;一种是仅删除不支持回退的数据,也就是使用TRUNCATE关键词删除表。这里选择使用第1种方式,删除表的定义。选择第1种方式后,单击【是】按钮,进入如图3.28所示的界面。
图3.28 删除成功提示界面
3.7 小结
本章主要讲解了使用PL/SQL语句和企业管理器的方式创建、修改、删除、重命名数据表的操作,其中详细讲解了在创建表时如何在表中添加约束,如创建带检查约束的表、创建带唯一约束的表、创建带外键约束的表,以及创建含有多个约束的表;修改表时讲解了修改表结构、给表添加约束、删除表中的约束等内容。