Oracle入门

立此存照

Oracle入门

数据库的基本概念

数据  data    数据库  DataBase(DB) 数据库管理系统 DataBase Management System(DBMS)

数据库管理员 DataBaseAdministrator(DBA) 数据库系统 DataBaseSystem(DBS)

数据模型 DataBaseModule(DB) 关系数据库Relational DataBase (RDB)

关系数据库管理系统 Relational DataBase Management System(RDBMS)

系统全局区SGA

关系数据库中使用数据表来存储数据,数据表由行和列组成,行通常叫做记录,列通常叫做字段。

Oracle是分布式数据库。

Oracle数据库是一个数据的集合,该集合被视为一个逻辑单元。

Oracle逻辑组件:包括表空间、段、区、数据块、模式对象。

表空间是Oracle数据库内部最高层次的存储逻辑结构。

创建用户自己的表空间:

语法:CREATE TABLESPACE tablespacename

         DATAFILE ‘filename’ [SIZE  INTEGER K|M|][AUTOEXTEND OFF|ON]

 

创建新用户并授权权限

CREATE USER username

IDENTIFIED BY password

[DEFAULT TABLESPASE tablespace]

[TEMPORARY TABLESPACE  tablespace]

 

授权用户权限                                                       

GRANT CONNECT  TO username;         GRANT RESOURCE TO username;

修改用户口令:ALTER  USER  username;   IDENTIFIEN BY  newpwd;

删除用户: DROP  USER  username  CASCADE;    级联删除关键字

 

数据库表对象

数据库的三个范式:

1、1NF  指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即不能有重复的属性。

2、2NF 满足第一范式的基础上,要求数据库表中的每一个实例或者行必须可以被唯一地区分;要求实体的属性完全依赖于主关键字。即第二范式就是属性完全依赖于主键。

3、3NF 满足第二范式的基础上,要求数据库表中不包含已在其他表中已包含的非主关键字信息;也就是说属性不依赖于其他非主属性。

SQL ------Structured Query Language

命令:

数据定义语言DDL----DataDefinition Language:CREATE   ALERT  DROP

数据操纵语言DML----- data manipulation language:INSERT   SELECT  DELETE  UPDATE 

事务控制语言TCL----Transaction Control Language :COMMIT  SAVEPOINT  ROLLBACK
数据控制语言DCL-----DataControlLanguage:GRANT  REVOKE  

创建简单的数据库表对象

语法:

CREATE TABLE table

(column datatype [, column datatype [, …]] );

示例:

CREATE TABLE STUDENT

(STUDENT_ID  NUMBER, NAME  VARCHAR2(20) , MAJOR  VARCHAR2(20) , BIRTHDAY DATE);

 

数据完整性的作用就是强制要求数据库中只能接受正确的、合理的数据,防止错误的或无效的数据被插入到表中。

Oracle 约束:实体完整性约束、域完整性约束、引用完整性约束、自定义完整性约束

约束:是一种命名对象

1、 NOT NULL 约束 ---确保列不包含空值。默认情况下列是没有定义NOT NULL约束的。

示例:CREATE TABLE teacher

 ( teacher_id NUMBER,

 name VARCHAR2(10) NOT NULL,

  zhicheng VARCHAR2(20),  zhiwu VARCHAR2(20));

2、 UNIQUE约束-----要求列或者列的组合是唯一的。只有UNIQUE约束时,是允许列有空值的,但只能有一个空值。

示例:CREATE TABLE teacher

  ( teacher_id NUMBER,name VARCHAR2(10),

  zhicheng VARCHAR2(20),zhiwu VARCHAR2(20),

  CONSTRAINT teacher_name UNIQUE(name));

3、 PRIMARY KEY 主键约束-----为表创建一个主键。每一个表中只能创建一个主键。强制列或列的组合的值具有唯一性。不允许有空值或重复的值。

示例:CREATE TABLE teacher

 (  teacher_id NUMBER,name VARCHAR2(10),

   zhicheng VARCHAR2(20),zhiwu VARCHAR2(20),

CONSTRAINT teacher_pk PRIMARY KEY(teacher_id),

CONSTRAINT teacher_name UNIQUE(name));

 

4、 外键约束FROEIGN KEY ----指明一个列或列的组合作为一个外键,并且引用于其他表的主键。

