索引

什么是索引?

-- 索引就类似于书的目录,根据目录查询内容会快很多,提高数据查询效率

创建索引有俩种方式

1、Oracle会自动为主键和唯一键创建索引

2、手动创建约束。
那么表中什么样的字段应该添加索引?
在查询的时候,经常被用来做为查询的字段,应该添加索引

-- 创建索引
create index 索引名字 on 表名(字段);
create index ename_index on emp(ename);
select * from emp where ename='SMITH';
-- 索引是看不见摸不着的,现在我们的的表数据太少,看不出效果,其实我们已经给ename做了索引,这样查询远比我们之前没做索引的时候要快很多。

删除索引

-- 删除索引
drop index 索引名字;
drop index ename_index;
-- 自动创建的约束是无法删除的,但是在删除主键约束和唯一约束的时候才会被删除。

视图

什么是视图?

-- 我们之前做的子查询就是一个视图
-- 视图也就是虚表,实际上是一个命名的查询,用户改变数据的显示形式,简化查询,访问视图与表的访问方式一样。

视图有什么好处?

-- 1、可以限制对数据的访问,让用户通过视图可以看到表中的一部分数据
-- 2、可以使复杂的查询变得简单
-- 3、提供了数据的独立性,用户不知道数据来源处
-- 4、提供了对相同数据的不同显示-- 视图,就是一个虚表,我们可以从这个表中查询数据
-- 视图,就是一个命名的查询语句
-- 任何有效的查询语句都可以作为视图

创建视图

create view 视图名字 as 查询语句;
create view HR_VIEW as select * from emp;
create view XM_VIEW as select empno,ename,mgr,hiredate,deptno from emp;

分配创建视图权限

-- 一般为了方便,我们都是直接赋值dba权限给用户
grant dba to scott;
-- 或者只赋值一个创建视图的权限
grant create view to scott;

查看视图表结构

-- 我们可以在命令行窗口模式下查看表的结构,也可以查看视图的结构
desc emp;
desc HR_VIEW;

替换视图

-- or replace:如果视图存在,则替换旧视图。
create or replace view HR_VIEW as select * from emp;

删除视图

drop view 视图名字;
-- 删除视图不会影响原来的数据。

注意事项

-- 我们平常在做表连接的时候,会出现相同的列,但是不影响我们查询。但是在创建视图的时候,不能出现相同列,这个时候我们就不能创建视图了。
-- 比如
create or replace view view_empinfo
as
select e.*,d.* from emp e,dept d where e.deptno = d.deptno;  -- 这条查询语句是没有问题的,但是在创建视图的时候,就会报错。
-- 这个时候,我们就需要用别名,将每个列都查询出来 或者相同的列只显示一个
create or replace view view_empinfo
as
select e.empno,e.ename,e.job,e.mgr,e.sal,d.dname,d.loc from emp e,dept d where e.deptno = d.deptno;

视图有多方便?

-- 假如我们在计算员工年收入的时候,我们每次都需要查询,非常麻烦,那么我们就可以把年收入计算出来做成视图,以后就只要在视图中查询就可以了
create or replace view view_name
as
select e.empno,e.ename,e.job,e.mgr,e.sal,d.dname,d.loc,sal+nvl(comm,0) 年薪 from emp e,dept d where e.deptno = d.deptno;
-- 那么我以后查询年薪的时候就可以从视图中查询了
select 年薪 from view_name;

视图可以操作数据吗,可以做DML操作吗?

-- 视图一般用于查询,不建议DML操作
-- 如果我需要创建一个视图,并且不能进行DML操作,那么我就要用到下面的写法
-- with read only 创建只读视图,不能执行DML操作
create or replace view view_name
as
select * from emp
with read only;-- 同样的,如果我们需要对视图进行DML操作时,那么我们可以省略 with read only 或者 改为with check option
create or replace view view_name
as
select * from emp
[with check option;]

对视图进行DML的需要注意什么?

-- 1、如果违反基表的约束条件时,则不能更新。
-- 2、如果视图中包含链接操作符、distnct关键字、聚合函数、集合操作符或group by 子查询的时候,不能更新
-- 3、如果视图存在伪劣的时候,则不能更新

序列

什么是序列?

-- 序列是Oracle自动给我们生成的一个序列的对象

序列什么用?

-- 序列一般用于生成主键或者达到主键自增的效果

创建序列

-- 语法
create sequence 序列名字(start with 1 -- 表示从1开始increment by 1 -- 表示每次执行的时候,增加多少。一般用1minvalue 1 -- 序列最小值,一般用了 start with 不会用minvalue(可以省略)maxvalue 10 -- 序列最大值,表示序列到最大值是停止(可省略)cache|nocache -- 缓存,可省略,默认为 20 , 省略不写就是 nocachecycle|nocycle -- 是否生成循环,一边和maxvalue使用,表示到maxvalue后从start whit 使用,可省略,省略不写就代表 nocycle
)

