单独建立一个只包含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;
Oracle之事务处理
最新推荐文章于 2022-11-27 19:00:00 发布