博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于oracle数据库(11)
阅读量:5787 次
发布时间:2019-06-18

本文共 2190 字,大约阅读时间需要 7 分钟。

事务

事务是最小的工作单元,是对数据库的若干操作,增删查改(要不就都成功,要不就都失败)

在oracle数据库中,事务是默认打开的,其他数据库都需要一条语句来打开事务,默认关闭的

 

事务的特征

原子性、一致性、隔离性、永久性

比如如果发生了错误(异常)

rollback; --回滚

在哪里执行就在哪里提交

在oracle里面一次连接(会话)就是一个事务

select * from student;

savepoint p1; --标记一个位置(事务保存点)

insert into student value();

savepoint p2; --标记一个位置(事务保存点)

insert into student value();

savepoint p3; --标记一个位置(事务保存点)

insert into student value();

savepoint p4; --标记一个位置(事务保存点)

insert into student value();

rollback to p1; --回退到指定位置

commit; --一旦执行commit之后,数据就是永久的了

 

数据库都有一个锁机制,当一个事务在修改某一条数据的时候,数据库会将被修改的那条数据锁住,不让其它事务修改

delete from student where sid='';

select * from student for update;

删除的时候可以锁,查询的时候也可以锁

序列 一个自动增长的对象

create sequence 序列名称;

create sequence sq1;

 

序列的使用

select sq1.nextval from dual; --每用1次就增加1

insert intd student values(sq1.nextval,'java',3);

increment by 1 --每次加几个

start with 1 --从1开始计数

nomaxvalue --不设置最大值

nocycle --一直累加,不循环

cache 10 --内存缓冲

查询当前序列sq1.currval

select sq1.currval from dual;

查询下一个序列sq1.nextval

select sq1.nextval from dual;

 

同义词

create synonym emp11 for emp; --给emp表取别名emp11

select * from emp11;

create synonym sq11 for sq1; --给序列sq1取别名sq11

select sq11.nextval from dual;

作用:一个表可以有多个别名;不想把真名告诉其它用户,删除别名,就查不了

drop synonym 别名; --删除别名

 

视图★

视图是一张虚拟表,数据来自于真实表,修改视图会影响真实表

作用:保护一些需要权限的字段不被其它用户看到;简化查询操作

建立视图

create view 视图名称 as 查询语句

create view v1 as select ename,sal from emp;

比如不想让行政部的人看到工资,但又想他管理员工(把视图的权限赋予给行政部就看不到工资了)

create view xz_emp as select empno,ename,job,hiredate,deptno from emp;

select * from xz_emp;

简化

--保存查询语句

create view student2 as

select sname,sid,cname from student s inner join myclass m on s.cid=m.cid

select * from student2

删除视图

drop view 视图名称;

 

索引(目录)

优化查询,提高sql语句执行性能(数据查询时,速度会提高一些)

 

简化磁盘读写

在逻辑上和物理上都独立于表的数据

索引只能建在列上面,每列只能建一个索引

系统会给主键建一个索引,不能手动给主键建立索引

如果每列都建一个索引,会提高查询效率,会降低增删改效率

一般是作为条件的列,比如:where后面的列 order by后面的列等

给ename列创建一个索引

create index inx_ename on emp(ename);

不需要手动调用,系统会自动使用

删除索引

drop index inx_ename;

唯一索引(确保定义索引的列中没有重复值)

create unique index 索引名 on 表名(字段名);

组合索引

create index 索引名 on 表名(字段1,字段2,...);

反向键索引(用于模糊查询的列)

create index 索引名 on 表名(字段名) reverse;

比如很长的字符串 需要模糊查询

select text from 表 where text like %张三%; --模糊查询效率比较低 少用

位图索引

适合创建在低基数列上(取值较少,重复值较多)

转载于:https://www.cnblogs.com/xsl1995/p/5334116.html

你可能感兴趣的文章
BeanShell变量和方法的作用域
查看>>
LINUX下防恶意扫描软件PortSentry
查看>>
由数据库对sql的执行说JDBC的Statement和PreparedStatement
查看>>
springmvc+swagger2
查看>>
软件评测-信息安全-应用安全-资源控制-用户登录限制(上)
查看>>
我的友情链接
查看>>
Java Web Application 自架构 一 注解化配置
查看>>
如何 debug Proxy.pac文件
查看>>
Python 学习笔记 - 面向对象(特殊成员)
查看>>
Kubernetes 1.11 手动安装并启用ipvs
查看>>
Puppet 配置管理工具安装
查看>>
Bug多,也别乱来,别被Bug主导了开发
查看>>
sed 替换基础使用
查看>>
高性能的MySQL(5)创建高性能的索引一B-Tree索引
查看>>
oracle备份与恢复--rman
查看>>
图片变形的抗锯齿处理方法
查看>>
Effective C++ Item 32 确保你的 public 继承模子里出来 is-a 关联
查看>>
phpstorm安装laravel-ide-helper实现自动完成、代码提示和跟踪
查看>>
python udp编程实例
查看>>
TortoiseSVN中图标的含义
查看>>