批量操作
何为批量操作,就是一次性插入多条数据….在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默认支持的隔离级别是: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个或多个视图