示例:CREATE TABLE student

 ( student_id NUMBER,name VARCHAR2(10),

  major VARCHAR2(20),birthday DATE,

  teacher_id NUMBER,

  CONSTRAINT student_pk foreign key(teacher_id)

 REFERENCES teacher(teacher_id));

 

5、 检查约束 CHECK -----CHECK关键字后面的括号中是检查条件

示例:CREATE TABLE newstudent

 ( student_id NUMBER,name VARCHAR2(10),

 major VARCHAR2(20),age NUMBER,

CONSTRAINT newstudent_ck check(age<25)

);

 

修改表

语法:

ALERT TABLE table

{

ADD { field datatype | CONSTRAINT multified }

| DROP {COLUMN field | CONSTRAINT  multified }

| RENAME {COLUMN|CONSTRAINT} oldname TO newname

| MODIFY  field datatype

}

其中:

table 表示表的名称。

filed 表示要添加或删除列的名称

datatype 表示该列的数据类型及其长度。

oldname、newname 分别表示原名字和新名字

CONSTRAINT multified  表示添加或删除的约束

ADD 表示添加列或约束

DROP表示删除列或约束

MODIFY 表示修改列

RENAME 对列或约束进行重命名

示例:完成对表STUDENT的修改

添加主键约束:

ALTER TABLE  STUDENT   ADD CONSTRAINT STUDENT_PK  PRIMARY KEY (STUDENT_ID);

添加一个新列age类型为NUMBER:

ALTER TABLE STUDENT   ADD AGE NUMBER;

修改name列的大小有VARCHAR2(10)改变为VARCHAR2(20):

ALTER  TABLE STUDENT  MODIFY  NAME VARCHAR2(20);

删除表:DROP TABLE STUDENT;

对表重命名:

RENAME  OLDTABLENAME  TO  NEWTABLENAME;

 

SQLPlus下清屏clear screen或者clea scre

----创建表EMPLOYEES----

CREATER TABLE EMPLOYEES (EMPID,NAME,AGE,GENDER,ADDRESS);

----修改表-----

ALTER TABLE EMPLOYEES ADD CONSTRAINT AGE_PK CHECK(AGE>0);

修改约束:ALTER TABLE EMPLOYEES MODIFY AGE CHECK(AGE>18);

添加非空约束:ALTER TABLE EMPLOYEES MODIFY NAME CONSTRAINT NAME_NOTNULL NOT NULL;

添加列(或字段):ALTER TABLE EMPLOYEES ADD JOB VARCHAR2(6) UNIQUE;

向字段JOB添加数据:UPDATE EMPLOYEES SET JOB=’Writer’ WHERE EMPID=1;

 

SQL语言基础

SQL中表达式由变量、运算符、常量组成。

变量一般就是表中的列名,常量为固定不变的数值符号,字符型和DATE常量需要用单引号括起来,数值型和二进制字符串不需要。

运算符:有算术运算符、关系运算符、逻辑运算符、通配运算符(通配运算符常和LIKE关键字配合使用)

 

运算符

含义

示例

=

等于

AuthorID5

>

大于

Price>50

<

小于

Quantity<20

>=

大于等于

Age>=50

<=

小于等于

Price<=100

<>

不等于

Birthday<>‘1970-10-10’

%

任意长度的字符串

Email Like ‘%@%.com’

‘_’

任意一个字符

AuthorName Like ‘_’

and

连接的两个条件表达式都为True,表达式结果才为True,否则为False

A > 90 and B >100

or

连接的两个条件表达式中有一个为True,则表达式结果就为True

A >90 or B >100

not

否定条件

not (A > 90)

运算顺序优先级:NOT>算术表达式>条件表达式>AND > OR.

数据操纵语言:

INSERT 命令:INSERT INTO TABLE [(COLUMN[,COLUMN,.....])] VALUES (VALUE[,VALUE....]);

其中:“[]”代表可选的;

table 表示添加记录的表名

column[, column…]  表示添加数据的列名,如果有多列用逗号隔开

value[,value…] 添加的具体数据,如果有多个值用逗号隔开

DESC STUDENT;-----查看表的结构在SQL PLUS环境下。.

INSERT INTO 语句:

