事务处理:在实际案例当中干一件事的mysql语句(好比转账,小一同学转账100,小二同学收账,在mysql当中小一就要减去转账的钱,小二就要增加100快)倘若该语句执行过程中有任何一条的sql语句出错那么就将该件事情的sql语句全部撤销。这就叫事务处理。

mysql中常用的表类型有两种:

  1.mylsam 非事务  特点:增删改速度快

  2.InnodB  事务型  特点:安全性高

mysql默认的是mylsanm,所以我们使用mysql的事务处理就需要将默认的改为InnodB类型。

我们先来创建一个innodb类型的表。

mysql> create table demo(
-> id int not null auto_increment primary key,
-> username char(50),
-> yue double)
-> engine=innodb; //将引擎设置为innodb,engine英译为:引擎
Query OK, 0 rows affected (0.20 sec)

此时我插入两条数据:(PS:此时还没有进行开启自动提交,所以数据不会自动提交。)

mysql> insert into demo(id,username,yue) values(1,'zhangsan',100);
Query OK, 1 row affected (0.00 sec) mysql> insert into demo(id,username,yue) values(2,'lisi',120);
Query OK, 1 row affected (0.00 sec)

在mysql默认当中执行sql语句是自动提交的,比如insert into demo(id,username,yue) values(1,"admin",1000);执行了以后就直接自动提交。我们要进行事务处理就需要做以下步骤

1.先将自动提交给关闭

mysql> set autocommit=0; //auto英译为自动,commit英译为提交、推送。0为关闭,1为开启。
Query OK, 0 rows affected (0.00 sec)

2.开启事物处理

mysql> start transaction; //trasaction英译为处理。
Query OK, 0 rows affected (0.00 sec)

如此便OK了。

假设我们现在zhangsan同学用余额转账转了十块钱给李四然后,那么就会执行两条sql语句,一条是将张三同学的余额减掉十元钱,第二个是将李四余额加十元。

mysql> update demo set yue = 90 where username = 'zhangsan';
Query OK, 1 row affected (0.08 sec)
Rows matched: 1 Changed: 1 Warnings: 0

将设此时因为系统错误,李四没有收到张三转账的十元。那么就可以使用rollback进行撤回。

mysql> select * from demo;
+----+----------+------+
| id | username | yue |
+----+----------+------+
| 1 | zhangsan | 100 |
| 2 | lisi | 120 |
+----+----------+------+
2 rows in set (0.00 sec) mysql> update demo set yue = 90 where username = 'zhangsan';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from demo;
+----+----------+------+
| id | username | yue |
+----+----------+------+
| 1 | zhangsan | 90 |
| 2 | lisi | 120 |
+----+----------+------+
2 rows in set (0.00 sec) mysql> rollback;
Query OK, 0 rows affected (0.05 sec) mysql> select * from demo;
+----+----------+------+
| id | username | yue |
+----+----------+------+
| 1 | zhangsan | 100 |
| 2 | lisi | 120 |
+----+----------+------+
2 rows in set (0.00 sec)

在没有使用commit提交之前都是可撤回的。因为数据并没有提交。

如果要提交就用commit命令。即可。

