您的位置:首页 > 数据库 > Oracle

Oracle数据库学习<二>

2015-12-09 08:52 471 查看

二、通过 SQL 语句管理数据表

2.1.创建数据表

 下面的 SQL 语句创建了一个用于保存人员信息的数据表:

CREATE TABLE T_Person

(

FName VARCHAR2(20),

FAge NUMBER (10)

)

 

2.2.定义非空约束

CREATE TABLE T_Student (

FNumber VARCHAR2(20) NOT NULL ,

FNameVARCHAR2(20) NOT NULL ,

FAge NUMBER (10) NOT NULL ,

FFavoriteVARCHAR2(20),

FPhoneNumber VARCHAR2(20)

)

与普通字段定义不同的地方是,非空字段的定义在类型定义后增加了“NOT

NULL” ,其他定义方式与普通字段相同。

 

2.3.定义默认值

CREATE TABLE T_Teacher (

FNumber VARCHAR2(20),

FName VARCHAR2(20),

FAgeNUMBER (10),

FISMaster VARCHAR2(5) 

DEFAULT 'NO'

)

与普通字段定义不同的地方是,非空字段的定义在类型定义后增加了

“DEFAULT 默认值表达式” ,其他定义方式与普通字段相同。

 

2.4.定义主键

CREATE TABLE T_Bus (

FNumber VARCHAR2(20),

FDriverName VARCHAR2(20),

FUsedYears NUMBER (10),

PRIMARY KEY (FNumber)

)

主键定义是在所有字段后的 “约束定义段” 中定义的, 格式为 PRIMARY KEY

(主键字段名),在有的数据库系统中主键字段名两侧的括号是可以省略的,也就是可以写成

PRIMARY KEY FNumber, 不过为了能够更好的跨数据库, 建议不要采用这种不通用的写法。

 

有的时候数据表中是不存在一个唯一的主键的,比如某个行业协会需要创建一个保存个

人会员信息的表, 表中记录了所属公司名称 FCompanyName、 公司内部工号 FInternalNumber、

姓名 FName 等,由于存在同名的情况,所以不能够使用姓名做为主键,同样由于各个公司

之间的内部工号也有可能重复,所以也不能使用公司内部工号做为主键。不过如果确定了公

司名称,那么公司内部工号也就唯一了,也就是说通过公司名称 FCompanyName 和公司内

部工号 FInternalNumber 两个字段一起就可以唯一确定一个个人会员了,我们可以让

FCompanyName、FInternalNumber 两个字段联合起来做为主键,这样的主键被称为联合主键

(或者称为复合主键) 。可以有两个甚至多个字段来做为联合主键,这就可以解决一张表中

没有唯一主键字段的问题了。定义联合主键的方式和唯一主键类似,只要在 PRIMARY KEY

后的括号中列出做为联合主键的各个字段就可以了。

上面的例子的建表 SQL 如下:

CREATE TABLE T_PersonalMember (

FCompanyName VARCHAR2(20),

FInternalNumber VARCHAR2(20),

FName VARCHAR2(20),
PRIMARY KEY (FCompanyName,FInternalNumber)

)

采用联合主键可以解决表中没有唯一主键字段的问题,不过联合主键有如下的缺点:

l 效率低。在进行数据的添加、删除、查找以及更新的时候数据库系统必须处理两个字

段,这样大大降低了数据处理的速度。

l 使得数据库结构设计变得糟糕。组成联合主键的字段通常都是有业务含义的字段,这

与“使用逻辑主键而不是业务主键”的最佳实践相冲突,容易造成系统开发以及维护

上的麻烦。

使得创建指向此表的外键关联关系变得非常麻烦甚至无法创建指向此表的外键关联

关系。

l 加大开发难度。很多开发工具以及框架只对单主键有良好的支持,对于联合主键经常

需要进行非常复杂的特殊处理。

 

2.5.定义外键

外键是非常重要的概念,也是体现关系数据库中“关系”二字的体现,通过使用外键,

我们才能把互相独立的表关联起来,从而表达丰富的业务语义。

外键是定义在源表中的,定义位置同样为所有字段定义的后面,使用 FOREIGN KEY

关键字来定义外键字段,并且使用 REFERENCES 关键字来定义目标表名以及目标表中被关

联的字段,格式为:

FOREIGN KEY 外键字段名称 REFERENCES 目标表名(被关联的字段名称)

比如我们创建一张部门信息表,表中记录了部门主键 FId、部门名称 FName、部门级别

FLevel 等字段,建表 SQL 如下:

CREATE TABLE T_Department (

FId VARCHAR2(20),

FName VARCHAR2(20),

FLevel NUMBER (10) ,

PRIMARY KEY (FId)

)

接着创建员工信息表,表中记录工号、姓名以及所属部门等信息,为了能够建立同部门

信息表之间的关联关系,我们在员工信息表中保存部门信息表中的主键,保存这个主键的字

段就被称为员工信息表中指向部门信息表的外键。建表 SQL 如下:

CREATE TABLE T_Employee (

FNumber VARCHAR2(20),

FName VARCHAR2(20),

FDepartmentId VARCHAR2(20),
FOREIGN KEY (FDepartmentId) 

REFERENCES T_Department(FId)

)

 

2.6.修改已有数据表

通过 CREATE TABLE 语句创建的数据表的结构并不是永远不变的,很多因素决定我们需要对数据表的结构进行修改,比如我们需要在 T_Person 表中记录一个人的个人爱好信息,那么就需要在 T_Person 中增加一个记录个人爱好的字段,再如我们不再需要记录一个人的年龄,那么我们就可以将 FAge 字段删除。这些操作都可以使用 ALTER TABLE 语句来完成。

 

添加字段的语法:
ALTER TABLE 待修改的表名 ADD 字段名 字段类型

在语句中需要指定要修改的表的表名、要增加的字段名以及字段的数据类型,其使用方式和创建表的非常类似。下面是为 T_Person 表增加个人爱好字段的 SQL 语句:

ALTER TABLE T_PERSON ADD FFavorite VARCHAR2(20)

 

删除字段的语法:
ALTER TABLE 待修改的表名 DROP 待删除的字段名

在语句中需要指定要修改的表的表名以及要删除字段的名称。下面是删除 T_Person 表中年龄字段的 SQL 语句:

ALTER TABLET_Person DROP FAge

 

2.7.删除数据表

当一个数据表不再有用的时候我们就可以将其删除,使用 DROP TABLE 语句就可以完

成这个功能,

DROP TABLE 语句的语法如下:

DROP TABLE 要删除的表名

 

需要注意的是,如果在表之间创建了外键关联关系,那么在删除被引用数据表的时候会删除失败,因为这样会导致关联关系被破坏,所以必须首先删除引用表,然后才能删除被引用表。比如 A 表创建了指向 B 表的外键关联关系, 那么必须首先删除 A 表后才能删除 B 表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 数据库