主要的数据库对象
对象 | 描述 |
---|---|
表 | 存储的基本单元,由行和列组成 |
视图 | 一个逻辑的数据表,数据来自一个或多个表 |
序列 | 产生主健值 |
索引 | 目的是提高查询的性能 |
同义词 | 给出对象的别名 |
数据库对象的命名习惯
- 必须以一个字母开始
- 可以是1-30个字符的长度
- 仅能包括字符:A-Z,a-z,0-9,_,$,和#
- 不能与本用户拥有的其他对象重名
- 不能是一个Oracle服务器的保留字
创建表
表的创建是数据库的基本功能之一。
SQL > CREATE TABLE dept
(deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13));
可以用DESCRIBE
语句确认创建的结果:
SQL > DESCRIBE dept;
Oracle 数据库中的表
数据库中的表分为两类:
- 用户类
这是由用户创建和维护的一些列表的集合,包含用户的信息。 - 数据字典
由Oracle服务器创建和维护的一些列表的集合,包含数据库的信息。
使用子查询来创建一个表
可以使用CREATE TBALE 语句和AS子查询选项来创建一个表并插入数据,创建的表的列要和子查询的列相匹配。
CREATE TABLE table
[(column, column...)]
AS subquery;
举例:
SQL> CREATE TABLE dept30
AS
SELECT empno, ename, sal * 12 ANNSAL
FROM emp
WHERE deptno = 30;
SQL> describe dept30;
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPNO NUMBER(6)
ENAME VARCHAR2(20)
ANNSAL NUMBER
描述在进行列定义时用到的数据类型
数据库列的数据类型
数据类型 | 描述 |
---|---|
VARCHAR2(size) | 变长字符数据,size为最大长度<4000 |
CAHR(size) | 定长字符数据,size为最大长度<2000 |
NUMBER(p,s) | 数字类型,p为精度<=38,s为刻度 |
DATE | 日期和时间值 |
LONG | 可以保存最大长度为2GB-1的字符数据 |
CLOB | 可以保存最大长度为(4GB-1) * db_block_size 的字符数据 |
RAW and LONG RAW | 存储二进制数据 |
BLOB | 最大长度为(4GB-1) * db_block_size 的二进制 |
BFILE | 在外部文件中存储的二进制数据;最大为4GB |
列的缺省选项
可以为某个列指定一个缺省值。合法的值可以是一个直接的量、表达式或者一个SQL函数。注意,缺省值的数据类型必须与列的数据类型匹配。举个例子:
... hiredate DATE DEFAULT SYSDATE, ...
改变表定义
对表的列进行修改
在表创建之后,可以使用ALTER TABLE
语句来对表的列进行修改,包括:
- 增加一个新列
- 更改一个现存的列
- 为新列定义缺省的值
ALTER TABLE table
ADD (column datatype [DEFAULT expr]
[, column datetype]...);
ALTER TABLE table
MODIFY (column datatype [DEFAULT expr]
[, column datetype]...);
丢弃一个列
可以使用DROP COLUMN来丢弃一个表中将来不使用的列:
SQL > ALTER TABLE dept30
DROP COLUMN job;
丢弃、改名或者截断表
丢弃一个表
如果决定不再使用一个表,可以丢弃这个表。
丢弃一个表后,表中所有的数据、结构、索引都被删除了,所有未决的事务都被提交。而且,这个操作是不能回滚的。可以加上purge
选贤,使得本删除的表不进入回收站,而直接被删除。
SQL > DROP TABLE dept30 purge;
改变一个对象的名称
可以使用RENAME更改表、视图、同义词、序列等对象的名称。当然,操作用户必须是对象的拥有者。
SQL > RENAME dept TO department;
截断一个表
有的时候,可能要溢出表中所有的数据行,或者释放表中的存储空间,就需要用到TRUNCATE TABLE
的功能。
在执行TRUNCATE语句后,不能对该操作进行回滚。可以用DELETE语句来执行相同的操作,不过DELETE并不立即释放空间,因而可以回滚。
SQL > TRUNCATE TABLE department;
为一个表增加注释
使用COMMENT
语句可以为一个表或者表中的某一列增加注释。
SQL > COMMENT ON TABLE emp
IS 'Employee Information';
注释可以通过数据字典视图进行查询:
- ALL_COL_COMMENTS
- USER_COL_COMMENTS
- ALL_TABLE_COMMENTS
- USER_TABLE_COMMENTS