phpmysql事物,mysql 事物

本文目录一览:

php mysql 事务怎么写

建一张test表

set autocommit=0;//设置mysql不自动提交就是不自动执行sql语句

begin; //开启一个事务

insert into test value(test);

insert into test value(test2);

commit;//提交 ,会执行上面2句sql语句 此时test 表里面有 test 和 test2 2条数据

begin; //开启一个事务

insert into test values(test3);

rollback; //回滚 , test表里面并没有test3 这条数据

通常 在php里面会判断 if(!mysql_query($sql)){mysql_query(‘rollback’);} 就是如果没有成功执行sql就进行回滚,比如转账我给你10块钱 先从我账号里面减去10元 再从你账户加10元 这就是2条sql 要保证都能执行完成

谈谈你对 mysql 事务的认识 我是php初学者不懂这个 想请教大神教我

先简单介绍一下事务吧!事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID)

原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!

一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!就拿网上购物来说吧,你只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!

隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样!

持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!

MYSQL的事务处理主要有两种方法。

1、用begin,rollback,commit来实现

begin

开始一个事务

rollback 事务回滚

commit 事务确认

2、直接用set来改变mysql的自动提交模式

MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过

set autocommit=0

禁止自动提交

set autocommit=1 开启自动提交

来实现事务的处理。

但注意当你用 set

autocommit=0

的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!

个人推荐使用第一种方法!

MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!(切记!)

下次有空说下MYSQL的数据表的锁定和解锁!

MYSQL5.0 WINXP下测试通过~ ^_^

mysql use test;

Database

changed

mysql CREATE TABLE `dbtest`(

– id int(4)

– ) TYPE=INNODB;

Query OK, 0 rows affected, 1 warning (0.05

sec)

mysql select * from dbtest

– ;

Empty set (0.01

sec)

mysql begin;

Query OK, 0 rows affected (0.00

sec)

mysql insert into dbtest value(5);

Query OK, 1 row affected

(0.00 sec)

mysql insert into dbtest value(6);

Query OK, 1 row

affected (0.00 sec)

mysql commit;

Query OK, 0 rows affected (0.00

sec)

mysql select * from dbtest;

+——+

| id

|

+——+

| 5 |

| 6 |

+——+

2 rows in set (0.00

sec)

mysql begin;

Query OK, 0 rows affected (0.00

sec)

mysql insert into dbtest values(7);

Query OK, 1 row affected

(0.00 sec)

mysql rollback;

Query OK, 0 rows affected (0.00

sec)

mysql select * from dbtest;

+——+

| id

|

+——+

| 5 |

| 6 |

+——+

2 rows in set (0.00

sec)

mysql

*******************************************************************************************************************

[PHP]

function

Tran( $sql ) {

$judge = 1;

mysql_query(‘begin’);

foreach ($sql as $v) {

if

( !mysql_query($v) ) {

$judge =

0;

}

}

if ($judge == 0)

{

mysql_query(‘rollback’);

return

false;

}

elseif ($judge == 1) {

mysql_query(‘commit’);

return true;

}

}

[/PHP]

************************************************

?php

$handler=mysql_connect(“localhost”,”root”,””);

mysql_select_db(“task”);

mysql_query(“SET

AUTOCOMMIT=0″);//设置为不自动提交,因为MYSQL默认立即执行

mysql_query(“BEGIN”);//开始事务定义

if(!mysql_query(“insert

into trans (id)

values(‘2’)”))

{

mysql_query(“ROOLBACK”);//判断当执行失败时回滚

}

if(!mysql_query(“insert

into trans (id)

values(‘4’)”))

{

mysql_query(“ROOLBACK”);//判断执行失败回滚

}

mysql_query(“COMMIT”);//执行事务

mysql_close($handler);

?

引自:

php mysql事务能解决什么问题

1、用begin,rollback,commit来实现

begin 开始一个事务

rollback 事务回滚

commit 事务确认

2、直接用set来改变mysql的自动提交模式

MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过

set autocommit=0 禁止自动提交

set autocommit=1 开启自动提交

来实现事务的处理。

php关于mysql数据库简单回滚问题

