日期:2014-05-16 浏览次数:20359 次
创建与管理表 数据库中对象:有表、视图、索引、序列、同义词等。 表:基本的数据存储的集合,由行与列组成 视图:从表中抽出的逻辑上相关的数据集合。 序列: 提供有规律的数值 索引:提高查询效率 同义词:给对象起的别名。 Oracle数据库中的表 1、 用户自定义表 表名和列名的命名规范: ? 必须以字母开头 ? 必须在 1–30 个字符之间 ? 必须只能包含 A–Z, a–z, 0–9, _, $, 和 # ? 必须不能和用户定义的其他对象重名 ? 必须不能是Oracle 的保留字 创建表必须具备: ? 必须具备: ? CREATE TABLE权限 ? 存储空间 ? 必须指定: ? 表名 ? 列名, 数据类型, 尺寸 创建表的语法 CREATE TABLE [schema.]table (column datatype [DEFAULT expr][, ...]); 数据类型如下: 数据类型 描述 VARCHAR2(size) 可变长字符数据 CHAR(size) 定长字符数据 NUMBER(p,s) 可变长数值数据 DATE 日期型数据 LONG 可变长字符数据,最大可达到2G CLOB 字符数据,最大可达到4G RAW (LONG RAW) 原始的二进制数据 BLOB 二进制数据,最大可达到4G BFILE 存储外部文件的二进制数据,最大可达到4G ROWID 行地址 创建表的分析: 在数据库中必须遵循一定的规范 这些规范称为范式.目前关系数据库有6种方式,数据库只需要满足3NF即可,需要使用范式对数据库中表进行处理. 下面我以学生信息为例分析: 学号,学生姓名,出生日期,学生性别,所属班级,所属院系,系主任姓名,课程编号,成绩. 分析: 学号:sid 数据类型 varchar2 学生姓名:sname 出生日期:sbirth date 学生性别:ssex 所属班级:sclass 所属院系:sdep 系主任姓名:dname 课程编号:cid 成绩 grade number(5,2) 创建学生信息表 根据如上信息可以创建存储的表 学生信息表 包含医以上的全部信息,但非规范。 分析设计过程: 必须满足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) 2、 Oracle数据字典 2.1查询用户自定义表 //查询用户定义的表的名称 SQL> select table_name from user_tables; //查询用户自定表的详细特征 SQL> select * from user_tables //等效于 SQL> select * from tabs; 2.2查询用户定义的各种数据库对象 SQL> select distinct object_type from user_objects; OBJECT_TYPE ------------------- SEQUENCE TABLE INDEX 2.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 用户自定表 使用 ALTER TABLE 语句可以: ? 追加新的列 ? 修改现有的列 ? 为新追加的列定义默认值 ? 删除一个列 使用 ALTER TABLE 语句追加, 修改, 或删除列的语法. 追加 ALTER TABLE table ADD (column datatype [DEFAULT expr] [, column datatype]...); 修改 ALTER TABLE table MODIFY (column datatype [DEFAULT expr] [, column datatype]...); 删除 ALTER TABLE table DROP column (column_name); 修改列的名称 ALTER TABLE table_name rename column old_column_name to new_column_name 案例: //采用子查询创建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 SQL> commit; SQL> desc customer; Name Type Nullable Default Comments -------- ------------ -------- ------- -------- USERNAME VARCHAR2(20) Y PASSWORD VARCHAR2(20) NAME VARCHAR2(20) ADDRESS VARCHAR2(20) Y ZIP NUMBER(6) Y EMAIL VARCHAR2(20) Y //修改某个字段的类型 SQL> alter table customer modify email number(4); Table altered SQL> commit; Commit complete SQL> desc customer; Name Type Nullable Default Comments -------- -----