Oracle-序列-存储过程-视图-索引-触发器

  1. 课程介绍
  • 1. 约束(掌握)
  • 2. 序列(掌握)
  • 3. 索引(掌握)
  • 4. 视图(掌握)
  • 5. 存储过程(掌握)
  • 6. 自定义函数(掌握)
  • 7. 触发器(掌握)
  1. 数据库对象的命名规则

一、对象名称必须以字母开头java

二、有效的字符包括数字、字母和三个特殊字符(# _ $)mysql

三、不要使用oracle的保留字做为对象名称sql

四、同一用户下的对象不能同名,即便是不一样的对象类型数据库

五、1-30个字符之间缓存

  1. ALTER TABLE  ddl语句

3.1.  增长字段,添加外键约束服务器

ALTER TABLE table并发

ADD    (column datatype [DEFAULT expr]oracle

                     [, column datatype]...);函数

 

3.2.  修改字段高并发

 

ALTER TABLE table

MODIFY      (column datatype [DEFAULT expr]

                     [, column datatype]...);

 

3.3.  删除字段

ALTER TABLE table

DROP  column        (columns);

 

 

  1. 约束

4.1.  主键(惟一+非空),惟一,非空,外键,check(mysql不支持)

 

一、NOT NULL  非空

二、UNIQUE Key       惟一键

三、PRIMARY KEY    主键(非空且惟一)

四、FOREIGN KEY     外键

五、CHECK                 检查

4.2.  好处

保存数据以前(jdbc层发出请求,直接在数据库插入)会验证数据是否正确

只有保存成功,数据就正确

4.3.  坏处

影响插入\修改的效率

  1. 约束的名称

5.1.  建立表的时候添加列级约束

 

 

 

 

SYS_C005456 由oracle自动取名

 

5.2.  建立表的时候添加表级约束

 

 

 

5.3.  建立表的时候添加表级外键约束

 

5.4.  ALTER TABLE增长约束

 

 

5.5.  软件公司怎样使用约束

通常软件公司在开发阶段都添加约束,系统上线删除约束,从而提供性能

  1. 序列

6.1.  做用

处理主键的自动生成

6.2.  Mysql主键

自动自增AUTO_INCREMENT,自增的值存储到表的ddl语句

 

6.3.  建立序列

CREATE SEQUENCE [user.]sequence_name
[increment by n]
[start with n]
[maxvalue n|]
[minvalue n ];
[cache]

     [NOCYCLE|CYCLE]

     INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。

     START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。

     MAXVALUE:指定序列可生成的最大值。

     MINVALUE:指定序列的最小值
          NOCYCLE:一直累加,不循环

     CYCLE:累加到最大值循环

 

6.4.  获取主键的并发

默认序列里面缓存20个,根据状况进行适当修改

 

 

cache:默认值是20

      序列里的缓冲是大量并发提取序列值时提高性能的一种手段

因为序列操做是原子操做,若是没有缓冲,序列的访问将只能由一个事务独占,独占期间阻塞其它事务的访问,且必定会涉及硬盘操做。这样若是有对一个序列的大量并发操做的话,系统性能将会降低。

缓冲是指事先成批的提取序列值,缓冲在内存中,供多个事务同时访问(每一个事务占一个缓冲的序列值),且访问期间若是没有用尽缓冲是不用写硬盘的,可在大幅度提升并发访问序列的性能。但带来的问题是序列值可能不连续(但确定保证惟一),如并发访问序列值后有些事务回滚等操做,都会带来缓冲序列值的不连续或丢失

6.5.  怎样使用序列

 

 

 

 

insert into employees_test(id,fullname)

values (seq_test.nextval,'xxxxxx0000');

6.6.  建议

通常一个表对应一个序列

6.7.  查看用户定义的序列
select t.sequence_name,t.min_value,t.max_value,

                   t.increment_by  from user_sequences t

6.8.  修改序列

alter sequence SEQ_TEST

cache 50;

6.9.  删除序列

DROP SEQUENCE [user.]sequence_name;

  1. 索引

7.1.  做用

方案(schema)中的一个数据库对象

在数据库中用来加速对表的查询

经过使用快速路径访问方法快速定位数据,减小了磁盘的I/O

与表独立存放,由 Oracle数据库自动维护

索引相似于一本书的目录

7.2.  自动建立的索引

若是表建立了主键,或者建立惟一约束,自动建立一个惟一索引

 

 

7.3.  哪些值能够建立索引?

1,外键通常要建立索引

2,常用的查询条件(放到where后面的)要建立索引。

若是使用like ‘%’操做,有些查询不会使用索引。

like 'a%  'a_'会使用索引

like  '%a'不会使用索引,能够经过把'a%'         name=abc      name=cba

select * from employees where reverse(name) like reverse('%abc');

like '%a%' 不会使用索引,形成全表扫描,看数据库表的数量的大小,500万如下

dba:晚上加班,分库(读数据库,写数据库)分表(往年数据变成一张只读表,今年的数据也是一张表)

3,索引不是越多越好(创建一个索引,使insert速度慢3倍,在加一个在慢2倍)

4,不要在可选值不多的属性上面建立索引:性别等;

五、对于那些定义为text, image和bit数据类型的列不该该增长索引

六、当修改性能远远大于检索性能时,不该该建立索引(分库分表:把往年查询的数据放到一个只读的表空间)

7.4.  手动建立索引

在一列或者多列上建立索引.

 CREATE INDEX index

 ON table (column[, column]...);

 

 

 

7.5.  删除索引

 

  1. 视图

视图也就是虚表,实际上视图就是一个命名的查询,用于改变基表数据的显示。

8.1.  做用

能够限制对数据的访问

可使复杂的查询变的简单

提供了数据的独立性

提供了对相同数据的不一样显示

能够提供查询性能,直接运行在数据库服务器

 

8.2.  建立视图

 

 

 

 

8.3.  行内视图

行内视图是在SQL语句中使用的一个带有别名的子查询.

在主查询FROM 子句中的子查询就是行内视图.

行内视图不是数据库的对象,因此不须要显式的建立.

  1. 表空间

就算有建表的权限,也不能建表,由于没有使用表空间的权限

通常来说,普通用户都是使用USERS表空间,也能够本身建立

9.1.  默认有那些表空间

9.2.  逻辑概念

 

9.3.  物理概念

 

9.4.  表空间的做用

1.控制数据库占用的磁盘空间;

二、Dba能够将不一样类型的数据对象部署到不一样的位置,这样有利于提升i/0性能,并有得于备份和恢复管理;

9.5.  建立表空间

表空间包含段,段包含区,区包含块

Create tablespace ts1 datafile 'd:\xxx.xml' size 20m uniform size 128k

Uniform表示区的大小为128K。

每一个文件有必定的限制,不要超过500M/1G。

 

 

9.6.  建表的时候,指定放置在表空间

Create table test1(id number(4),name varchar2(50)) tablespace ts1;

 

 

9.7.  授予it拥有ts1的表空间权限

System登陆

ALTER USER "IT" 

    QUOTA UNLIMITED

    ON "TS1"

9.8.  疯狂复制

 

 

 

 

 

9.9.  扩容表空间

9.9.1.   增长新的数据文件    原文件已经500M/1G

Alter tablespace ts1 add datafile 'd:\data0102.dat' size 20m;

9.9.2.   增长已有的数据文件

Alter database datafile 'd:\xxx.xml' resize 50m;

9.9.3.   自动扩展

ALTER DATABASE

    DATAFILE 'D:\TEST\DATA1.DBF' AUTOEXTEND

ON NEXT  512K MAXSIZE  1024M

9.10.         若是原来存储的位置,空间不够

先移动XXX.XML移动到其余有空间盘

9.10.1.        脱机

Alter tablespace ts1 offline;

 

9.10.2.        剪切到其余有空间盘

Ctrl+x  Ctrl+v

 

9.10.3.        修改存储位置

ALTER DATABASE

RENAME FILE 'D:\XXX.XML' TO 'e:\XXX.XML'

9.10.4.        联机

Alter tablespace ts1 online;

9.10.5.        扩容

ALTER DATABASE

    DATAFILE 'E:\XXX.XML' AUTOEXTEND

ON NEXT  20M MAXSIZE  1024M;

  1. 存储过程

10.1.         为何须要存储过程-提升性能

转帐业务:在同一个银行之间进行转帐

2个帐户,没有被冻结,是否有余额

A.2个帐户是否存在   2条select语句

B.是否被冻结         就用上面

C.是否有余额         就用上面

D.转帐               2条update语句

Jdbc:创建链接,实例化语句,发出sql,关闭资源  跑4次

 

把上面的全部业务逻辑,在数据库里面至关于封装到一个方法,存储过程

步骤A:

在存储过程发出2条sql,

把sql语句的结果加入一个数据库的游标对象CURSOR(相似于java.sql.ResultSet)里面

若是可以遍历游标对象,跳到步骤B

否:返回帐户不存在

步骤B:

发出2个update请求,进行转帐

Jdbc:创建链接,实例化语句,发出sql,关闭资源  跑1次

 

 

 

10.2.         建立存储过程语法

 

10.3.         建立一个没有返回值的存储过程

 

 

 

 

10.4.         建立一个有返回值的存储过程

 

有返回值的存储在命令窗体不能执行

10.5.         Java调用存储过程

 

 

 

 

 

  1. 自定义函数(必需要有返回值)

11.1.         语法

 

 

 

11.2.         自定义函数里面不能写dml语句

函数中不容许DML语句

形参必须为IN

 

 

11.3.         Java调用函数

 

 

 

 

  1. 触发器

监控若是发出了insert语句或者update、delete语句,触发一个事情

12.1.         分类

 

 

12.2.         语句级触发器

一个dml语句,只触发一次

 

12.3.         行级触发器

一个dml语句,能够触发屡次

Update 更新,delete 删除 12行,触发12次

 

 

 

 

 

12.4.         模式触发器

 

 

当前用户受限制:必须先删除模式触发器

system管理员不受限制

 

 

  1. 见多识广800条sql

13.1.         子查询分类

若是子查询里面须要用到主查询的表进行关联查询,就叫相关子查询

13.1.1.        相关子查询

子查询不能单独执行

 

Select * from table1 a

Where salary >(select avg(salary) from  table b where a.xxid=b.id)

 

13.1.2.        无关子查询

子查询能够单独执行

Select * from table

Where salary >(select avg(salary) from  table)

 

13.2.         神奇函数

 

 

 

 

13.3.         横向汇总和纵向汇总

 

  1. 课程总结

14.1.         重点

  1. 约束
  2. 序列
  3. 索引
  4. 视图
  5. 存储过程
  6. 触发器
  7. 自定义函数
相关文章
相关标签/搜索