INSERT INTO STUDENT    VALUES (3,’黄晓明’,’计算机信息与工程’,’08-9月-76’,1);

另一种写法:

INSERT INTO STUDENT (student_id,name,major,birthday,teacher_id)

 VALUES(3,'黄晓明','计算机信息与工程','08-9月-75',1);

在执行INSERT语句时应注意以下问题:

1、值列表的个数必须与列名数目保持一致。

2、值列表中值的数据类型、精度要与对应的列类型保持一致。

3、可以不指定列名,但值列表中值的顺序应该与表中字段顺序保持一致。

4、添加的值必须符合表的约束条件,否则不能添加成功。

UPDATE命令:

语法:UPDATE TABLENAME  SET  COLUMN=VALUE,[,COLUMN=VALUE,...][WHERE CONDITION];

其中:

1、column = value 为必选项,用于更新表中某列数据,在SET后面可以出现多个,只需用逗号隔开。

2、Where关键字是可选的,用来限定条件,如果Update语句不限定条件,表中所有数据行都将被更新。

注意事项:1、可以更新主键列数据,但应保证更新后的主键列数据不能出现重复信息,否则将更新失败!

2、可以更新表中外键列数据,但应保证新数据在主键表的中应事先存在。

DELETE 命令:

语法:DELETE  [FROM]  TABLE [WHERE CONDITION];

使用Delete删除数据时,不能删除主键值被引用的数据行。

事务是单个的工作单元。

如果某个事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分。

如果事务遇到错误且必须取消或回滚,则所有数据更改均被清除。一个逻辑工作单元必须有ACID属性,只有这样才能成为一个事务。

1、数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。

2、事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。

3、事务只有在提交(COMMIT)后,对数据库的更改才可以永久保持,事务在回滚(ROLLBACK)后,将事务未提交的操作恢复到事务开始的状态。

事务的特征:原子性ATOMICITY、一致性CONSISTENCY、隔离性ISOLATION、持续性DURABILITY。

常用命令:

COMMIT:此命令用于提交并结束事务处理,只用使用COMMIT命令,才可以对数据库执行永久性操作;

ROLLBACK: 此命令用来撤销在当前事务中完成的操作,可以回滚整个事务处理,一遍撤销有SQL语句做出的所有修改,也可以将事务回滚到某个保存点,以回滚该保存点后的修改

SAVEPOINT :此命令保存点类似于标记,用于标记事务中可以应用回滚的点。

示例:

UPDATE STUENT SET BIRTHDAY= ’07-8月-80’ WHERE STUDENT_ID=1;

SAVEPOINT MARK1;

DELETE STUDENT  WHERE STUDENT_ID=1;

ROLLBACK  TO  SAVEPOINT MARK1;

COMMIT;

数据控制语言为用户提供权限控制命令。

Oracle用户权限有两种类型:

系统权限:允许用户执行某些数据库操作

对象权限:允许用户对某一个特定对象执行特定操作(SELECT   UPDATE  INSERT DELETE ALL)

授权GRANT命令:

语法:GRANT   PRIVILEGES  ON  OBJECT_NAME TO  USERNAME;

示例:

将student表的select、update权限授予用户anbo

GRANT SELECT,UPDATE ON STUDENT TO  ANBO;

如果用’WITH  GRANT POTION’授予用户权限,则接受该权限的用户可以将此权限授予其他用户。

GRANT  ALL ON  STUDENT TO ANBO   WITH  GRANT  OPTION;

REVOKE命令:撤销已授予用户的权限,使用REVOKE命令

示例:将已授权账户为ANBO的用户all 权限撤销:  REVOKE  ALL ON  STUDENT  TO  ANBO;

GRANT  SELECT ON SCOTT.EMP TO ANBO;    -----将scott.emp表的select权限授予anbo用户。

alter user scott account unlock;          ---------为scott账户开锁

alter user scott identified by orcl;          ------为scott账户重新设置密码;

DROP TABLE WANSHI.EMP;                              -- 删除表

CREATE TABLE WANSHI.EMP AS SELECT * FROM SCOTT.EMP; -复制表

在SQLplus下切换用户 使用DISCON  和 CONN 更换账户

设置sqlplus模式显示行宽度(当前连接生效):

show linesize; --查看当前的linesize宽度

set linesize 300; --设置linesize宽度

