Oracle之事务处理

单独建立一个只包含10部门雇员的一张临时表
 CREATE TABLE emp10 AS SELECT * FROM emp WHERE deptno=10;
 
 范例:删除雇员号为7782雇员
 DELETE FROM emp10 WHERE empno=7782;
 SELECT * FROM emp10;
 此时查询结果显示 数据已经被删除
 但是当我们再开启一个sqlplus框架操作
  SELECT * FROM emp10;的时候 我们发现还是有3条记录
  这个问题就涉及到Oracle中事务处理操作。
 
  事务处理:所谓的事务处理就是保证数据操作的完整性,所有的操作要么同时成功,
  要么同时失败。在Oracle中对已每一个连接到Oracle数据库的窗口(sqlplus,sqlplusw)
  连接之后实际上都会与数据库建立一个Session(会话),每一个连接到数据库上的用户都
  表示创建了一个Session一个Session对数据库所做的修改,不会立刻反映到数据库的真
  实数据之上,是允许回滚的,当一个session提交所有操作之后,数据库才真正的做出修改
 
  在数据库的操作中提供了一下的两个主要命令完成事务的处理
    提交事务:commit;(提交后真实数据进行修改)
    回滚事务:rollback;(我们在commit之前可以取消前面的操作)
  在Oracle中关于事务的处理上,也会存在一种死锁的概念
    一个session如果更新了数据库中的记录,其他session是无法立刻更新,
    要等到对方递交后,才允许更新
    范例:
    用户1:UPDATE emp10 SET comm=2000 WHERE empno=7934;
    按了回车;
    此时用户2也想进行更新操作
    用户2:UPDATE emp10 SET comm=3000 WHERE empno=7934;
    但是按了回车后一直处于等待状态
    必须要让用户1 执行commit;命令后 用户2的命令马上自动执行;
 
 附带SQL语句练习题
   1、选择部门30部门中的所有雇员信息
     SELECT * FROM emp WHERE deptno=30;
   2、列出所有办事员(CLERK)的姓名,编号和部门编号
     SELECT ename,empno,deptno
     FROM emp
     WHERE job='CLERK';
   3、找出佣金(comm)高于薪金(sal)的员工
     SELECT * FROM emp WHERE comm>sal;
   4、找出佣金高于薪金的40%的员工
     SELECT * FROM emp WHERE comm>sal*0.4;
   5、找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细信息
     SELECT *
     FROM emp
     WHERE (deptno=10 and job='MANAGER')OR(deptno=20 and job='CLERK');
   6、找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK),既不是经理
      又不是办事员但是薪金大于或则等于2000的所有员工的详细资料
      SELECT *
     FROM emp
     WHERE (deptno=10 and job='MANAGER')
         OR(deptno=20 and job='CLERK')
         OR(job NOT IN('MANAGER','CLERK') and sal>=2000);
   7、找出收取佣金的的员工的不同工作
     SELECT DISTINCT(job)
     FROM emp
     WHERE comm is NOT NULL;
   8、找出不收取佣金或则收取佣金低于500的员工
     SELECT *
     FROM emp
     WHERE (comm is NULL) OR (comm <500);
   9、找出各月倒数第三天受雇的所有员工
     SELECT *
     FROM emp
     WHERE hiredate=LAST_DAY(hiredate)-2;
   10、找出早于25年前受雇的员工
    SELECT *
    FROM emp
    WHERE MONTHS_BETWEEN(SYSDATE,hiredate)/12>25;
   11、以首字母大写的方式显示所有的员工的姓名
    SELECT INITCAP(ename)
    FROM emp;
    
   12、显示正好为5个字符的员工的姓名
    SELECT ename
    FROM emp
    WHERE ename like '_____';(5个下划线)
    
    SELECT ename
    FROM emp
    WHERE LENGTH(ename)=5;
   13、显示不带有”R“的员工的姓名
    SELECT ename
    FROM emp
    WHERE ename NOT LIKE '%R%';
   14、显示所有员工姓名的前三个字符
    SELECT SUBSTR(ename,1,3)
    FROM emp;
   15、显示所有员工的姓名,用”a“代替所有的"A"
    SELECT REPLACE(ename,'A','a')
    FROM emp;
   16、找出在(任何年份)2月受聘的所有员工
    SELECT * FROM emp
    WHERE TO_CHAR(hiredate,'mm')=2;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值