Oracle SQL参考
索引:
- 创建表
- 修改表
- 创建完整性约束的表
- 增加/修改完整性约束
- 设置约束的时效
- 创建索引
- 创建视图
- 创建序列
- 创建同义词
- 创建/修改用户
- 创建操作系统用户
- 权限管理
- 设置表空间限额
- 资源限制
- 管理表空间
- 控制文件
- 段、区间和数据块
- 回滚段
- 表分区
- 索引分区
1.创建表
CREATE TABLE [Schema.]table_name ( column datatype [DEFAULT expression] [, column datatype [DEFAULT expression] ] [… other column .. ] )
2.修改表
ALTER TABLE [Schema.]table_name [ ADD column datatype [ DEFAULT expression] ] [ MODIFY column [datatype] [DEFAULT expression] ] [ DROP column ]
3.创建完整性约束的表
CREATE TABLE [Schema.]table_name (
{ column datatype [DEFAULT expression]
[CONSTRAINT constraint]
{ [ NOT] NULL
| {UNIQUE|PRIMARY KEY
}
| REFERENCES [ Schema.]table [(column)] [ON DELETE CASCADE]
|CHECK (condition)
}
[another constraint specification ]
| [CONSTRAINT constraint ]
{ {UNIQUE|PRIMARY KEY} (column [, column] …)
| FOREIGN KEY (column [, column] …) REFERENCES \
[Schema.] table [(column [, column] …)] \
[ ON DELETE {CASCADE|SET NULL}]
| CHECK (condition)
}
[, … other columns/constraints or constraints ]
)
4.增加/修改完整性约束
ALTER TABLE [Schema.] table_name
ADD [CONSTRAINT constraint]
{ {UNIQUE|PRIMARY KEY} (column [, column] …)
| FOREIGN KEY (column [, column] …) REFERENCE \
[Schema.] table [ (column [, column] …)] \
[ ON DELETE {CASCADE|SET NULL}]
| CHECK (condition) }
5.设置约束的时效
SET CONSTRAINT[S]
{ [Schema.]constraint [, [Schema.]constraint] …
| ALL}
{IMMEDIATE | DEFERRED }
6.创建索引
CREATE [UNIQUE] INDEX [Schema.] index ON [Schema.] table ( column [ASC|DESC] [, column [ASC|DESC] ] …)
7.创建视图
CREATE [ OR REPLACE] VIEW [Schema.] view AS subquery [ WITH READ ONLY ]
8.创建序列
序列是一个能生成一系列唯一整数值的模式对象,它仅适用于使用简单数值列作为主键的表。
CREATE SEQUENCE [Schema.] sequence [ START WITH integer ] [ INCREMENT BY integer ] [ MAXVALUE integer | NOMAXVALUE ] [ MINVALUE integer | NOMINVALUE ] [ CYCLE | NOCYCLE ] [ ORDER | NOORDER ]
使用方法:
CREATE SEQUENCE order_ids START WITH 2 INCREMENT BY 1 NOMAXVALUE;
为了替用户生成一个新的序列号,SQL语句必须引用该序列和它的NEXTVAL伪列。如:
INSERT INTO orders( id, c_id, orderdate, status ) VALUES ( order_ids.NEXTVAL, 2, ’18-JUN-99’, ‘B’ );
使用当前的序列号,使用CURRVAL伪列,可以任意次重用当前的序列号。如:
INSERT INTO items( o_id, id, quantity) VALUES(order_ids.CURRVAL, 1, 1 ); INSERT INTO items( o_id, id, quantity) VALUES(order_ids.CURRVAL, 2, 4 );
9.创建同义词
同义词是存储在数据库中的表、视图、序列或其他模式对象的别名。有公用同义词和私有同义词。
CREATE [PUBLIC] SYNONYM [Schema.] synonym FOR [Schema.] object
10.创建/修改用户
{CREATE|ALTER} USER user
IDENTIFIED BY password
[DEFAULT TABLESPACE tablespace ]
[TEMPORARY TABLESPACE tablespace ]
[PASSWORD EXPIRE]
[ACCOUNT {LOCK|UNLOCK}]
可指定用户缺省表空间,缺省为SYSTEM表空间。
可指定用户临时表空间,缺省临时表空间为SYSTEM空间。
系统缺省用户帐号:
- SYS/CHANGE_ON_INSTALL:拥有数据库的数据字典对象。
- SYSTEM/MANAGER:缺省的数据库管理员。
11.创建操作系统用户
创建操作系统用户方法:
对于Oracle7.x:
create user ops$username identified externally …;
对于Oracle8i:
create user username identified externally…;
其中username是操作系统的用户。
使用时,以username用户登陆,执行“sqlplus /”即可,不需输入用户名和密码。
12.权限管理
(1).系统权限常用列表
| 权限 | 说明 |
|---|---|
| CREATE SESSION | 能连接到数据库服务器并建立数据库会话 |
| CREATE TABLE | 能在自己的模式中创建表 |
| CREATE ANY TABLE | 能在数据库的任何模式中创建表 |
| CREATE ANY TYPE | 能在数据库的任何模式中创建类型及关联类型体 |
| SELECT ANY TABLE | 能查询数据库中的任何表 |
| EXECUTE ANY PROCEDURE | 能在数据库中执行任何存储过程、存储函数或打包部件 |
| EXECUTE ANY TYPE | 能引用和执行数据库中任何类型的方法 |
(2).授予用户系统权限
GRANT privilege [, privilege ] … TO user [, user ] … [WITH ADMIN OPTION ]
要向所有用户授权,可以使用PUBLIC。
(3).撤销用户系统权限
REVOKE privilege [, privilege ] … FROM user [, user ] …
(4).对象权限列表
| 对象类型 | 对象权限 | 特别说明 |
|---|---|---|
| 表 | SELECT、INSERT、UPDATE、DELETE、ALTER、INDEX、REFERENCES | INDEX权限允许为表创建索引;当声明了参照完整性约束时,REFERENCES允许参照这个表;可以为INSERT、UPDATE和REFERENCES权限授予列选择权。 |
| 视图 | SELECT、INSERT、UPDATE、DELETE | 可以为INSERT、UPDATE权限授予列选择权。 |
| 序列 | SELECT、ALTER | SELECT权限能利用序列的NEXTVAL和CURRVAL来生成和重用序列号。 |
| 过程、函数、包、对象类型 | EXECUTE |
(5).授予用户对象权限
GRANT
{ privilege [, privilege ] …
| ALL [PRIVILEGES] }
ON { [Schema.]object | DIRECTORY directory }
TO user [, user ] …
[WITH GRANT OPTION]
(6).撤销用户对象权限
REVOKR
{ privilege [, privilege] …
| ALL [PRIVILEGE ] }
ON { [Schema.]object | DIRECTORY directory }
FROM user [, user] …
[CASCADE CONSTRAINTS]
[FORCE]
(7).预定义数据库角色
| 角色 | 说明 |
|---|---|
| CONNECT | 能连接到数据库,在相关模式中创建表、视图、同义词、序列和一些其它的对象类型。 |
| RESOURCE | 能在相关模式中创建表、序列、数据镞、过程、函数、包、触发器、对象类型、基于函数的索引和用户自定义的操作符。 |
| DBA | 能执行任何数据库功能。 |
| SELECT_CATALOG_ROLE | 查询管理员(DBA_)数据字典视图 |
| EXECUTE_CATALOG_ROLE | 能运行预制的DBMS工具包 |
(8).创建角色
GRANT ROLE role [ NOT IDENTIFIED | IDENTIFIED BY password ]
(9).给角色授予系统权限和角色
GRANT privilege|role [, privilege|role ] … TO role [, role ] … [WITH ADMIN OPTION]
(10).给角色授予对象权限
同“授予用户对象权限”。但不允许向一个角色授予用于表的REFERENCES对象权限。
(11).向用户授予角色
GRANT role [, role ] … TO user [, user ] … [WITH ADMIN OPTION ]
(12).设置用户的缺省角色
ALTER USER user
[ DEFAULT ROLE
{ role [, role ] …
| ALL [ EXCEPT role [, role ] … ]
| NONE } ]
(13).启用和禁用角色
SET ROLE
{ role [IDENTIFIED BY password] \
[, role [IDENTIFIED BY password]…]
| ALL [EXCEPT role [, role ] .. ]
| NONE }
13.设置表空间限额
ALTER USER user
[ QUOTA {integer [ K | M] |UNLIMITED } ON tablespace] …
若要为所有的表空间授予无限制的定额,可直接给用户授予UNLIMITED TABLESPACE权限。如:
GRANT UNLIMITED TABLESPACE TO rlane;
不能向角色授予该权限。
14.资源限制
(1).启用资源限制
缺省时,启动数据库不实施资源限制。要启用/禁止该限制,使用如下命令:
ALTER SYSTEM
SET RESOURCE_LIMIT = { TRUE | FALSE }
该命令只对当前实例有效,若要永久使用资源限制,编辑服务器的初始化参数文件,包含如下设置:
RESOURCE_LIMIT = TRUE
(2).创建资源配置表
CREATE PROFILE profile LIMIT
[SESSIONS_PER_USER {integer|UNLIMITED|DEFAULT}]
[CPU_PER_SESSION {integer|UNLIMITED|DEFAULT}]
[CPU_PER_CALL {integer|UNLIMITED|DEFAULT}]
[CONNECT_TIME {integer|UNLIMITED|DEFAULT}]
[IDLE_TIME {integer|UNLIMITED|DEFAULT}]
[LOGICAL_READS_PER_SESSION {integer | UNLIMITED | DEFAULT}]
[LOGICAL_READS_PER_CALL {integer | UNLIMITED | DEFAULT}]
[COMPOSITE_LIMIT {integer | UNLIMITED | DEFAULT}]
[PRIVATE_SGA {integer [K|M]| UNLIMITED | DEFAULT}]
[FAILED_LOGIN_ATTEMPTS {integer | UNLIMITED | DEFAULT}]
[PASSWORD_LIFE_TIME {integer | UNLIMITED | DEFAULT}]
[PASSWORD_REUSE_TIME {integer | UNLIMITED | DEFAULT}]
[PASSWORD_REUSE_MAX {integer | UNLIMITED | DEFAULT}]
[PASSWORD_LOCK_TIME {integer | UNLIMITED | DEFAULT}]
[PASSWORD_GRACE_TIME {integer | UNLIMITED | DEFAULT}]
[PASSWORD_VERIFY_FUNCTION {NULL | function | DEFAULT } ]
(3).更改资源配置表设置
ALTER PROFILE profile LIMIT
[SESSIONS_PER_USER {integer|UNLIMITED|DEFAULT}]
[CPU_PER_SESSION {integer|UNLIMITED|DEFAULT}]
[CPU_PER_CALL {integer|UNLIMITED|DEFAULT}]
[CONNECT_TIME {integer|UNLIMITED|DEFAULT}]
[IDLE_TIME {integer|UNLIMITED|DEFAULT}]
[LOGICAL_READS_PER_SESSION {integer | UNLIMITED | DEFAULT}]
[LOGICAL_READS_PER_CALL {integer | UNLIMITED | DEFAULT}]
[COMPOSITE_LIMIT {integer | UNLIMITED | DEFAULT}]
[PRIVATE_SGA {integer [K|M]| UNLIMITED | DEFAULT}]
[FAILED_LOGIN_ATTEMPTS {integer | UNLIMITED | DEFAULT}]
[PASSWORD_LIFE_TIME {integer | UNLIMITED | DEFAULT}]
[PASSWORD_REUSE_TIME {integer | UNLIMITED | DEFAULT}]
[PASSWORD_REUSE_MAX {integer | UNLIMITED | DEFAULT}]
[PASSWORD_LOCK_TIME {integer | UNLIMITED | DEFAULT}]
[PASSWORD_GRACE_TIME {integer | UNLIMITED | DEFAULT}]
[PASSWORD_VERIFY_FUNCTION {NULL | function | DEFAULT } ]
(4).手工强制用户口令过期
ALTER USER user PASSWORD EXPIRE
(5).使用口令复杂性检查
将PASSWORD_VERIFY_FUNCTION设置为一个函数名,若不使用,则将其置为NULL。
函数可参考$ORACLE_HOME/rdbms/admin/utlpwdmg.sql。
(6).设置用户的配置表
ALTER USER user PROFILE profile
(7).更改数据库的缺省配置表
ALTER PROFILE default LIMIT …
缺省配置表名为profile。
15.管理表空间
(1).创建表空间
CREATE TABLESPACE tablespace
DATAFILE
‘filename’ [SIZE integer [K|M] ] [REUSE]
[ AUTOEXTEND
( OFF
| ON
[NEXT integer [K|M] ]
[MAXSIZE {UNLIMITED |integer [K|M]}] } ]
[, … other data file specifications … ]
[ ONLINE|OFFLINE]
[PERMANENT|TEMPORARY]
(2).修改数据文件的存储特性
ALTER DATABASE
DATAFILE ‘filename’
{ RESIZE integer [K|M]
| AUTOEXTEND
{ OFF
| ON [NEXT integer [K|M]] [MAXSIZE {UNLIMITED | \
integer[K|M] } ] } }
(3).转化成临时表空间或永久表空间
ALTER TABLESPACE tablespace [ PERMANENT | TEMPORARY ]
(4).合并表空间数据文件中的空闲空间
ALTER TABLESPACE tablespace COALESCE
(5).控制表空间的可用性
ALTER TABLESPACE tablespace
{ ONLINE | OFFLINE [ NORMAL | TEMPORARY | IMMEDIATE
| FOR RECOVER ] }
16.控制文件
查看当前的控制文件,可查表v$controlfile。或者查询v$parameter视图:
SELECT name, value FROM v$parameter WHERE name = ‘control_files’;
17.段、区间和数据块
Oracle为数据库对象(表、索引、数据镞等)分配一组连续的数据块作为区间。段是专用于数据库对象存储的所有区间的集合。
数据库可以包含许多不同类型的段,如数据段、索引段、LOB段、溢出段、会滚段和临时段。
当创建数据库时,可以指定数据块的大小,块的大小必须等于服务器操作系统块的大小或其倍数的大小。
(1).在指定的表空间创建表
CREATE TABLE table ( … ) TABLESPACE tablespace;
(2).控制表区间的数量和大小
在创建表语句之后增加STORAGE子句:
CREATE/ALTER TABLE table (
…
)
STORAGE (
[ INITIAL integer [K|M] ]
[ NEXT integer [K|M] ]
[ MINEXTENTS integer ]
[ MAXEXTENTS { integer | UNLIMITED } ]
[ PCTINCREASE integer ]
(3).更改表区间的设置
ALTER TABLE table
STORAGE (
[ NEXT integer [K|M] ]
[ MAXEXTENTS { integer | UNLIMITED } ]
[ PCTINCREASE integer ]
(4).设置对象的数据块
在对象的CREATE命令后面增加如下设置:
[ PCTUSED integer ] [ PCTFREE integer ] [ INITRANS integer ] [ MAXTRANS integer ] [ STORAGE ( … other storage parameters … [ FREELIST GROUPS integer ] [ FREELISTS integer ] ) ]
(5).为对象存储进行缺省设置
可以在对象使用的表空间中进行缺省设置:
CREATE/ALTER TABLESPACE tablespace
…
DEFAULT STORAGE (
[ INITIAL integer [K|M] ]
[ NEXT integer [K|M] ]
[ MINEXTENTS integer ]
[ MAXEXTENTS { integer | UNLIMITED } ]
[ PCTINCREASE integer ]
18.回滚段
Oracle使用回滚段来记录事务的回滚数据,回滚段是一个区间构成的环形结构。
每个Oracle数据库都至少有一个会滚段,即SYSTEM(系统)回滚段。当创建新的数据库后,应该创建附加的回滚段。
数据库中可以有多个回滚段。多个事务可以共享一个单独的回滚段,但一个事物从不使用超过一个的回滚段。
(1).创建回滚段
CREATE [PUBLIC] ROLLBACK SEGMENT segment
[TABLESPACE tablespace ]
[STORAGE (
[INITIAL integer [K|M] ]
[NEXT integer [K|M] ]
[MINEXTENTS integer ]
[MAXEXTENTS integer ]
[OPTIMAL { integer [K|M] | NULL } ] ) ]
回滚段始终不少于两个区间(即MINEXTENTS>=2)。
(2).控制回滚段的可用性
ALTER ROLLBACK SEGMENT segment
{ ONLINE | OFFLINE }
(3).更改回滚段的存储设置
ALTER ROLLBACK SEGMENT segment
STORAGE (
[NEXT integer [K|M] ]
[MINEXTENTS integer ]
[MAXEXTENTS integer ]
[OPTIMAL { integer [K|M] | NULL } ] ) ]
(4).指定事务使用的回滚段
SET TRANSACTION USE ROLLBACK SEGMENT segment
19.表分区
(1).创建范围分区表
CREATE TABLE table
( … columns and constraints … )
PARTITION BY RANGE ( column [, column] … )
( PARTITION [ partition ]
VALUES LESS THAN ( {value list | MAXVALUE} )
[ PCTFREE integer ] [ PCTUSED integer ]
[ INITRANS integer ] [ MAXTRANS integer ]
[ TABLESPACE tablespace ]
[ STORAGE ( … ) ]
[, … ] )
(2).更改范围分区表
增加:
ALTER TABLE table
ADD PARTITION [ partition ]
VALUES LESS THAN ( {value list | MAXVALUE} )
[ PCTFREE integer ] [ PCTUSED integer ]
[ INITRANS integer ] [ MAXTRANS integer ]
[ TABLESPACE tablespace ]
[ STORAGE ( … ) ]
删除:
ALTER TABLE table DROP PARTITION [ partition ]
(3).创建散列分区表
PARTITION BY HASH ( column [, column ] … )
{ PARTITION integer STORE IN ( tablespace [, tablespace ] … )
| ( PARTITION [ parition ]
[ PCTFREE integer ] [ PCTUSED integer ]
[ INITRANS integer ] [ MAXTRANS integer ]
[ TABLESPACE tablespace ]
[ STORAGE ( … ) ]
[, … ] ) }
20.索引分区
(1).创建全局索引
在CREATE INDEX中增加GLOBAL、PARTITION BY RANGE子句,形式同前面CREATE TABLE。
(2).创建局部、等同分区索引
在CREATE INDEX语句中增加LOCAL关键字。