我们经常会遇到操作一张大表,发现操作时间过长或影响在线业务了,想要回退大表操作的场景。在我们停止大表操作之后,等待回滚是一个很漫长的过程,尽管你可能对知道一些缩短时间的方法,处于对生产环境数据完整性的敬畏,也会选择不做介入。最终选择不作为的原因大多源于对操作影响的不确定性。实践出真知,下面针对两种主要提升事务回滚速度的方式进行验证,一种是提升操作可用内存空间,一种是通过停实例,禁用 redo 回滚方式进行进行验证。

仔细阅读过官方手册的同学,一定留意到了对于提升大事务回滚效率,官方提供了两种方法:一是增加 innodb_buffer_pool_size 参数大小,二是合理利用 innodb_force_recovery=3 参数,跳过事务回滚过程。第一种方式比较温和,innodb_buffer_pool_size 参数是可以动态调整的,可行性也较高。第二种方式相较之下较暴力,但效果较好。

两种方式各有自己的优点,第一种方式对线上业务系统影响较小,不会中断在线业务。第二种方式效果更显著,会短暂影响业务连续,回滚所有没有提交的事务。

php 开启mysql事务,会自动提交么

您好,MySQL提交方式autocommit默认开启,这种模式本身就是以每次查询为一次单独的事务。

当开启事务后,直到执行commit语句才会提交,所以不会自动提交,否则我们开启事务也没有意义了呀。

希望能帮到您。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/238767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:13
下一篇 2024-12-12 12:13

相关推荐

  • 如何修改mysql的端口号

    本文将介绍如何修改mysql的端口号,方便开发者根据实际需求配置对应端口号。 一、为什么需要修改mysql端口号 默认情况下,mysql使用的端口号是3306。在某些情况下,我们需…

    编程 2025-04-29
  • Python操作MySQL

    本文将从以下几个方面对Python操作MySQL进行详细阐述: 一、连接MySQL数据库 在使用Python操作MySQL之前,我们需要先连接MySQL数据库。在Python中,我…

    编程 2025-04-29
  • MySQL递归函数的用法

    本文将从多个方面对MySQL递归函数的用法做详细的阐述,包括函数的定义、使用方法、示例及注意事项。 一、递归函数的定义 递归函数是指在函数内部调用自身的函数。MySQL提供了CRE…

    编程 2025-04-29
  • MySQL bigint与long的区别

    本文将从数据类型定义、存储空间、数据范围、计算效率、应用场景五个方面详细阐述MySQL bigint与long的区别。 一、数据类型定义 bigint在MySQL中是一种有符号的整…

    编程 2025-04-28
  • MySQL左连接索引不生效问题解决

    在MySQL数据库中,经常会使用左连接查询操作,但是左连接查询中索引不生效的情况也比较常见。本文将从多个方面探讨MySQL左连接索引不生效问题,并给出相应的解决方法。 一、索引的作…

    编程 2025-04-28
  • CentOS 7在线安装MySQL 8

    在本文中,我们将介绍如何在CentOS 7操作系统中在线安装MySQL 8。我们会从安装环境的准备开始,到安装MySQL 8的过程进行详细的阐述。 一、环境准备 在进行MySQL …

    编程 2025-04-27
  • 如何使用MySQL字段去重

    本文将从多个方面为您详细介绍如何使用MySQL字段去重并给出相应的代码示例。 一、SELECT DISTINCT语句去重 MySQL提供了SELECT DISTINCT语句,通过在…

    编程 2025-04-27
  • MySQL正则表达式替换

    MySQL正则表达式替换是指通过正则表达式对MySQL中的字符串进行替换。在文本处理方面,正则表达式是一种强大的工具,可以方便快捷地进行字符串处理和匹配。在MySQL中,可以使用正…

    编程 2025-04-27
  • Apache2.4和MySQL的全能编程开发工程师指南

    本文将从多个方面对Apache2.4和MySQL进行详细的阐述,为全能编程开发工程师提供有用的参考和指导。首先,我们来解答这个标题所涵盖的主题: 本文将提供Apache2.4和My…

    编程 2025-04-27
  • MySQL JDBC驱动包下载详解

    一、JDBC驱动介绍 JDBC是Java Database Connectivity的缩写,它是Java应用程序与各种数据库连接的标准API,允许Java程序员使用JDBC API…

    编程 2025-04-25

发表回复

登录后才能评论