1. 回顾什么是事务?
  2. 一个不可分割的子操作形成一个整体,该整体要么全部执行成功,要么全部执行失败。例如:转帐
  3.  
  4. 回顾为什么要用事务?
  5. 如果不用事务的话,为转帐为例,可能出现一个用户钱增加了,另一个用户钱不变
  6.  
  7. 回顾编程中,事务可用于哪一层?
  8. 事务放在业务层
  9.  
  10. 回顾jdbc编程中,如何使用事务?
  11. connection.setAutoCommit(false);
  12. pstmt.executeUpdate();
  13. connection.commit();
  14. connection.rollback();
  15.  
  16. 回顾hibernate编程中,如何使用事务?
  17. transaction.begin();
  18. session.save(new User());
  19. transaction.commit();
  20. transaction.rollback();
  21.  
  22. 回顾spring编程中,如何使用事务?
  23. spring可以分为二种
  24. >编程式事务,藕合
  25. >声明式事务,解藕,提倡
  26.  
  27. Oracle的事务只针对DML操作,即select/insert/update/delete
  28.  
  29. 回顾MySQL的事务开始:start transaction
  30. Oracle的事务开始:第一条DML操作做为事务开始
  31.  
  32. Oracle的提交事务
  33. 1)显示提交:commit
  34. 2)隐藏提交:DDL/DCL/exit(sqlplus工具)
  35. 注意:提交是的从事务开始到事务提交中间的内容,提交到ORCL数据库中的DBF二进制文件
  36.  
  37. Oracle的回滚事务
  38. 1)显示回滚:rollback
  39. 2)隐藏回滚:关闭窗口(sqlplus工具),死机,掉电
  40. 注意:回滚到事务开始的地方
  41.  
  42. 回顾什么是回滚点?
  43. 在操作之间设置的一个标志位,用于将来回滚之用
  44.  
  45. 回顾为什么要设置回滚点?savepoint a;rollback to savepoint a;
  46. 如果没有设置回滚点的话,Oracle必须回滚到事务开始的地方,其间做的一个正确的操作也将撤销
  47.  
  48. 使用savepoint 回滚点,设置回滚点a
  49. savepoint a;
  50.  
  51. 使用rollback to savepoint,回滚到回滚点a
  52. rollback to savepoint a;
  53.  
  54. Oracle提交或回滚后,原来设置的回滚点还有效吗?
  55. 原回滚点无效了
  56.  
  57. Oracle之所以能回滚的原因是?
  58. 主要机制是实例池
  59.  
  60. 回顾MySQL支持的四种事务隔离级别及能够解决的问题
  61. 1read uncommitted -- 不能解决任何缺点
  62. 2read committed -- 脏读,Oracle默认
  63. 3reapatable read -- 不可重复读,脏读,MySQL默认
  64. 4serializable -- 幻读,不可重复读,脏读,效率低
  65.  
  66. 注意:jdbc/dbutils速度快,但书写烦
  67. mybaits速度中等,但书写"中等"
  68. hibernate速度慢,但书写"爽"
  69.  
  70. Oracle支持的二种事务隔离级别及能够解决的问题
  71. Oracle支持:read committed serializable
  72.  
  73. Oracle中设置事务隔离级别为serializable
  74. set transaction isolation level serializable;
  75.  
  76. 演示二个用户同时操作emp表,删除KING这条记录,会有什么后果?
  77. 因为有隔离级别的存在,所以不会出现二个用户都删除了KING这条记录,
  78. 一定是一个用户删除KING成功,在该用户没有提交的情况下,另一个用户等待
  79.  
  80. -------------------------------------------------------------------------------------访问其它用户下的对象
  81.  
  82. 声明:scotthr叫用户名/方案名/空间名
  83. scott--tiger
  84. hr-----lion
  85.  
  86. 查询当前用户是谁
  87. show user;
  88.  
  89. 查询scott自己表空间下的所有对象时,可加,或不加用户名select * from emp;
  90. select * from emp;

  91. select * from scott.emp;
  92.  
  93. sysdba身份解锁hr普通帐户
  94. alter user hr account unlock;
  95.  
  96. sysdba身份设置hr普通帐户的密码
  97. alter user hr identified by lion;
  98.  
  99. scott查询hr表空间下的所有表时,必须得加用户名
  100. select * from hr.jobs;
  101.  
  102. 在默认情况下,每个用户只能查询自已空间下的对象的权限,不能查询其它用户空间下的对象
  103.  
  104. sysdba身份角色,授予scott用户查询所有用户空间下的对象权限
  105. grant select any table to scott;
  106.  
  107. sysdba身份,撤销scott用户查询所有用户空间下的对象权限
  108. revoke select any table from scott;
  109.  
  110. scott自已查看自己所拥有的权限
  111. select * from user_sys_privs;
  112.  
  113. scott用户空间导航到sysdba用户空间
  114. conn / as sysdba;
  115.  
  116. sysdba用户空间导航到scott用户空间
  117. conn scott/tiger;
  118.  
  119. scott用户空间导航到hr用户空间
  120. conn hr/lion;
  121.  
  122. 查询hr用户空间中的所有对象
  123. select * from tab;
  124.  
  125. hr用户空间导航到scott用户空间
  126. conn scott/tiger;
  127.  
  128. scott用户空间下,查询hr用户空间下的jobs表,必须加上hr用户空间名
  129. select * from hr.jobs;
  130.  
  131. -------------------------------------------------------------------------------------视图
  132.  
  133. 什么是视图【View
  134. 1)视图是一种虚表
  135. 2)视图建立在已有表的基础上, 视图赖以建立的这些表称为基表
  136. 3)向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句
  137. 4)视图向用户提供基表数据的另一种表现形式
  138. 5)视图没有存储真正的数据,真正的数据还是存储在基表中
  139. 6)程序员虽然操作的是视图,但最终视图还会转成操作基表
  140. 7)一个基表可以有0个或多个视图
  141.  
  142. 什么情况下会用到视图
  143. 1)如果你不想让用户看到所有数据(字段,记录),只想让用户看到某些的数据时,此时可以使用视图
  144. 2)当你需要减化SQL查询语句的编写时,可以使用视图,但不提高查询效率
  145.  
  146. 视图应用领域
  147. 1)银行,电信,金属,证券军事等不便让用户知道所有数据的项目中
  148.  
  149. 视图的作用
  150. 1)限制数据访问
  151. 2)简化复杂查询
  152. 3)提供数据的相互独立
  153. 4)同样的数据,可以有不同的显示方式
  154.  
  155. 基于emp表所有列,创建视图emp_view_1create view 视图名 as select对一张或多张基表的查询
  156. create view emp_view_1
  157. as
  158. select * from emp;
  159.  
  160. 默认情况下,普通用户无权创建视图,得让sysdba为你分配creare view的权限
  161.  
  162. sysdba身份,授权scott用户create view权限
  163. grant create view to scott;
  164.  
  165. sysdba身份,撤销scott用户create view权限
  166. revoke create view from scott;
  167.  
  168. 基于emp表指定列,创建视图emp_view_2,该视图包含编号/姓名/工资/年薪/年收入(查询中使用列别名)
  169. create view emp_view_2
  170. as
  171. select empno "编号",ename "姓名",sal "工资",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
  172. from emp;
  173.  
  174. 基于emp表指定列,创建视图emp_view_3(a,b,c,d,e),包含编号/姓名/工资/年薪/年收入(视图中使用列名)
  175. create view emp_view_3(a,b,c,d,e)
  176. as
  177. select empno "编号",ename "姓名",sal "工资",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
  178. from emp;
  179.  
  180. 查询emp_view_3创建视图的结构
  181. desc emp_view_3;
  182.  
  183. 修改emp_view_3(id,name,salary,annual,income)视图,create or replace view 视图名 as 子查询
  184. create or replace view emp_view_3(id,name,salary,annual,income)
  185. as
  186. select empno "编号",ename "姓名",sal "工资",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
  187. from emp;
  188.  
  189. 查询emp表,求出各部门的最低工资,最高工资,平均工资
  190. select min(sal),max(sal),round(avg(sal),0),deptno
  191. from emp
  192. group by deptno;
  193.  
  194. 创建视图emp_view_4,视图中包含各部门的最低工资,最高工资,平均工资
  195. create or replace view emp_view_4
  196. as
  197. select deptno "部门号",min(sal) "最低工资",max(sal) "最高工资",round(avg(sal),0) "平均工资"
  198. from emp
  199. group by deptno;
  200.  
  201. 创建视图emp_view_5,视图中包含员工编号,姓名,工资,部门名,工资等级
  202. create or replace view emp_view_5
  203. as
  204. select e.empno "编号",e.ename "姓名",e.sal "工资",d.dname "部门名",s.grade "工资等级"
  205. from emp e,dept d,salgrade s
  206. where (e.deptno=d.deptno) and (e.sal between s.losal and s.hisal);
  207.  
  208. 删除视图emp_view_1中的7788号员工的记录,使用delete操作,会影响基表吗
  209. delete from emp_view_1 where empno=7788;写法正确,会影响基表
  210.  
  211. 修改emp_view_1为只读视图【with read only】,再执行上述delete操作,还行吗?
  212. create or replace view emp_view_1
  213. as
  214. select * from emp
  215. with read only;
  216. 不能进行delete操作了
  217.  
  218. 删除视图中的【某条】记录会影响基表吗?
  219. 会影响基表
  220.  
  221. 将【整个】视图删除,会影响表吗?
  222. 不会影响基表
  223.  
  224. 删除视图,会进入回收站吗?
  225. 不会进入回收站
  226.  
  227. 删除基表会影响视图吗?
  228. 会影响视图
  229.  
  230. 闪回基表后,视图有影响吗?
  231. 视图又可以正常工作了
  232.  
  233. -------------------------------------------------------------------------------------同义词
  234.  
  235. 什么是同义词【Synonym
  236. 1)对一些比较长名字的对象(表,视图,索引,序列,。。。)做减化,用别名替代
  237.  
  238. 同义词的作用
  239. 1)缩短对象名字的长度
  240. 2)方便访问其它用户的对象
  241.  
  242. 创建与salgrade表对应的同义词,create synonym 同义词 for 表名/视图/其它对象
  243. create synonym e for salgrade;
  244. create synonym ev5 for emp_view_5;
  245.  
  246. sys身份授予scott普通用户create synonym权限
  247. grant create synonym to scott;
  248.  
  249. sys身份从scott普通用户撤销create synonym权限
  250. revoke create synonym from scott;
  251.  
  252. 使用同义词操作salgrade
  253. select * from s;
  254.  
  255. 删除同义词
  256. drop synonym ev5;
  257.  
  258. 删除同义词,会影响基表吗?
  259. 不会影响基表
  260.  
  261. 删除基表,会影响同义词吗?
  262. 会影响同义词
  263.  
  264. -------------------------------------------------------------------------------------序列
  265.  
  266. 什么是序列【Sequence
  267. 1)类似于MySQL中的auto_increment自动增长机制,但Oracle中无auto_increment机制
  268. 2)是oracle提供的一个产生唯一数值型值的机制
  269. 3)通常用于表的主健值
  270. 4)序列只能保证唯一,不能保证连续
  271. 声明:oracle中,只有rownum永远保持从1开始,且继续
  272. 5)序列值,可放于内存,取之较快
  273.  
  274. 题问:为什么oracle不直接用rownum做主健呢?
  275. rownum=1这条记录不能永远唯一表示SMITH这个用户
  276. 但主键=1确可以永远唯一表示SMITH这个用户
  277.  
  278. 为什么要用序列
  279. 1)以前我们为主健设置值,需要人工设置值,容易出错
  280. 2)以前每张表的主健值,是独立的,不能共享
  281.  
  282. emp表的empno字段,创建序列emp_empno_seqcreate sequence 序列名
  283. create sequence emp_empno_seq;
  284.  
  285. 删除序列emp_empno_seqdrop sequence 序列名
  286. drop sequence emp_empno_seq;
  287.  
  288. 查询emp_empno_seq序列的当前值currval和下一个值nextval,第一次使用序列时,必须选用:序列名.nextval
  289. select emp_empno_seq.nextval from dual;
  290. select emp_empno_seq.currval from dual;
  291.  
  292. 使用序列,向emp表插入记录,empno字段使用序列值
  293. insert into emp(empno) values(emp_empno_seq.nextval);
  294. insert into emp(empno) values(emp_empno_seq.nextval);
  295. insert into emp(empno) values(emp_empno_seq.nextval);
  296.  
  297. 修改emp_empno_seq序列的increment by属性为20,默认start with1alter sequence 序列名
  298. alter sequence emp_empno_seq
  299. increment by 20;
  300.  
  301. 修改修改emp_empno_seq序列的的increment by属性为5
  302. alter sequence emp_empno_seq
  303. increment by 5;
  304.  
  305. 修改emp_empno_seq序列的start with属性,行吗
  306. alter sequence emp_empno_seq
  307. start with 100;
  308.  
  309. 有了序列后,还能为主健手工设置值吗?
  310. insert into emp(empno) values(9999);
  311. insert into emp(empno) values(7900);
  312.  
  313. 删除表,会影响序列吗?
  314. 你无法做insert操作
  315.  
  316. 删除序列,会影响表吗?
  317. 表真正亡,序列亡
  318.  
  319. hibernate中,如果是访问oracle数据库服务器,那么User.hbm.xml映射文件中关于<id>标签如何配置呢?
  320. <id name="id" column="id">
  321. <generator class="increment/identity/uuid/【sequence】/【native】"/>
  322. </id>
  323.  
  324. -------------------------------------------------------------------------------------索引
  325.  
  326. 什么是索引【Index
  327. 1)是一种快速查询表中内容的机制,类似于新华字典的目录
  328. 2)运用在表中某个/些字段上,但存储时,独立于表之外
  329.  
  330. 为什么要用索引
  331. 1)通过指针加速Oracle服务器的查询速度
  332. 2)通过rowid快速定位数据的方法,减少磁盘I/O
  333. rowidoracle中唯一确定每张表不同记录的唯一身份证
  334.  
  335. rowid的特点
  336. 1)位于每个表中,但表面上看不见,例如:desc emp是看不见的
  337. 2)只有在select中,显示写出rowid,方可看见
  338. 3)它与每个表绑定在一起,表亡,该表的rowid亡,二张表rownum可以相同,但rowid必须是唯一的
  339. 4rowid18位大小写加数字混杂体,唯一表代该条记录在DBF文件中的位置
  340. 5rowid可以参与=/like比较时,用''单引号将rowid的值包起来,且区分大小写
  341. 6rowid是联系表与DBF文件的桥梁
  342.  
  343. 索引的特点
  344. 1)索引一旦建立, Oracle管理系统会对其进行自动维护, 而且由Oracle管理系统决定何时使用索引
  345. 2)用户不用在查询语句中指定使用哪个索引
  346. 3)在定义primary keyunique约束后系统自动在相应的列上创建索引
  347. 4)用户也能按自己的需求,对指定单个字段或多个字段,添加索引
  348.  
  349. 什么时候【要】创建索引
  350. 1)表经常进行 SELECT 操作
  351. 2)表很大(记录超多),记录内容分布范围很广
  352. 3)列名经常在 WHERE 子句或连接条件中出现
  353. 注意:符合上述某一条要求,都可创建索引,创建索引是一个优化问题,同样也是一个策略问题
  354.  
  355. 什么时候【不要】创建索引
  356. 1)表经常进行 INSERT/UPDATE/DELETE 操作
  357. 2)表很小(记录超少)
  358. 3)列名不经常作为连接条件或出现在 WHERE 子句中
  359. 同上注意
  360.  
  361. emp表的empno单个字段,创建索引emp_empno_idx,叫单列索引,create index 索引名 on 表名(字段,...)
  362. create index emp_empno_idx
  363. on emp(empno);
  364.  
  365. emp表的ename,job多个字段,创建索引emp_ename_job_idx,多列索引/联合索引
  366. create index emp_ename_job
  367. on emp(ename,job);
  368. 如果在where中只出现job不使用索引
  369. 如果在where中只出现ename使用索引
  370. 我们提倡同时出现enamejob
  371.  
  372. 注意:索引创建后,只有查询表有关,和其它(insert/update/delete)无关,解决速度问题
  373.  
  374. 删除emp_empno_idxemp_ename_job_idx索引,drop index 索引名
  375. drop index emp_empno_idx;
  376. drop index emp_ename_job_idx;