在SQLPlus下设置输出宽度 SET LINESIZE NUMBER;  NUMBER为宽度像素。

设置sqlplus模式显示总行数(当前连接生效):

show pagesize; --查看目前的pagesize

set pagesize 300; --设置pagesize为300

 

           

SQL查询语句        

SELECT  [DISTINCT]  select_list      

FROM   table_name

[WHERE子句]

[ORDER BY  子句 [ASC | DESC]]

示例:

--查询数据表中部分的列:

SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP;

---使用*查询所有列

SELECT * FROM EMP;

---使用AS 子句将列转别名

SELECT EMPNO AS 员工编号, ENAME AS 姓名, SAL AS 薪水, DEPTNO AS 部门编号 FROM EMP;

---使用||连接多个字段,合并成一列

SELECT ENAME ||’的薪水是’||SAL ||’元’ FROM EMP;

---使用DISTINCT关键字屏蔽重复数据

SELECT DISTINCT DEPTNO FROM EMP;

----使用ROWID ROWNUM 伪列

SELECT ROWID, ENAME FROM EMP;

SELECT ROWNUM ,ENAME FROM EMP;

Oracle 中伪列就像一个表列,但是它并没有存储在表中,伪列可以从表中查询,但不能插入、更新和删除它们的值。常用的伪列有ROWID和ROWNUM。

1、ROWID 是表中行的存储地址,该地址可以唯一地标识数据库中的一行,可以使用 ROWID 伪列快速地定位表中的一行

2、ROWNUM 是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数

查询中的条件

1、 使用WHERE 过滤部分行数据

SELECT * FROM EMP WHERE ENAME=’MILLER’;

2、 使用IS NULL 查询空数据

SELECT * FROM EMP WHERE COMM IS NULL;

3、 LIKE进行模糊查询  通常与通配符配合使用

WHERE<列名> [NOT] LIKE <字符表达式>

SELECT * FROM EMP WHERE ENAME LIKE ‘%M%’;

4、 WHERE <列名> IN <[常量列表]>

其中:<常量列表>中各常量值用逗号隔开

示例:SELECT * FROM EMP WHERE DEPTNO IN (10,20);

等价于:SELECT * FROM EMP WHERE DEPTNO= 10 OR DEPTNO=20;

5、 WHERE <列名> [NOT] BETWEEN <起始表达式> AND <结束表达式>;

注意:起始表达式和结束表达式不能颠倒。

示例:SELECT * FROM EMP WHERE SAL BETWEEN 2000 AND 3000;

SELECT * FROM emp   WHERE hiredate

between to_date('1981-01-01','YYYY-MM-DD')

and to_date('1982-01-01','YYYY-MM-DD');

6、排序:使用关键字 ORDER BY 子句 默认是升序   使用DESC为降序,ASC 为升序

      SELECT * FROM EMP ORDER BY SAL ASC,COMM DESC;

日期函数:

函数

说明

示例

输出结果

ADD_MONTHS

返回给指定的日

期加上指定的月

数后的日期值

SELECT  ADD_MONTHS(sysdate,2) FROM dual

13-11-10

MONTHS_BETWEEN

返回两个日期之

间的月数

SELECT   MONTHS_BETWEEN(’08-5-10’, ’08-5-09’) FROM   dual;

12

LAST_DAY

返回指定日期当

月的最后一天

SELECT  LAST_DAY(SYSDATE)  FROM dual;

30-9-10

NEXT_DAY

返回指定的下一

个星期几的日期

SELECT   NEXT_DAY(SYSDATE,'星期二') FROM dual;

14-9-10

 

 

字符函数:

函数

说明

示例

输出结果

INITCAP(char)

首字母大写

select   initcap('hello') from dual;

Hello

LOWER(char)

转换成小写

select   lower(ename) from emp where empno=7369

smith

UPPER(char)

转换成大写

select   upper('jack') from dual;

JACK

LTRIM(char,char)

左裁剪

select   ltrim( 'abcdefgh','ab') from dual;

cdefgh

RTRIM(char,char)

右裁剪

select   rtrim( 'abcdefgh','gh') from dual;

abcdef

TRIM(char   FROM trim_char)

裁剪

SELECT TRIM   ( '9' FROM '99998769789999') FROM dual

876978

TRANSLATE(char,from,to)

