Oracle-序列-存储过程-视图-索引-触发器
- 课程介绍
- 1. 约束(掌握)
- 2. 序列(掌握)
- 3. 索引(掌握)
- 4. 视图(掌握)
- 5. 存储过程(掌握)
- 6. 自定义函数(掌握)
- 7. 触发器(掌握)
- 数据库对象的命名规则
1、对象名称必须以字母开头
2、有效的字符包括数字、字母和三个特殊字符(# _ $)
3、不要使用oracle的保留字作为对象名称
4、同一用户下的对象不能同名,即使是不同的对象类型
5、1-30个字符之间
- 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);
- 约束
4.1. 主键(唯一+非空),唯一,非空,外键,check(mysql不支持)
1、NOT NULL 非空
2、UNIQUE Key 唯一键
3、PRIMARY KEY 主键(非空且唯一)
4、FOREIGN KEY 外键
5、CHECK 检查
4.2. 好处
保存数据之前(jdbc层发出请求,直接在数据库插入)会验证数据是否正确
只有保存成功,数据就正确
4.3. 坏处
影响插入\修改的效率
- 约束的名称
5.1. 创建表的时候添加列级约束
SYS_C005456 由oracle自动取名
5.2. 创建表的时候添加表级约束
5.3. 创建表的时候添加表级外键约束
5.4. ALTER TABLE增加约束
5.5. 软件公司怎样使用约束
一般软件公司在开发阶段都添加约束,系统上线删除约束,从而提供性能
- 序列
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;
- 索引
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. 删除索引
- 视图
视图也就是虚表,实际上视图就是一个命名的查询,用于改变基表数据的显示。
8.1. 作用
可以限制对数据的访问
可以使复杂的查询变的简单
提供了数据的独立性
提供了对相同数据的不同显示
可以提供查询性能,直接运行在数据库服务器
8.2. 创建视图
8.3. 行内视图
行内视图是在SQL语句中使用的一个带有别名的子查询.
在主查询FROM 子句中的子查询就是行内视图.
行内视图不是数据库的对象,所以不需要显式的创建.
- 表空间
就算有建表的权限,也不能建表,因为没有使用表空间的权限
一般来讲,普通用户都是使用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;
- 存储过程
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调用存储过程
- 自定义函数(必须要有返回值)
11.1.
语法
11.2.
自定义函数里面不能写dml语句
函数中不允许DML语句
形参必须为IN
11.3.
Java调用函数
- 触发器
监控如果发出了insert语句或者update、delete语句,触发一个事情
12.1.
分类
12.2.
语句级触发器
一个dml语句,只触发一次
12.3.
行级触发器
一个dml语句,可以触发多次
Update 更新,delete 删除 12行,触发12次
12.4.
模式触发器
当前用户受限制:必须先删除模式触发器
system管理员不受限制
- 见多识广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.
横向汇总和纵向汇总
- 课程总结
14.1.
重点
- 约束
- 序列
- 索引
- 视图
- 存储过程
- 触发器
- 自定义函数
Oracle-序列-存储过程-视图-索引-触发器的更多相关文章
- Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...
- Oracle数据库游标,序列,存储过程,存储函数,触发器
游标的概念: 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理, ...
- oracle 序列、视图、索引
序列 创建 在sequences里 作用 生成自动增长(或减少)的整数值 经常添加数据时使用,可控性好 写法:序列名.nextval 获取下一个序列值 序列名.currval 获取当前序列值,不常 ...
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- MySQL— 索引,视图,触发器,函数,存储过程,执行计划,慢日志,分页性能
一.索引,分页性能,执行计划,慢日志 (1)索引的种类,创建语句,名词补充(最左前缀匹配,覆盖索引,索引合并,局部索引等): import sys # http://www.cnblogs.com/w ...
- MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称
MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称 INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA. ...
- MySQL知识补充(表字段操作、视图、触发器、事物、存储过程、内置函数、流程控制、索引、慢查询)
今日内容概要 表字段操作补充(掌握) 视图(了解) 触发器(了解) 事务(掌握) 存储过程(了解) 内置函数(了解) 流程控制(了解) 索引(熟悉) 内容详细 1.表字段操作补充 # 1.添加表字段 ...
- MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视 ...
- Oracle_PL/SQL(6) 触发器(序列、视图)
序列1.创建序列create sequence seq_alog start with 1 increment by 1 maxvalue 999999999999999999999999999 mi ...
随机推荐
- PyQt编程实战:画出QScrollArea的scrollAreaWidgetContents内容部署层的范围矩形
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 在<PyQt(Python+Qt)学习随笔:QScrollArea滚动区域详解> ...
- 第15.16节 PyQt(Python+Qt)入门学习:PyQt中的信号(signal)和槽(slot)机制以及Designer中的使用
老猿Python博文目录 老猿Python博客地址 一.引言 前面一些章节其实已经在使用信号和槽了,但是作为Qt中最重要的机制也是Qt区别与其他开发平台的重要核心特性,还是非常有必要单独介绍. 二.信 ...
- PyQt(Python+Qt)入门:设计师中部件toolTip、statusTip、whatsThis的属性
在Qt Designer中定义的部件,都有toolTip.statusTip.whatsThis,这些属性都是辅助提示的信息. toolTip toolTip属性设置部件的toolTip提示信息,to ...
- Docker 本地镜像推送到阿里云(五)
最近在学习Docker,从安装Docker开始,到自定义制作镜像mycentos,但是怎么把它推送到阿里云,一直是困扰我的问题.后面有时间了解了一下,根据本地镜像推动到阿里云其实并没有我们想象中那么难 ...
- [Windows] 在 Microsoft Docs 网站中挖掘 MVVM 的各种学习资源
最近写了一些 MVVM 框架的文章,翻了一些 Microsoft Docs 的文档,顺便就对 MVVM 本身来了兴致,想看看更多当年相关的文档.在 MVVM 出现后十多年,我在不同的场合见到过多种 M ...
- OI学习过程记录
这帖子本来是教练为了给低年级学生分享经验而让我写的学习经历,不过等我退役之后可能就变成回忆录了. 初三 WC 前:上了正睿的线上课程,练了一些模拟赛,同时也正在学文化课. 然后,莫名奇妙1膜考了全校前 ...
- 算法——n皇后问题
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案. 每一种解法包含一个明确的 n 皇后问题的棋 ...
- tcp/ip原理/三次握手/四次挥手
@ tcp/ip原理 1.1 tcp/ip三次握手 1.1.1 建立过程说明 a) 由主机A发送建立TCP连接的请求报文, 其中报文中包含seq序列号, 是由发送端随机生成的, 并且还将报文中SY ...
- 小白都看得懂的Javadoc上手教程
Javadoc是什么 官方回答: Javadoc is a tool for generating API documentation in HTML format from doc comments ...
- Swing01-概述
1.Swing概述 Swing百分之百由Java本身实现,是一套轻量级组件(完全由Java实现的组件叫做轻量级套件,依赖于本地平台的套件称之为重量级套件).Swing不再依赖于平台的GUI,因此真正做 ...