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 ...
随机推荐
- ModelViewSet里的过滤、排序、分页、序列化设置
1.DRF初始化 1.认证 2.权限 3.限流 4.序列化 5.分页 6.版本 7.过滤 8.排序 1.1安装DjangoRestFramework pip install djangoresfra ...
- 第2.2节 Python的语句
上节已经介绍了极简的Python代码编写,已经用到了赋值语句,本节对Python的程序语句进行介绍. 一. 常用命令 在介绍Python语句之前,先介绍一下几个有用的Python命令. dir(模块名 ...
- PyQt学习随笔:Model/View中设置视图数据项可编辑的方法
在视图对象中调用setEditTriggers方法可以设置视图对象中的数据项是否可编辑以及编辑的触发方法. setEditTriggers方法是QAbstractItemView的方法,语法如下: s ...
- 刷题记录:[GWCTF 2019]枯燥的抽奖
目录 刷题记录:[GWCTF 2019]枯燥的抽奖 知识点 php伪随机性 刷题记录:[GWCTF 2019]枯燥的抽奖 题目复现链接:https://buuoj.cn/challenges 参考链接 ...
- [BJDCTF 2nd]假猪套天下第一 && [BJDCTF2020]Easy MD5
[BJDCTF 2nd]假猪套天下第一 假猪套是一个梗吗? 进入题目,是一个登录界面,输入admin的话会返回错误,登录不成功,其余用户可以正常登陆 以为是注入,简单测试了一下没有什么效果 抓包查看信 ...
- linux常用快捷键总结
启动器:<super> 显示桌面:<super>D 文件管理器:<super>E 显示工作区:<super>S 打开终端:ctrl+alt+T 关闭窗口 ...
- 「生产事故」MongoDB复合索引引发的灾难
前情提要 11月末我司商品服务的MongoDB主库曾出现过严重抖动.频繁锁库等情况. 由于诸多业务存在插入MongoDB.然后立即查询等逻辑,因此项目并未开启读写分离. 最终定位问题是由于:服务器自身 ...
- js滑动到页面底部实现
js实现 1.window.scrollTo(0,document.documentElement.clientHeight); //js jq实现 2 .var windowHeight = pa ...
- k8s之yaml文件书写格式
k8s之yaml文件书写格式 1 # yaml格式的pod定义文件完整内容: 2 apiVersion: v1 #必选,版本号,例如v1 3 kind: Pod #必选,Pod 4 metadata: ...
- MVC-采用Bundles方式引入css和js文件
优点:修改js或css时会自动生成hash版本号. 缺点:需要在BundleConfig中先添加对应的文件,然后在html中再引用对应的bundle,多操作了一步. web.config中 <c ...