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(Python+Qt)学习随笔:QTextEdit的setText、setHtml、setPlainText之间的区别
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 QTextEdit中提供了三个设置编辑器文本的方法,分别是setTex ...
- Python中可迭代对象是什么?
Python中可迭代对象(Iterable)并不是指某种具体的数据类型,它是指存储了元素的一个容器对象,且容器中的元素可以通过__iter__( )方法或__getitem__( )方法访问. __i ...
- PyQt(Python+Qt)学习随笔:containers容器类部件QStackedWidget重要方法介绍
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 StackedWidget堆叠窗口部件为一系列窗口部件的堆叠,对应类为QStackedWidget. ...
- PyQt(Python+Qt)学习随笔:QListView的spacing属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListView的spacing属性用于控制视图布局中数据项周围填充的空白空间的大小.缺省值为0, ...
- PyQt(Python+Qt)学习随笔:QListView的isWrapping属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListView的isWrapping属性用于控制视图中的数据项项布局在可见区域中没有足够空间时是 ...
- PyQt(Python+Qt)学习随笔:使用pyqtConfigure建立信号和槽的连接
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在PyQt中,一般信号和槽的连接是通过connect方法建立的,语法如下: connect(slot ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的windowTitle和windowOpacity属性
windowOpacity 这个属性仅对window对象生效. windowOpacity为浮点数,表示透明度,为1完全不透明,为0完全透明,缺省是1. 可以通过windowOpacity().set ...
- jupyterlab 增加新内核的方法ipykernel
参考: https://blog.csdn.net/C_chuxin/article/details/82690830
- 「生产事故」MongoDB复合索引引发的灾难
前情提要 11月末我司商品服务的MongoDB主库曾出现过严重抖动.频繁锁库等情况. 由于诸多业务存在插入MongoDB.然后立即查询等逻辑,因此项目并未开启读写分离. 最终定位问题是由于:服务器自身 ...
- 题解-[CEOI2017]Building Bridges
[CEOI2017]Building Bridges 有 \(n\) 个桥墩,高 \(h_i\) 重 \(w_i\).连接 \(i\) 和 \(j\) 消耗代价 \((h_i-h_j)^2\),用不到 ...