序列的俩个属性

-- nextval:取序列的值,并且序列的值增加。
-- currval:取序列当前的值。不能直接去当前值,需要执行nextval后才可以

修改序列

alter sequence 序列名字 maxvalue 5000;
-- 注意,不能修改序列的 start whit 值,但是能修改maxvalue、cache、cycle、increment by。

删除序列

drop sequence 序列名字;

如何利用序列创建主键自增?

-- 创建一个序列
create sequence mysqe
start whit 1
increment by 1
insert into 表名 values(myseq.nextval,'值','值'...)

如何查看序列的值?

-- Oracle为我们提供了一个虚表 dual,序列的值就保存到dual中
select myseq.nextval from dual;
select myseq.currval from dual;

注意:如果序列达不到顺序自增的话怎么办?

-- 关闭延迟技术
ALTER SYSTEM SET deferred_segment_creation=FALSE;

同义词

什么都是同义词?

-- 同义词,就是数据库对象的一个别名,可以简化访问其他用户的数据库对象。缩短了对象名称的长度,同时屏蔽了对象的名称,使用户不知道最终的数据来源与那个对象。

创建同义词的语法

create synonym 同义词名字 for 表(对象);
create synonym stu for student;
-- 那么以后查询的时候,我就可以这么使用
select * from stu;

赋值创建同义词的权限

grant create any synonym to 用户名;

删除同义词

drop synonym 同义词;

事务

什么是事务?

-- 一组相关的数据改变SQL语句,这组SQL语句对数据的改变要么同时成功,要么同时失败。
-- 自我理解:如果理解事务这个词呢?在数据库中,事务指的是可以实现数据库中的存储的数据的改变。也就是说insert、update、dalete语句。一组sql语句,可以实现数据的改变。/*
事务必须具备以下四个属性,简称ACID 属性:
原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行
一致性(Consistency):当事务完成时,数据必须处于一致状态
隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性例如银行转账。
孙昊账户有1000元,大哥0元,所谓原子性就是孙昊给大哥转钱,孙昊转钱和大哥收钱,这两步必须是同时发生的,如果某一步出错或者不发生,业务就出现问题,那么这个事务肯定出错。所谓一致性就是,孙昊和大哥一共1000元,转完钱后还是1000元。
*/

查看事务

show autocommit;

开启或关闭事务

set autocommit on|off;

显式事务

set autocommit off; -- 关闭事务的自动提交
-- 手动调用
commit; -- 提交
rollback; -- 回滚 类似于撤销

隐式事务

set autocommit on; -- 打开事务的自动提交
-- 打开后 create、drop、grant等操作事务是自动提交的
-- 每一个insert、update、delete执行后都会提交到数据库

事务保存点

-- 语法
savepoint 名字;
-- 用法
insert into stu values(1,'aa');
savepoint s1;
insert into stu values(2,'aa');
savepoint s2;
insert into stu values(3,'aa');
savepoint s3;
insert into stu values(4,'aa');
savepoint s4;
-- 假如在第三条语句出错了,我单纯的用回滚的话,那么我之前的语句就需要再次添加了。那么我就可以这么回滚
rollback to s3;

锁的概念

/*
锁是用来对数据库的共享资源并发机制的控制。也就是说锁是用来保护正在修改的数据,
知道这些数据提价或者回滚事务之后,其他用户才可以进行修改。
如果没有锁,那特么就乱了套了。假如十八和艳子同时对一张表进行操作,
再都没进行事务提交或回滚的情况下,此时我数据库该听谁的命令?
总不能谁漂亮听谁的吧?听十八的艳子不服气,听艳子的十八又不服气。
总不能让俩人打一架吧,谁赢听谁的?所以只有艳子提交了事务之后,十八才能更新数据。
*/

锁的类型

-- 分为两种,行级锁和表级锁。/* 行级锁:是一种排他锁,防止其他事务修改此行在使用 insert、update、delete、select .... for update[WAIT n (等几秒)| NOWAIT(不等待)|skip locked(跳过)]语句的时候,Oracle会自动启动行级锁。当使用commit或者rollback的时候才会释放锁假如一个用户占据锁的时候过长怎么办? 利用管理杀掉该sessionselect * from v$lock; 查看锁  拿到sidselect sid,serial# from v$session where sid='141'; 查看sid和 serial然后执行alter system kill session 'sid,serial';
*/
/*
表级锁:锁定整个表
lock table 表名 in mode(mode就是锁的模式) mode;
共享锁:只允许用户select,不能做insert、update、delete操作,多个用户可以同时对同一张表进行表级锁
行共享(row share) -- 禁止排他锁定表
行排他(row exclusive) -- 禁止使用排他锁和共享锁
共享行排他(SHARE ROW EXCLUSIVE) – 比共享锁更多的限制,禁止使用共享锁及更高的锁
排他(EXCLUSIVE) – 限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表
*/

