创建与管理表
创建与管理表
数据库中对象:有表、视图、索引、序列、同义词等。
表:基本的数据存储的集合,由行与列组成
视图:从表中抽出的逻辑上相关的数据集合。
序列:?提供有规律的数值
索引:提高查询效率
同义词:给对象起的别名。
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: