MySQL学习-MySQL内置功能_事务操做

1.事务详解

1.1 事务的概念

  MySQL 事务主要用于处理操做量大,复杂度高的数据。好比说,在人员管理系统中,你删除一我的员,你即须要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操做语句就构成一个事务!mysql

  • 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
  • 事务处理能够用来维护数据库的完整性,保证成批的 SQL 语句要么所有执行,要么所有不执行。
  • 事务用来管理 insert,update,delete 语句

1.2 事务的特性

通常来讲,事务是必须知足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。sql

  • 原子性:一个事务(transaction)中的全部操做,要么所有完成,要么所有不完成,不会结束在中间某个环节。事务在执行过程当中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务历来没有执行过同样。数据库

  • 一致性:在事务开始以前和事务结束之后,数据库的完整性没有被破坏。这表示写入的资料必须彻底符合全部的预设规则,这包含资料的精确度、串联性以及后续数据库能够自发性地完成预约的工做。并发

  • 隔离性:数据库容许多个并发事务同时对其数据进行读写和修改的能力,隔离性能够防止多个事务并发执行时因为交叉执行而致使数据的不一致。事务隔离分为不一样级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。ide

  • 持久性:事务处理结束后,对数据的修改就是永久的,即使系统故障也不会丢失。spa

1.3 经常使用事务的控制语句

  • BEGIN 或 START TRANSACTION 显式地开启一个事务;code

  • COMMIT 也可使用 COMMIT WORK,不过两者是等价的。COMMIT 会提交事务,并使已对数据库进行的全部修改为为永久性的;blog

  • ROLLBACK 也可使用 ROLLBACK WORK,不过两者是等价的。回滚会结束用户的事务,并撤销正在进行的全部未提交的修改;事务

  • SAVEPOINT identifier,SAVEPOINT 容许在事务中建立一个保存点,一个事务中能够有多个 SAVEPOINT;ip

  • RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

  • ROLLBACK TO identifier 把事务回滚到标记点;

  • SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。

1.4 mysql事务处理方法

一、用 BEGIN, ROLLBACK, COMMIT来实现

  • BEGIN 开始一个事务
  • ROLLBACK 事务回滚
  • COMMIT 事务确认

二、直接用 SET 来改变 MySQL 的自动提交模式:

  • SET AUTOCOMMIT=0 禁止自动提交
  • SET AUTOCOMMIT=1 开启自动提交

2.实际例子

  可是在平常生活中,好比张三有15620元钱(在支付宝上面),李四有240元,如今张三要给李四转600元。这时候咱们须要数据库中,在张三的15620上减掉600,在李四的240上面加上600。这是俩个mysql的语句,可是若是咱们执行的时候,在减掉张三的语句成功执行以后,第二句语句执行失败(由于某一种缘由)。那是否是这600块就凭空消失了呢?很明显,支付宝不可能让这样的事情发生。因此咱们要把这俩个语句绑在一块,要么一块儿执行成功,要么就都执行失败。

# -*- coding: UTF-8 -*-

import MySQLdb  

#包的导入

db = MySQLdb.connect("ip地址,本机为localhost""用户名","密码","表名")

#打开数据库的链接 

cursor = db.cursor()

#使用cursor()方法得到操做游标

try:
   # 执行sql语句
   cursor.execute("update account set money=money-600 where name='zhangsan'")
   cursor.execute("update account set money=money+600 where name='lisi'")
   # 提交到数据库执行
   db.commit()
except:
   # 发生错误时回滚    回滚到获取游标的位置开始从新执行  看代码上面的文字有说明
   db.rollback()

db.close()

#关闭数据库的链接

OK

相关文章
相关标签/搜索