oracle(24)_SQL_数据库事物

版权声明:如需转载,请注明出处 https://blog.csdn.net/qq_36260974/article/details/88786169

SQL

数据库事物

数据库事物
  • 注意:本节使用的仍是上节复制的表 myemp!

范例:删除员工8001;

  • 示例图:
    在这里插入图片描述
    从结果上看似乎数据已经删除,但是我们再打开另一个窗口查看发现 8001 的员工还在。
    在这里插入图片描述

说明:

  • 事务处理:所谓的事务管理就是要保证数据的完整性,要么同时成功,要么同时失败。
  • 当我们执行完 delete 语句时,我们去数据库中去查看数据,发现并没有我们删除数据,这是因为oracle 的事务对数据库的变更的处理,我们必须做提交事务才能让数据真正的插入到数据库中,在同样在执行完数据库变更的操作后还可以把事务进行回滚,这样就不会插入到数据库。如果事务提交后则不可以再回滚。
  • 提交:commit
  • 回滚:rollback

范例:删除并提交

  • 示例图:
    在这里插入图片描述
    在这里插入图片描述

范例:删除再回滚

  • 示例图:
    在这里插入图片描述

执行和回滚按钮

  • 示例图:
    在这里插入图片描述

数据安全问题

  • 在 oracle 中会数据库变更会发生锁的情况(此处应用可以解决项目多线程并发带来的数据安全问题)当两个数据库的连接同时来修改同一数据时,一定会有一连接先修改,另一个连接就会等待直到第一个连接修改完毕再修改。

范例:数据库记录更新安全问题

  • 示例图:
    在窗口一当中更新数据,但不提交
    在这里插入图片描述
    上面的操作完成以后,同时在窗口二中对同一条数据进行更新操作,发现执行处于阻塞状态
    在这里插入图片描述
    当窗口一执行的操作提交以后,会发现窗口二的执行完成了
    在这里插入图片描述

范例:带着事物查询

  • 示例图:
    在窗口一当中带着事物查询
    在这里插入图片描述
    同时在窗口二中也执行同样的查询语句,发现执行处于堵塞状态
    在这里插入图片描述
    当窗口一带着事物查询的的操作提交以后,窗口二的带着事物查询的语句才会被执行;同理,若窗口二带着事物查询的操作未提交,窗口一是不能再次执行刚才的查询操作的。

以上操作完整源码:

--增删改操作都要开启事务,事务必须提交我们的数据才会在数据库中真正的变更
delete from myemp t where t.empno = 8001;
--提交
commit;
--查询
select * from myemp;

--删除编号为 7369 的员工记录
delete from myemp t where t.empno = 7369;
--事务在没提交之前都可以回滚,提交了就不能回滚
rollback;
--查询
select * from myemp;

--执行 update 时没有提交之前事务是挂起状态,这时这条数据被锁住
update myemp t set t.sal = t.sal + 100 where t.empno = 7369;
--查询
select * from myemp;

--带着事物查询,此时别人是不能查询的
select * from myemp for update;

如有错误,欢迎指正!

猜你喜欢

转载自blog.csdn.net/qq_36260974/article/details/88786169