按字符翻译

select   translate('jack','abcd' ,'1234') from dual;

j13k

REPLACE(char,from,to)

按字符串翻译

select   replace('jack and jue' ,'j','bl') from dual;

black and   blue

INSTR(char,substr)

查找字符串位置

select   instr ('HelloWorld','o') from dual;

5

SUBSTR(char,pos,len)

取字符串

select   substr('I am tiger.',6,5) from dual;

tiger

CONCAT(char1,char2)

连接字符串

select   concat ('Hello',' world') from dual;

Hello world

LENGTH(str)

返回字符串的长度

select   length (ename) from emp where empno=7369;

5

数字函数

函数

说明

示例

输出结果

ABS(n)

取绝对值

select abs(-25) from dual;

25

CEIL(n)

向上取整

select ceil(44.1) from dual;

45

FLOOR(n)

向下取整

select floor(44.8) from dual;

44

POWER(m,n)

m的n次幂

select power(3,2) from dual;

9

MOD(m,n)

取余数

select mod(10,3) from dual;

1

ROUND(m,n)

四舍五入

select round(100.256,2) from dual;

100.26

TRUNC(m,n)

截断

select trunc(100.256,2) from dual;

100.25

SQRT(n)

取算术平方根

select sqrt(4) from dual;

2

转换函数

函数

说明

示例

输出结果

TO_CHAR

将日期或数字转换成字符

SELECT   TO_CHAR(sysdate,'YYYY""MM""DD""')   FROM dual

20100913

TO_DATE

将字符转换

成日期

SELECT   TO_DATE('2007-12-06' , 'yyyy-mm-dd') FROM dual;

06-12-07

TO_NUMBER

将字符转换

成数字

SELECT   SQRT(TO_NUMBER('100')) FROM dual;

10

 

分页查询和多表连接查询

聚合函数:对表一组记录进行操作,每组只返回一个值。(行==记录)

SUM()函数: SELECT SUM(SAL) FROM EMP;

MIN()函数:SELECT MIN(SAL) FROM EMP;

MAX()函数: SELECT MAX(SAL) FROM EMP;

MAX和MIN除了计算数值列,还可以用于计算字符型以及日期时间类型数据列

AVG()函数: SELECT AVG(SAL) FROM EMP;

COUNT()函数和COUNT(*)函数: SELECT COUNT(COMM) FROM EMP;

           COUNT(列名):返回指定列非空值个数。

           COUNT()函数 获取每组中非空值的个数

           SELECT COUNT(*) FROM EMP; 获取每组中所有数据的个数;

分组统计:该功能使用GROUP BY 子句实现

语法:

SELECT 字段列表 [聚合函数] FROM 表 

[WHERE 条件] [GROUP BY <字段列表>][HAVING 条件];

注意: SELECT语句中除了聚合函数外所有列,应写在GROUP BY 语句后面,否则将出现错误;

字段列表中可以有多个字段,各字段用逗号隔开。

示例:SELECT DEPTNO,ROUND(AVG(SAL),4) FROM EMP GROUP BY DEPTNO;

SELECT DEPTNO,ROUND(AVG(SAL),4) AS "平均" FROM EMP GROUP BY DEPTNO;

SELECT DEPTNO,ROUND(AVG(SAL),4)平均 FROM EMP GROUP BY DEPTNO;

SELECT DEPTNO,ROUND(AVG(SAL),4) AS 平均 FROM EMP GROUP BY DEPTNO;

HAVING子句的使用:对分组后的数据进行筛选。

示例:

SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING AVG(SAL)>2000;

基本查询语法总结:

SELECT 字段列表 [聚合函数] FROM 表 [WHERE 条件] [GROUP BY <字段列表>]

           [HAVING 条件] [ORDEY BY 字段列表 ASC|DESC];

子查询:就是在查询语句内的查询语句,就是在SELECT语句中还有SELECT语句。

语法:SELECT <列名> FROM 表 (SELECT 子句)

           WHERE 子句(SELECT 子句)

                 GROUP BY 子句

                      HAVING 子句(SELECT 子句)

                 [ORDEY BY 排序列];

示例:SELECT * FROM EMP

WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE LOC=’NEW YORK’);