跟着百度学PHP[14]-PDO之Mysql的事务处理1的更多相关文章

  1. 跟着百度学PHP[14]-PDO之Mysql的事务处理2

    前面所将仅仅是在纯mysql下的讲解,这节就是要将其搬到PDO台面上来了. 将自动提交关闭. SetAttribute下有一个PDO::ATTR_AUTOCOMMIT 将其设置为0即可关闭,如:$pd ...

  2. 跟着百度学PHP[14]-PDO的错误处理模式&PDO执行SQL

    我们在使用PDO去执行sql语句的时候并不会报错.如下案例所示: <?php try { //$pdo = new pdo("mysql:host=主机;port=端口;dbname= ...

  3. 跟着百度学PHP[14]-PDO的预处理语句2

    在$sql = $pdo -> prepare("insert into users(gold,user,password) values(?,?,?)"):条语句我们不仅仅 ...

  4. 跟着百度学PHP[14]-PDO的预处理语句1

    预处理语句有以下两个特点: 1.效率高 2.安全性好 为什么说预处理语句效率高呢? 预处理语句就好比一个模板,比如下面的一串插入语句: insert into admin(id,username,pa ...

  5. 跟着百度学PHP[14]-初识PDO数据库抽象层

    目录: 00x1 php中的pdo是什么? 00x2 pdo创建一个PDO对象 00x1 php中的pdo是什么? 就是操作数据库的方法,pdo就是把操作数据库的函数封装成一个pdo类,其间做了安全验 ...

  6. 跟着百度学PHP[14]-COOKIE的应用/网站登陆案例完整案例

    先在数据库当中创建以下数据: mysql> create table user( -> id int not null auto_increment, ) not null default ...

  7. 跟着百度学PHP[14]-PDO-优化驱动

    使用方法设置预定义变量 PDO的方法/属性 PDO::beginTransaction — Initiates a transaction PDO::commit — Commits a transa ...

  8. 跟着百度学PHP[17]-复习PDO的几个关键词

    主要就是复习一下几个关键词.发现太久没有写又忘了.惭愧. final self static const

  9. 跟着百度学PHP[4]OOP面对对象编程-17-多态

    多态是除封装和继承之外的另一个面象对象的三大特性之一. 多态的作用简而言之就是为程序做括展. 比如说在公司上班,每个月财务发放工资,同一个发工资的方法,在公司内不同的员工或是不同职位的员工,都是通过这 ...

随机推荐

  1. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.7.Oracle 11G R2 RAC修改public网络IP

    问题:Linuxrac2节点的public网IP被占用,导致集群节点2无法访问 1.禁止相关CRS资源的启动,停止这些资源(vip,listener,scan,scan_listener,databa ...

  2. Hibernate原生SQL查询数据转换为HQL查询数据方法

    HQL形式:(构造方法不支持timestamp类型) public List<Device> queryByMatherBoardId(String matherBoardId) { St ...

  3. web页面实时更新页面的原理--WebSocket

    原文:https://www.jianshu.com/p/8f956cd4d42b angular-cli启动的项目也可以自动刷新,底下应该也是应用的websocket的原理. ----------- ...

  4. TCP的状态(SYN,FIN等)

    TCP的标志位有SYN,FIN,RST,ACK,PSH,URG SYN:建立连接. FIN:关闭连接. RST:连接重置. ACK:响应. PSH:有数据传输. URG:urgent紧急. ACK可以 ...

  5. [置顶] 原创鼠标拖动实现DIV排序

    先上效果图: 对比传统的排序,这是一个很不错的尝试,希望对大家有启发. 大家可以参考我的上一篇博文:http://blog.csdn.net/littlebo01/article/details/12 ...

  6. 算法笔记_059:蓝桥杯练习 Anagrams问题(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,“Unclea ...

  7. .htaccess 文件中详细介绍

    #如果存在rewrite_module 模块则执行里面的代码 <IfModule rewrite_module> #开启重写机制 RewriteEngine On #告诉apache这里不 ...

  8. visio 画图工具

    1.线条 [设计] ---  [页面设置]----打开 对话框 [布局与排列]-----[排列]   ----  [样式] ---   [直 2.word中插入viso 插入→对象→visio

  9. 纯css3响应式3d翻转菜单

    前端开发whqet,csdn,王海庆,whqet,前端开发专家 周末快乐哈,今天来看一个纯CSS3实现的3d翻转菜单.3d响应式菜单,希望对大家有所帮助. 在线赞赏效果.在线编辑代码,或者下载收藏. ...

  10. 【Python】学习笔记四:数学运算

    python中的加减乘除比其他的语言简单,不需要对其赋值变量 加减乘除 ) #加法 ) #减法 ) #乘法 ) #除法 5.0 ) #乘方 判断 判断返回的是True或者False ) #等于 Tru ...