Oracle总结【视图、索引、事务、用户权限、批量操作】 一

批量操作

何为批量操作,就是一次性插入多条数据….在SQL中,我们查询出来的数据可看成是一张表,那么我们在插入数据的时候,可以根据查询出来的数据进行插入…这就可以看成是批量操作…

值得注意的是,如果没有指定插入哪些字段的话,那么查询出来的全部字段均会插入表中..

将xxx_emp表中所有20号部门的员工,复制到emp表中,批量插入,insert into 表名 select ...语法
insert into emp
select * 
from xxx_emp
where deptno=20;



删除操作对比

我们的删除语法有三种:

  • delete from
  • truncate from
  • drop from

我们来对比一下他们的区别:

drop table

  • 1)属于DDL
  • 2)不可回滚
  • 3)不可带where
  • 4)表内容和结构删除
  • 5)删除速度快

truncate table

  • 1)属于DDL
  • 2)不可回滚
  • 3)不可带where
  • 4)表内容删除
  • 5)删除速度快

delete from

  • 1)属于DML
  • 2)可回滚
  • 3)可带where
  • 4)表结构在,表内容要看where执行的情况
  • 5)删除速度慢,需要逐行删除



事务

事务其实我们在JDBC章节中已经讲解过了,详情可查看我JDBC的博文。

再次明确一下:事务就是让一个不可分割的子操作形成一个整体,该整体要么全部执行成功,要么全部执行失败

我们值得注意的是Oracle中的事务与Mysql中的事务操作是有些不同的:

Oracle的事务开始:

  • 第一条DML操作做为事务开始【并不需要手动开启事务】

Oracle的提交事务

  • (1)显示提交:commit    
  • (2)隐藏提交:DDL/DCL/exit(sqlplus工具)【注意】

Oracle的回滚事务

  • (1)显示回滚:rollback
  • (2)隐藏回滚:关闭窗口(sqlplus工具),死机,掉电

因为Oracle有实例池这个概念,所以Oracle支持回滚

Oracle总结【视图、索引、事务、用户权限、批量操作】 一


Oracle默认支持的隔离级别是:read commited

Mysql默认支持的隔离级别是:reapatable read

Oracle中设置事务隔离级别为serializable
set transaction isolation level serializable;




访问其他用户的对象

在上一篇博文已经说了,Oracle将表/用户都看成是对象…那么我们怎么在scott用户下访问hr用户下的表呢???

其实,我们只要在访问表的时候,指定具体的用户.数据库表就行了,但是呢,还要看看该用户有没有权限查询别的用户的数据表,于是就需要赋予权限了

声明:scott或hr叫用户名/方案名/空间名
      scott--tiger
      hr-----lion
查询当前用户是谁
show user;
查询scott自己表空间下的所有对象时,可加,或不加用户名select * from emp;
select * from emp;
select * from scott.emp;
以sysdba身份解锁hr普通帐户
alter user hr account unlock;
以sysdba身份设置hr普通帐户的密码
alter user hr identified by lion;
当scott查询hr表空间下的所有表时,必须得加用户名
select * from hr.jobs;
在默认情况下,每个用户只能查询自已空间下的对象的权限,不能查询其它用户空间下的对象
以sysdba身份角色,授予scott用户查询所有用户空间下的对象权限
grant select any table to scott;
以sysdba身份,撤销scott用户查询所有用户空间下的对象权限
revoke select any table from scott;
scott自已查看自己所拥有的权限
select * from user_sys_privs;
从scott用户空间导航到sysdba用户空间
conn / as sysdba;
从sysdba用户空间导航到scott用户空间
conn scott/tiger;
从scott用户空间导航到hr用户空间
conn hr/lion;
查询hr用户空间中的所有对象
select * from tab;
从hr用户空间导航到scott用户空间
conn scott/tiger;
在scott用户空间下,查询hr用户空间下的jobs表,必须加上hr用户空间名
select * from hr.jobs;



视图

视图是一种基于数据表的一种虚表

  • (1)视图是一种虚表
  • (2)视图建立在已有表的基础上, 视图赖以建立的这些表称为基表
  • (3)向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句
  • (4)视图向用户提供基表数据的另一种表现形式
  • (5)视图没有存储真正的数据,真正的数据还是存储在基表中
  • (6)程序员虽然操作的是视图,但最终视图还会转成操作基表
  • (7)一个基表可以有0个或多个视图


上一篇:Android activity的回传数据


下一篇:delphi 10 seattle 安卓服务开发(三)