示例:SELECT ROWNUM,E.* FROM EMP E WHERE ROWNUM<=10;

      注意:ROWNUM条件只能是<=或<某一个值,不能使用>=或>符号;

示例:SELECT * FROM (SELECT ROWNM RNUM,E.* FROM EMP E )

WHERE RNUM BETWEEN 6 AND 10;

WHERE 后面的RNUM不能写成 RNUM <= 10 AND RNUM >=6;

连接查询:多表连接查询 是将多个表中的数据进行关联组合,从中获取所需的数据信息。

在Oracle中在做连接查询时,首先会对关联的表做笛卡尔积得操作。

笛卡尔积是由两个关系相乘而来,也可理解为两个表的乘积,结果依然是一张表。

                 多表连接查询可以分为:交叉连接、等值连接、外连接、子连接等等

 

示例:SELECT e.ename,e.deptno,d.deptno, d.loc

FROM emp e,dept d

where e.deptno=d.deptno;

 

左外连接: SELECT <列名> FROM 左表  LEFT  [OUTER] JOIN  右表

ON 左表.列名  条件运算符  右表.列名

[WHERE 条件]

[ORDER BY  排序列]

示例:SELECT e.ename,e.sal,d.dname FROM emp e LEFT OUTER JOIN dept d

ON e.deptno=d.deptno;

右外连接:SELECT <列名>FROM左表  RIGHT  [OUTER] JOIN  右表

ON左表.列名  条件运算符  右表.列名

[WHERE 条件]

[ORDER BY  排序列]

示例:SELECT e.ename,e.sal,d.dname FROM emp e RIGHT OUTER JOIN dept d

ON e.deptno=d.deptno;

子连接:一种比较特殊的情况,查询的字段全部来自一张表

同一张表两次加载到内存中,形成理论上的两张表完成连接

示例:SELECT  distinct e2.empno,e2.ename FROM emp e1 ,emp e2   WHERE e1.mgr=e2.empno ;

这里少了一章  同义词 序列  视图  索引

数据库对象

同义词是数据库对象的一个别名,可以是表、视图、序列、过程、函数、程序包及其他同义词等。其作用是简化SQL语句,隐藏对象,提供对对象的公共访问等等

使用同义词前要确保用户拥有访问对象的权限。

创建同义词的语法:

CREATE  [OR REPLACE]  [PUBLIC]SYNONYM synonym_name FOR OBJECT;

其中:SYNONYM 是创建同义词的名称;OBJECT 表示Oracle的对象;

PUBLIC 表示常见共有同义词; OR REPLACE 表示在同义词存在的情况下替换该同义词

私有同义词是普通用户创建的,并且只有创建该私有同义词的用户能使用。且不可同当前模式的对象名称相同;前提是用户要拥有CREATE SYNONSYM系统权限。

例:scott授权给用户zhang创建emp表的同义词权限

首先登陆scott用户的数据库,执行命令:GRANT ALL ON EMP TO ZHANG;

然后登陆zhang用户,执行命令:CREATE SYNONYM  EMP FOR SCOTT.EMP;

在执行命令:SELECT * FROM EMP;访问scott用户的emp表了。

公有同义词:由数据库管理员创建。

以system用户身份登陆数据库,执行命令:CREATE PUBLIC  SYNONYM EMP_NEW_NAME FOR SCOTT.EMP;

在将公有同义词EMP_NEW_NAME访问权限授权给zhang用户:GRANT ALL ON EMP_NEW_NAME TO ZHANG;

在以zhang的身份登陆数据库访问:SELECT * FROM EMP_NEW_NAME;

删除同义词要有相应的权限,删除命令是:DROP [PUBLIC] SYNONYM synonym_name;

序列:Oracle提供的一个对象, 用来生成唯一、连续的整数。序列通常用来自动生成主键或唯一的值。语法:

CREATE SEQUENCE  SQE_NAME  [START WITH INTEGER] [INCREMENT BY INTEGER]

[MAXVALUE INTEGER | NOMAXVALUE] [MINVALUE INTEGER | NOMINVALUE]

    [CYCLE | NOCYCLE] [CACHE INTEGER | NOCACHE]

创建和访问序列:序列创建好后,被调用为某些表生成序列号,序列值的生成和查询需要和NEXTVAL和CURRVAL关联使用;NEXTVAL产生并返回下一个序列值,CURRVAL只会返回当前序列的值;对于序列的第一个操作必须使用NEXTVAL。