Oracle事务、视图、序列的更多相关文章

  1. 浅谈Oracle事务【转载竹沥半夏】

    浅谈Oracle事务[转载竹沥半夏] 所谓事务,他是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单元.通俗解释就是事务是把很多事情当成一件事情来完成,也就是大家都在一条船上,要 ...

  2. Oracle 物化视图 说明

    一.    物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可 ...

  3. oracle常用视图介绍

    oracle常用视图介绍---------------------2013/10/04(last updated) dba_开头:   dba_users     数据库用户信息   dba_segm ...

  4. 第五章 MySQL事务,视图,索引,备份和恢复

    第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行 ...

  5. [转帖]总结ORACLE系统视图及表大全

    总结ORACLE系统视图及表大全:dba_开头.....dba_users 数据库用户信息dba_segments 表段信息dba_extents 数据区信息dba_objects 数据库对象信息db ...

  6. Oracle物化视图的创建及使用(一

    Oracle物化视图的创建及使用 http://blog.csdn.net/tegwy/article/details/8935058 先看简单创建语句: create   materialized  ...

  7. Oracle物化视图的一般使用

    普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,首先明白基本概念,普通视图是不存储任何数据的,他只有定义,在查询中是转换为对应的定义SQL去查询,而物化视图是将数据转换为一个表,实际存储 ...

  8. ORACLE物化视图具体解释

    一.物化的一般使用方法物化视图是一种特殊的物理表,"物化"(Materialized)视图是相对普通视图而言的.普通视图是虚拟表.应用的局限性大,不论什么对视图的查询.oracle ...

  9. oracle 触发器,序列,索引

    oracle 触发器,序列,索引 --1,触发器 ----trigger /*触发器是一种特殊的存储过程,它与数据表紧密联系,用于保护表中的数据, 当一个定义了特定类型触发器的基表执行插入.修改或删除 ...

  10. 解决oracle 物化视图刷新失败

    oracle 物化视图刷新失败可能原因: 1.视图未建立物化视图日志 2.基表为授权给用户 1.物化视图语法 create materialized view [view_name] refresh ...

随机推荐

  1. android提升

    https://blog.csdn.net/lou_liang/article/details/82856531

  2. 多线程模块的同步机制event对象

    多线程模块的同步机制event对象 线程的核心特征就是他们能够以非确定的方式(即何时开始执行,何时被打断,何时恢复完全由操作系统来调度管理,这是用户和程序员无法确定的)独立执行的,如果程序中有其他线程 ...

  3. mysql主从同步监控---邮件告警

    #!/bin/bash #check MySQL_Slave Status #crontab time : MYSQLPORT=`netstat -na|grep "|awk -F[:&qu ...

  4. jQuery基础 (一)—样式篇

    jQuery的优势 jQuery有很多特性和工具方法

  5. Elasticsearch:fuzzy 搜索 (模糊搜索)

    在实际的搜索中,我们有时候会打错字,从而导致搜索不到.在Elasticsearch中,我们可以使用fuzziness属性来进行模糊查询,从而达到搜索有错别字的情形. match查询具有"fu ...

  6. C# 字符串和正则表达式(8) 持续更新

    创建字符串 如果多次修改一个字符串或创建一个很长的字符串,用String类会效率低下.这种情况,可以用 System.Text.StringBuilder ,它专门为这种情况设计的. 格式化表达式 格 ...

  7. 串口+RS485驱动

    其实RS485不算什么协议,只是物理层做了差分传输,AB两线的电压差来表示0,1,0,1,可靠性和距离更加好,因此,一个串口外设只能作为半双工使用,而RS232是可以全双工的. max485模块可以直 ...

  8. Python3-for-enumerate

    languages = ["C", "C++", "Perl", "Python"] for x in language ...

  9. BZOJ 3772: 精神污染 (dfs序+树状数组)

    跟 BZOJ 4009: [HNOI2015]接水果一样- CODE #include <set> #include <queue> #include <cctype&g ...

  10. Java进阶知识13 Hibernate查询语言(HQL),本文以hibernate注解版为例讲解

    1.简单概述 1.1. 1) SQL:面向的是数据库 select * from tableName;2) HQL查询(Hibernate Query language): hibernate 提供的 ...