请教php事务里可以用队列么

请教php事务里可以用队列么,第1张

事务处理是数据库的能力、队列可以使用nosql实现、比如redis、mongodb、或者用数据库也可以模拟实现。两个人做同一件事可以使用队列,先依照两个人做事的先后顺序放到队列,在通过后台程序顺序读取队列 *** 作逻辑

事务(transaction)是由查询和/或更新语句的序列组成。 用 begin、start transaction

开始一个事务,rollback 回滚事务,commit 提交事务。 在开始一个事务后,可以有若干个 SQL 查询或更新语句,每个 SQL

递交执行后,还应该有判断是否正确执行的语句,以确定下一步是否回滚,若都被正确执行则最后提交事务。

事务一旦回滚,数据库则保持开始事务前状态。就好象一个被编辑的文件不存盘退出,自然还是保持文件原来的样子。

所以,事务可被视为原子 *** 作,事务中的 SQL,要么全部执行,要不一句都不执行。

人家的回答,编辑文件可以理解吧

先简单介绍一下事务吧!事务是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的数据表的锁定和解锁!

MYSQL50 WINXP下测试通过~ ^_^

mysql> use test;

Database

changed

mysql> CREATE TABLE `dbtest`(

-> id int(4)

-> ) TYPE=INNODB;

Query OK, 0 rows affected, 1 warning (005

sec)

mysql> select from dbtest

-> ;

Empty set (001

sec)

mysql> begin;

Query OK, 0 rows affected (000

sec)

mysql> insert into dbtest value(5);

Query OK, 1 row affected

(000 sec)

mysql> insert into dbtest value(6);

Query OK, 1 row

affected (000 sec)

mysql> commit;

Query OK, 0 rows affected (000

sec)

mysql> select from dbtest;

+------+

| id

|

+------+

| 5 |

| 6 |

+------+

2 rows in set (000

sec)

mysql> begin;

Query OK, 0 rows affected (000

sec)

mysql> insert into dbtest values(7);

Query OK, 1 row affected

(000 sec)

mysql> rollback;

Query OK, 0 rows affected (000

sec)

mysql> select from dbtest;

+------+

| id

|

+------+

| 5 |

| 6 |

+------+

2 rows in set (000

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);

>

引自:>

select from 用户表

while(

select from 票的表

inser into order set(user_id= user_id,piao_id = piao_id )

}

上面先while 票的表 先while哪个都无所谓

直接用set来改变mysql的自动提交模式MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过set autocommit=0 禁止自动提交set autocommit=1 开启自动提交当你用 set autocommit=0的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束。

以上就是关于请教php事务里可以用队列么全部的内容,包括:请教php事务里可以用队列么、php mysql commit之后还可以rollback么、谈谈你对 mysql 事务的认识 我是php初学者不懂这个 想请教大神教我等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9678612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存