示例:CREATE SEQUENCE std_seq

    START WITH 1

    INCREMENT BY 10

    MAXVALUE 2000

    MINVALUE 1

    CYCLE

    CACHE 10;

例如:SELECT STD_SEQ.NEXTVAL  FROM DUAL;

SELECT STD_SEQ.CURRVAL  FROM DUAL;

更改序列:除了不能修改序列的起始值外,其他参数都可以修改。

语法: ALTER  SEQUENCE  SQE_NAME   [INCREMENT  BY INTEGER] [ MAXVALUE INTEGER | NOMAXVALUE]

[MINVALUE INTEGER | NOMINVALUE]  [CYCLE | NOCYCLE] [CACHE INTEGER | NOCACHE];

删除序列:DROP SEQUENCE  SQE_NAME;

视图:可以被看成虚拟表或者存储查询,创建视图所依据的表称为“基表”。

语法:

CREATE [OR REPLACE] [FORCE] VIEW          ----OR REPLACE 如果视图存在,将重新创建该视图

    view_name [(alias[, alias]...)]       ----FORCE:无论基表是否存在,都将创建视图

    AS select_statement                    ----NOFORCE: 默认值,当基表存在时才创建视图

  [WITH CHECK OPTION]       ----WITH CHECK OPTION 指定只能插入或更新视图可以访问的行

  [WITH READ ONLY];         ----WITH READ ONLY 确保不能在此视图上执行任何DML操作

如果是一个简单视图,仅涉及一张表,且SELECT子句不包含函数表达式,则能通过该视图对表的数据执行DML操作。

如果视图中包括连接运算符、DISTINCT、集合运算符、聚合函数、GROUP BY 等的复杂视图,不能对该视图执行DML操作。

CREATE OR REPLACE VIEW EMP_DEPT_VIEW

AS

SELECT EMPNO,ENAME,HIREDATE,DNAME FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO;

在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE

视图上的DML语句有如下限制:

只能修改一个底层的基表

如果修改违反了基表的约束条件,则无法更新视图

如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图

如果视图包含伪列或表达式,则将无法更新视图

删除视图:DROP  VIEW VIEW_NAME;

索引:是与表关联的可选机构,就像书的目录一样。能够快速的访问数据。它只影响执行的速度。

语法:

CREATE INDEX IND_NAME ON TABLE_NAME (COLUMN_LIST) [TABLESPACE TBS_NAME]

IND_NAME:指所创建索引的名称。

TABLE_NAME:为之创建索引的表名

COLUMN_LIST:在其上创建索引的列名列表,可以基于多个列创建索引

TBS_NAME 为索引指定表空间。

索引有多种类型:唯一索引、组合索引、反向键索引、位图索引、函数索引。

唯一索引可以确保在定义索引的列中,表的任意两行的值都不相同。

语法:CREATE  UNIQUE INDEX  IND_NAME ON TABLE_NAME(COLUMN);

组合索引:在表中多个列上创建索引,组合索引中列的顺序是任意的,不必是表中相邻的列。

语法: CREATE  INDEX IND_NAME  ON TABLE_NAME(COLUMN1,COLUMN2,...);

反向键索引:

反向键索引反转索引列键值的每个字节

通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上

创建索引时使用REVERSE关键字

语法:CREATE  INDEX IND_NAME  ON TABLE_NAME(COLUMN) REVERSE;

位图索引:优点是适合用于低基数列,不直接存储ROWID,而是存储字节位到ROWID的映射。

语法:CREATE BITMAP  INDEX  IND_NAME  ON TABLE_NAME (COLUMN)  ;

函数索引:基于一个或多个列上的函数或表达式创建的索引

表达式中不能出现聚合函数

不能在LOB类型的列上创建

创建时必须具有 QUERY REWRITE 权限

示例: CREATE  INDEX EMP_INDEX  ON EMP( NVL(SAL,0) + NVL(COMM,0) );

索引中的分区:Oracle允许对索引分区,索引分区可存储在不同的表空间中。

共两个类型:局部分区索引和全局分区索引。

posted @ 2016-11-10 19:24  希望在田野上  阅读(914)  评论(0编辑  收藏  举报