Oracle索引、视图、序列、同义词、事务、锁机制详解相关推荐

  1. mysql innodb 的锁机制_Mysql之Innodb锁机制详解

    InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁.关于事务我们之前有专题介绍,这里就着重介绍下它的锁机制. 总的来说,InnoDB按照不同的分类共有 ...

  2. 数据库之mysql事务原理分析与锁机制 详解

    1.事务 1.2.目的 事务将数据库从一种一致性状态转换为另一种一致性状态: 1.3.组成 事务可由一条非常简单的SQL语句组成,也可以由一组复杂的SQL语句组成: 其中单条语句会默认自动添加事务控制 ...

  3. mysql表锁机制详解

    为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制. 一.概述 MySQL有三种锁的级别:页级.表级.行级. MyISAM和MEMORY存储引擎采用的是表级锁( ...

  4. 乐观锁的颗粒度_MySql数据库锁机制详解

    概述 数据库锁定机制简单的来说,就是数据库为了保证数据的一致性与完整性,而使各种共享资源在被并发访问时变得有序所设计的一种规则.对于任何一种数据库来说都需要有相应的锁机制,所以MySQL也不能例外.M ...

  5. MySQL锁机制详解-表锁与行锁

    文章目录 1. 数据库锁理论 2. 锁的分类 2.1 按数据操作的类型分类 2.2 按数据操作的颗粒度分类 3. 表锁的应用 3.1 表锁相关命令 3.2 给表加表共享读锁 3.3 给表加表独占写锁 ...

  6. mysql 事务 for update,mysql事务锁_详解mysql 锁表 for update

    摘要 腾兴网为您分享:详解mysql 锁表 for update,智慧农业,真还赚,悦读小说,学习帮等软件知识,以及电池管家,三国群英传3,userland,运满满货主版,王者荣耀,简单3d动画,嘉丽 ...

  7. java中的CAS操作以及锁机制详解

    关于CAS操作 CAS:Compare And Swap   --  乐观锁策略 CAS(无锁操作):使用CAS叫做比较交换来判断是否出现冲突,出现冲突就重试当前操作直到不冲突为止. 悲观锁(JDK1 ...

  8. oracle 创建视图用 with check option 子句详解

    oracle的视图是一个很有用的工具,在很多应用中的应用到. 在oracle视图中,对于简单视图,oracle 允许进行 dml 操作 ,这就是说明如果我们在一个表上创建了一个视图,前提是没有限制对它 ...

  9. 第八节:数据库层次的锁机制详解和事务隔离级别

    一. 基本概念 1.共享锁:(holdlock) (1). select的时候会自动加上共享锁,该条语句执行完,共享锁立即释放,与事务是否提交没有关系. (2). 显式通过添加(holdlock)来显 ...

最新文章

  1. VIEWGOOD流媒体平台推进广州图书馆数字化进程
  2. c语言struct_学习了C语言之后还是感觉不会编程,应该怎么办?其实你想错了!...
  3. 自然语言处理笔记2-哈工大 关毅
  4. 04_ClickHouse表引擎概述、MergeTree系列引擎、Log系列引擎、集成引擎、特定功能的引擎(学习笔记)
  5. WP8.1学习系列(第九章)——透视Pivot开发指南
  6. VMware 6.5下载地址及序列号(转,备用)
  7. html 5新增技术,HTML5新增标签
  8. 手机自带计算机的功能,手机上的这3个小功能,比电脑方便好用,你知道吗?...
  9. php func_get_args(),PHP中func_get_args(),func_get_arg(),func_num_args()有什么不同
  10. Photoshop插件--删除暗调通道--脚本开发--PS插件
  11. 无法安装64位版本的Office,因为在您的PC上找到了以下32位程序……解决办法
  12. 迷信一把:三才数理吉凶
  13. mac电脑重装系统操作步骤
  14. python写word报告_使用Python自动生成word巡检报告【二】
  15. Centos安装Perl
  16. vue 实现倒计时功能
  17. 龙测独家AI全新功能上线,手机无感录制,AI自动生成测试用例
  18. 修改dpr提高ECharts图表的清晰度
  19. java 3 3数字拼图,基于Vue.js实现数字拼图游戏
  20. 读《潜伏在办公室》第二季 (2)

热门文章

  1. 马克思主义哲学笔记(一)
  2. VC6 各link错误解决
  3. 面对不同种类的处理结果——result type=
  4. Google Capture The Flag 2019 (Quals) WP
  5. 基于QT实现的简单版控制台植物大战僵尸
  6. macOS Chrome无法访问自签名https页面问题的解决办法
  7. Python案例:围棋的状态数
  8. 从此以后提及你 无关风雨无关晴
  9. 怎样区别桃花、杏花、梨花、樱花、梅花、李花
  10. 创业者面对困难-不轻言放弃