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

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

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

3、不要使用oracle的保留字作为对象名称

4、同一用户下的对象不能同名,即使是不同的对象类型

5、1-30个字符之间

  1. ALTER TABLE  ddl语句

3.1.  增加字段,添加外键约束

ALTER TABLE table

ADD    (column datatype [DEFAULT expr]

[, 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不支持)

1、NOT NULL  非空

2、UNIQUE Key       唯一键

3、PRIMARY KEY    主键(非空且唯一)

4、FOREIGN KEY     外键

5、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,不要在可选值很少的属性上面创建索引:性别等;

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

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

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.控制数据库占用的磁盘空间;

2、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. 自定义函数

Oracle-序列-存储过程-视图-索引-触发器的更多相关文章

  1. Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器

    ---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...

  2. Oracle数据库游标,序列,存储过程,存储函数,触发器

    游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理, ...

  3. oracle 序列、视图、索引

    序列 创建 在sequences里 作用 生成自动增长(或减少)的整数值 经常添加数据时使用,可控性好 写法:序列名.nextval  获取下一个序列值 序列名.currval  获取当前序列值,不常 ...

  4. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  5. MySQL— 索引,视图,触发器,函数,存储过程,执行计划,慢日志,分页性能

    一.索引,分页性能,执行计划,慢日志 (1)索引的种类,创建语句,名词补充(最左前缀匹配,覆盖索引,索引合并,局部索引等): import sys # http://www.cnblogs.com/w ...

  6. MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称

    MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称   INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA. ...

  7. MySQL知识补充(表字段操作、视图、触发器、事物、存储过程、内置函数、流程控制、索引、慢查询)

    今日内容概要 表字段操作补充(掌握) 视图(了解) 触发器(了解) 事务(掌握) 存储过程(了解) 内置函数(了解) 流程控制(了解) 索引(熟悉) 内容详细 1.表字段操作补充 # 1.添加表字段 ...

  8. MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁

    浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视 ...

  9. Oracle_PL/SQL(6) 触发器(序列、视图)

    序列1.创建序列create sequence seq_alog start with 1 increment by 1 maxvalue 999999999999999999999999999 mi ...

随机推荐

  1. PyQt编程实战:画出QScrollArea的scrollAreaWidgetContents内容部署层的范围矩形

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 在<PyQt(Python+Qt)学习随笔:QScrollArea滚动区域详解> ...

  2. 第15.16节 PyQt(Python+Qt)入门学习:PyQt中的信号(signal)和槽(slot)机制以及Designer中的使用

    老猿Python博文目录 老猿Python博客地址 一.引言 前面一些章节其实已经在使用信号和槽了,但是作为Qt中最重要的机制也是Qt区别与其他开发平台的重要核心特性,还是非常有必要单独介绍. 二.信 ...

  3. PyQt(Python+Qt)入门:设计师中部件toolTip、statusTip、whatsThis的属性

    在Qt Designer中定义的部件,都有toolTip.statusTip.whatsThis,这些属性都是辅助提示的信息. toolTip toolTip属性设置部件的toolTip提示信息,to ...

  4. Docker 本地镜像推送到阿里云(五)

    最近在学习Docker,从安装Docker开始,到自定义制作镜像mycentos,但是怎么把它推送到阿里云,一直是困扰我的问题.后面有时间了解了一下,根据本地镜像推动到阿里云其实并没有我们想象中那么难 ...

  5. [Windows] 在 Microsoft Docs 网站中挖掘 MVVM 的各种学习资源

    最近写了一些 MVVM 框架的文章,翻了一些 Microsoft Docs 的文档,顺便就对 MVVM 本身来了兴致,想看看更多当年相关的文档.在 MVVM 出现后十多年,我在不同的场合见到过多种 M ...

  6. OI学习过程记录

    这帖子本来是教练为了给低年级学生分享经验而让我写的学习经历,不过等我退役之后可能就变成回忆录了. 初三 WC 前:上了正睿的线上课程,练了一些模拟赛,同时也正在学文化课. 然后,莫名奇妙1膜考了全校前 ...

  7. 算法——n皇后问题

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案. 每一种解法包含一个明确的 n 皇后问题的棋 ...

  8. tcp/ip原理/三次握手/四次挥手

    @ tcp/ip原理 1.1 tcp/ip三次握手 1.1.1 建立过程说明 a)   由主机A发送建立TCP连接的请求报文, 其中报文中包含seq序列号, 是由发送端随机生成的, 并且还将报文中SY ...

  9. 小白都看得懂的Javadoc上手教程

    Javadoc是什么 官方回答: Javadoc is a tool for generating API documentation in HTML format from doc comments ...

  10. Swing01-概述

    1.Swing概述 Swing百分之百由Java本身实现,是一套轻量级组件(完全由Java实现的组件叫做轻量级套件,依赖于本地平台的套件称之为重量级套件).Swing不再依赖于平台的GUI,因此真正做 ...