一、事务
1、什么是事务:
数据库事务是指作为单个逻辑工作单元执行的一系列操作(SQL语句)。这些操作要么全部执行,要么全部不执行。
2、为什么要有事务:
经典的银行转账,多条sql语句一起执行,要么一起成功,要么一起失败,单一执行,万一失败不就一方损失了吗?
3、事务特性(4种):
4、事务运行模式(3种)
例:
1 create table user( 2 id int primary key auto_increment, 3 name char(32), 4 balance int 5 ); 6 7 insert into user(name,balance) 8 values 9 (‘老李‘,999), 10 (‘老张‘,999), 11 (‘老朱‘,999); 12 13 #原子操作 14 start transaction; 15 update user set balance=899 where name=‘wsb‘; #买支付100元 16 update user set balance=1009 where name=‘egon‘; #中介拿走10元 17 update user set balance=1089 where name=‘ysb‘; #卖家拿到90元 18 commit; 19 20 #出现异常,回滚到初始状态 21 start transaction; 22 update user set balance=899 where name=‘wsb‘; #买支付100元 23 update user set balance=1009 where name=‘egon‘; #中介拿走10元 24 uppdate user set balance=1089 where name=‘ysb‘; #卖家拿到90元,出现异常没有拿到 25 rollback; 26 commit; 27 mysql> select * from user; 28 +----+------+---------+ 29 | id | name | balance | 30 +----+------+---------+ 31 | 1 | wsb | 999 | 32 | 2 | egon | 999 | 33 | 3 | ysb | 999| 34 +----+------+---------+ 35 3 rows in set (0.00 sec)
在pymysql中:
1 try: 2 cursor.execute(sql_1) 3 cursor.execute(sql_2) 4 cursor.execute(sql_3) 5 except Exception as e: 6 connect.rollback() # 事务回滚 7 print(‘事务处理失败‘, e) 8 else: 9 connect.commit() # 事务提交 10 print(‘事务处理成功‘, cursor.rowcount)# 关闭连接 11 cursor.close() 12 connect.close()
总结:事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。
二、存储过程
1、 介绍
存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql
使用存储过程的优点:
#1. 用于替代程序写的SQL语句,实现程序与sql解耦 #2. 基于网络传输,传别名的数据量小,而直接传sql数据量大
使用存储过程的缺点:
#1. 程序员扩展功能不方便
原文:https://www.cnblogs.com/kylin5201314/p/13639958.html