首页 > 后端开发 > 正文

PHP高并发下单用事务可以解决吗

2024-09-26 23:04:50 | 我爱编程网

今天我爱编程网小编整理了PHP高并发下单用事务可以解决吗相关信息,希望在这方面能够更好的大家。

本文目录一览:

PHP高并发下单用事务可以解决吗

PHP高并发下单用事务可以解决吗

事物不是解决高并发的。事物是为了一个操作的完整性才使用的。
php的高并发在我看主要以来php脚本的执行速度,以及对数据库的数据访问的次数,还有缓存系统的使用(包括数据缓存以及模板缓存),系统架构的优化。
还有就是web服务器做负载均衡,域名cdn做负载均衡等。

PHP高并发下单用事务可以解决吗我爱编程网

PHP中PDO的事务处理如何分析

事务处理具有四个特性:原子性、一致性、独立性、持久性。

并不是所有的数据库都支持事务处理的,PDO 为能够执行事务处理的数据库提供事务支持。

配置事务处理需注意:

1、关闭 PDO 的自动提交;

$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, false);

2、开启一个事务需要的方法;

$pdo->beginTransaction(); // 开启一个事务
$pdo->commit(); // 提交事务
$pdo->rollback(); // 回滚事务

3、一般事务处理是运行在 try...catch...语句中,当事务失败时执行 catch 代码段。

php
try {
$pdo->beginTransaction(); // 开启一个事务
$row = null;
$row = $pdo->exec("xxx"); // 执行第一个 SQL
if (!$row)
throw new PDOException('提示信息或执行动作'); // 如出现异常提示信息或执行动作
$row = $pdo->exec("xxx"); // 执行第二个 SQL
if (!$row)
throw new PDOException('提示信息或执行动作');
$pdo->commit();
} catch (PDOException $e) {
$pdo->rollback(); // 执行失败,事务回滚
exit($e->getMessage());
}
?>

在事务中的 SQL 语句,如果出现错误,那么所有的 SQL 都不执行。当所有 SQL 有无误的时候,才提交执行。

PHP高并发下单用事务可以解决吗

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

我爱编程网(https://www.52biancheng.com)小编还为大家带来谈谈你对 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);
?>
引自: -loading/archive/2012/02/21/2361702.html

以上就是我爱编程网小编给大家带来的PHP高并发下单用事务可以解决吗全部内容,希望对大家有所帮助!更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
标签: PHP
与“PHP高并发下单用事务可以解决吗”相关推荐
python可以开发软件吗
python可以开发软件吗

python写软件步骤?1、安装编译器,将工具双击打开,按照默认方式安装即可,安装完成后在开始程序中找到IDLE快捷方式,打开,可以新建一个窗口,保存为py的文件格式。2、如果要执行该文件,应该点击菜单Run下的RunModuleF5按钮即可。3、如果要调试,应该仔细的查看命令行回馈回来的信息,注意出错的位置,通过Alt加G命令迅速转到出错位置,仔细检出并改正。pytho

2024-01-09 14:59:44
python可以做界面开发吗
python可以做界面开发吗

怎样用QtCreator编辑运行python脚本我们首先来看看QtCreator能不能编辑运行python脚本。可以看到新建项目的选项里并没有python相关的选项,看了并不能用QtCreator来管理python项目。我们来看看另一个方面,看看QtCreator能不能创建编辑python的相关文件吧。可以看到,有python的相关选项,点击左侧的Python标签,在中间部分可

2024-01-08 11:50:25
Python可以用来做什么有趣的事情?
Python可以用来做什么有趣的事情?

Python可以用来做什么有趣的事情?1、处理数据Excel整理数据功能虽然很强大,但在Python面前,曾经统治职场的它也的败下阵来。因为Python在搜集数据整理分析数据的过程中更加便捷,通过几行代码还可以实现自动化操作。如果你学会Python,便可以从网上找一些数据筛选、汇总的兼职工作来赚点小钱。2、查询资料学会Python之后,很容易通过几行代码在网络上爬取各种各样的资源

2024-02-08 03:56:38
Java中CPU占用过高问题如何解决
Java中CPU占用过高问题如何解决

Java中CPU占用过高问题如何解决方法11.jps获取Java进程的PID。2.jstackpid&gt;&gt;java.txt导出CPU占用高进程的线程栈。3.top-H-pPID查看对应进程的哪个线程占用CPU过高。4.echo“obase=16;PID”|bc将线程的PID转换为16进制,大写转换为小写。5.在第二步导出的Java.txt中查找转换成为1

2024-06-01 04:31:35
java语言一般用来开发什么东西?windows窗体程序可以吗?
java语言一般用来开发什么东西?windows窗体程序可以吗?

dw和vscode区别?vscode和dw的区别1、VSCode是为开发人员设计的;2、Dreamweaver是为设计师设计的;3、VSCode支持MacOS、Windows、Linux;4、Dreamweaver不支持Linux;5、VSCode支持多种编程语言的开发,如JavaScript、C、Java、Python等;6、Dreamweaver仅支

2024-05-15 16:44:47
Python可以做哪些有趣的事情?
Python可以做哪些有趣的事情?

Python可以做哪些有趣的事情?一、制作游戏Python可以用来制作各种类型的游戏,从简单的文字游戏到复杂的图形游戏都可以实现。使用Pygame等游戏开发库,你可以编写自己的游戏逻辑、设计游戏关卡和角色,并为游戏增加声音和图形效果。通过制作游戏,你不仅可以锻炼编程能力,还可以享受游戏创作的乐趣。二、创建艺术作品Python可以用来创建各种艺术作品,包括图像生成、

2023-12-16 02:03:36
学完python可以从事哪些工作?
学完python可以从事哪些工作?

学完python可以从事哪些工作?整理了Python的7大就业方向,希望大家能找到适合自己的,然后学习下去,完成人生的目标。1、Web开发(Python后端)Python有很多优秀的Web开发框架,如Flask、Django、Bootstar等,可以帮助你快速搭建一个网站。当需要一个新功能时,用Python只需添加几行代码即可,这受到了很多初创型公司的一致欢迎。像知乎、豆瓣、小米

2024-01-14 07:06:34
thinkphp 直接 调用php 可以执行吗
thinkphp 直接 调用php 可以执行吗

thinkphp直接调用php可以执行吗$haha=M();$res=$haha-&gt;query($sql);或$res=$waw-&gt;execute($sql);$sql中包含了表名,实例化模型时可以为空。注意query是查功能,execute是增删改功能thinkPHP如何调用项目文件夹里lib里的类?项目运行的时候,你在项目的Action里面会这样写c

2024-08-11 09:50:49