温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

数据库的事务提交和回滚

发布时间:2021-08-31 18:55:35 来源:亿速云 阅读:321 作者:chen 栏目:开发技术

本篇内容主要讲解“数据库的事务提交和回滚”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库的事务提交和回滚”吧!

事务  -  (transaction / tx)

    原子性操作性(不可以分割的操作) - 要么全做, 要么全不做

事务的特点  -  ACID 特性

A - atomicity  原子性 : 不可分割, 要么成功要么全失败

C - Consistency  一致性:  事务前后数据状态要保持一致, 总数一致

I - Isolation -  隔离性 : 多个事务不能看到对方的中间状态(提交或者回滚之前的状态)

D - Duration 持久性: 事务完成后数据要持久化(事务的影响要反映在物理存储上)

不需要显式使用事务语句开始一个事务,当遇到第一个DML语句时,一个事务开始,在出现以下情况时,事务结束。

(1)当遇到 commit 语句 或 rollback 语句时,将提交或回滚事务。

(2)当用户退出 Oracle工具时。

(3)当机器失效或系统奔溃时。

操作方法

begin; -开始事物

commit; - 提交事物   

Python 默认是取消自动提交的

rollback- 回撤操作, 只要操作没有执行 commit 就可以进行回滚操作, 撤回 

例如: 

  create table tb_account
  (
  accid char(4) not null,
  uname varchar(20) not null,
  balance float default 0
  )
  insert into tb_account values
  ('1111', '张明禄', 1200.99),
  ('2222', '王大锤', 500);
  -- 开启一个事物   start transaction
  begin;
  update tb_account set balance=balance-1000
  where accid='1111';
  update tb_account set balance=balance+1000
  where accid='2222';
  commit;   -- 提交 才能改变
  rollback;  -- 撤销
 
  begin;
  delete from  tb_account;  -- 没有commmit 不会删除表
  rollback;

SQL 注射*** 
  def main():
      config = {
          'host': 'localhost',
          'user': 'root',
          'passwd': '123456',
          'db': 'hrs',
          'charset': 'utf8',
          'cursorclass': pymysql.cursors.DictCursor
      }
      conn = pymysql.connect(**config)
      try:
          uid = input('用户名: ')
          pwd = input('密码: ')
          with conn.cursor() as cursor:
              # 注射***的万能密码: a' or '1'='1
              """
              sql = "select 'x' from tb_user where username='%s' \
                       and userpass='%s'" % (uid, pwd)
              if cursor.execute(sql) > 0:
              """
              # cursor.callproc('sp_dept_avg_sal', ())
              # 定义存储过程 / PyMySQL调用存储过程
              if cursor.execute(
                      'select 1 from tb_user where username=%s and userpass=%s',
                      (uid, pwd)):
                  print('登录成功, 开始使用系统')
              else:
                  print('用户名或密码错误')
      finally:
          conn.close()

到此,相信大家对“数据库的事务提交和回滚”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI