首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

创设与管理表

2012-07-26 
创建与管理表创建与管理表数据库中对象:有表、视图、索引、序列、同义词等。表:基本的数据存储的集合,由行与列

创建与管理表

创建与管理表

数据库中对象:有表、视图、索引、序列、同义词等。

表:基本的数据存储的集合,由行与列组成

视图:从表中抽出的逻辑上相关的数据集合。

序列:?提供有规律的数值

索引:提高查询效率

同义词:给对象起的别名。

Oracle数据库中的表

1、?用户自定义表

(1)表名和列名的命名规范:

l?必须以字母开头

l?必须在?1–30?个字符之间

l?必须只能包含?A–Z,?a–z,?0–9,?_,?$,?和?#

l?必须不能和用户定义的其他对象重名?

l?必须不能是Oracle?的保留字

(2)创建表必须具备:

l??必须具备:

??CREATE?TABLE权限

??存储空间

l?必须指定:

??表名

??列名,?数据类型,?尺寸

(3)创建表的语法

??????CREATE?TABLE?[schema.]table

????(column?datatype?[DEFAULT?expr][,?...]);

(4)数据类型如下:

数据类型 描述

VARCHAR2(size) 可变长字符数据

CHAR(size)?? 定长字符数据

NUMBER(p,s)?? 可变长数值数据

DATE? 日期型数据

LONG? 可变长字符数据,最大可达到2G

CLOB 字符数据,最大可达到4G

RAW?(LONG?RAW)? 原始的二进制数据

BLOB 二进制数据,最大可达到4G?

BFILE 存储外部文件的二进制数据,最大可达到4G?

ROWID 行地址

2、?创建表的分析:

???????在数据库中必须遵循一定的规范?这些规范称为范式.目前关系数据库有6种方 式,数据库只需要满足3NF即可,需要使用范式对数据库中表进行处理.

???下面我以学生信息为例分析:

???学号,学生姓名,出生日期,学生性别,所属班级,所属院系,系主任姓名,课程编号,??成绩.

???分析:

???学号:sid??????????数据类型?varchar2

???学生姓名:sname

???出生日期:sbirth????date

???学生性别:ssex???????

???所属班级:sclass

???所属院系:sdep

???系主任姓名:dname

???课程编号:cid

???成绩?grade?????????number(5,2)

??3、创建学生信息表

根据如上信息可以创建存储的表?学生信息表??包含医以上的全部信息,但非规范。

分析设计过程:

???????必须满足3NF范式?但前提必须满足1,2NF

(1)属性不可再分(1NF)?==è一对多关系

学生信息表:Sid,sname,sbirth,ssex,sclass,sdep,dname

成绩表:?sid?cid?grade

(2)(前提必须满足1NF?)表中的所有非主属性都完全依赖于任一候选键。

Sid->Sname

sid->sbirth

sid->ssex

sid->sclass?

sdep->dname

--à其他普通属性不应当存在部分依赖于主要属性->此普通属性应 当被分离到新的表中去

s(sid,sname,sbirth,ssex,sclass,sdep)

d(sdep,dname)

g(sid,cid,grade)

(3)(前提满足2NF)表中的每一个非主属性都不传递依赖于任何候选键。

s(sid,sname,sbirth,ssex,sclass,sdep)

d(sdep,dname)

g(sid,cid,grade)

在满足2NF后?分析:

Sid->sclass?

Sclass->sdep?

Sid->sdep

s(sid,sname,sbirth,ssex,sclass)

cd(sclass,sdep)

d(sdep,dname)

g(sid,cid,grade)

(4)Oracle数据字典

?3.1查询用户自定义表

?????查询用户定义的表的名称

SQL>?select?table_name?from?user_tables;

?查询用户自定表的详细特征

SQL>?select?*?from?user_tables

等效于

SQL>?select?*?from?tabs;

3.2查询用户定义的各种数据库对象

SQL>?select?distinct?object_type?from?user_objects;?

OBJECT_TYPE

-------------------

SEQUENCE

TABLE

INDEX

3.3?查看用户定义的表、视图、序列和同义词

SQL>?select?*?from?user_catalog;

TABLE_NAME??????????????TABLE_TYPE

------------------------------?-----------

USESS???????????????????????TABLE

ABC??????????????????????????TABLE

DEPT????????????????????????TABLE

EMP?????????????????????????TABLE

SALGRADE?????????????????TABLE

PRODUCT_SEQ?????????????SEQUENCE

ORDERS_SEQ???????????????SEQUENCE

ORDERITEM_SEQ??????????SEQUENCE

USERS???????????????????????TABLE

PRODUCT???????????????????TABLE

ORDERS?????????????????????TABLE

ORDERITEM????????????????TABLE

TMP?????????????????????????TABLE

PAGES???????????????????????TABLE

STUDENT???????????????????TABLE

COURSE?????????????????????TABLE

SC????????????????????????????TABLE

TEST??????????????????????????TABLE?

18?rows?selected

4、用户自定表

使用?ALTER?TABLE?语句可以:

l?追加新的列

l?修改现有的列

l?为新追加的列定义默认值

l?删除一个列

使用?ALTER?TABLE?语句追加,?修改,?或删除列的语法.

(1)追加:

ALTER?TABLE?table?

ADD ???(column?datatype?[DEFAULT?expr]

???[,?column?datatype]...);

(2)修改

ALTER?TABLE?table?

MODIFY ???(column?datatype?[DEFAULT?expr]

???[,?column?datatype]...);

(3)删除

ALTER?TABLE?table?

DROP column???(column_name);

(4)修改列的名称

ALTER?TABLE?table_name?rename?column?old_column_name?

to?new_column_name?

5、案例:

采用子查询创建customer表?表的结构域users表完全一致

SQL>?create?table?customer?as?select?*?from?users;?

Table?created?

SQL>?commit;?//事务提交

Commit?complete

为customer表添加新的列?email?类型varchar2(20).

SQL>?alter?table?customer?add?email?varchar2(20);

Table?altered

font-weight: normal; font-size: 10.5pt; background:

热点排行