请教一个问题:
我想把这两句mysql的语句合成一句,请问该怎么写?
sql_defense11="UPDATE world SET metal =metal-(2000*'$quantity_post') and metal>'$b' WHERE world.id_star =1 ";
sql_defense12="INSERT INTO construction (id_star, thing, quantity, time_begin) VALUES ('111', '1', '20', NOW())";
第一句的意思是如果金属够 金属自减这个数量
第二句的意思是如果满足条件一,则完成这个插入
谢谢!
我想把这两句mysql的语句合成一句,请问该怎么写?
sql_defense11="UPDATE world SET metal =metal-(2000*'$quantity_post') and metal>'$b' WHERE world.id_star =1 ";
sql_defense12="INSERT INTO construction (id_star, thing, quantity, time_begin) VALUES ('111', '1', '20', NOW())";
第一句的意思是如果金属够 金属自减这个数量
第二句的意思是如果满足条件一,则完成这个插入
谢谢!
要求俩者是同步的 ,要么都成功 要么都失败.朋友还推荐下面的备选方案;
一,储存
@a = UPDATE world SET metal =metal-(2000*'$quantity_post') WHERE world.id_star =1 and metal>'$b';
if(@a = ture,INSERT INTO construction (id_star, thing, quantity, time_begin) VALUES ('111', '1', '20', NOW()),'');
二,事物处理 // connect to database $dbh = mysqli_connect($host, $user, $pass, $db); // turn off auto-commit mysqli_autocommit($dbh, FALSE); // run query 1 $result = mysqli_query($dbh, $query1); if ($result !== TRUE) { mysqli_rollback($dbh); // if error, roll back transaction } // run query 2 $result = mysqli_query($dbh, $query2); if ($result !== TRUE) { mysqli_rollback($dbh); // if error, roll back transaction } // and so on... // assuming no errors, commit transaction mysqli_commit($dbh); // close connection mysqli_close($dbh); ?>
你执行第一句后判断一下执行是否成功,成功后执行第二句,否则就事务回滚不就行了?
对于PHP和MYSQL之间打交道的内幕我不是很清楚,如果访问量大的话个人觉得可能先要锁表。
谢谢大家我想这样可以合并成一句
if(( UPDATE world SET metal =metal-(2000*'$quantity_post') WHERE world.id_star =1 and metal> '$b') = ture,INSERT INTO construction (id_star, thing, quantity, time_begin) VALUES ('111', '1', '20', NOW()), ''); 但是该如何测试执行完句子1 恰好被中断呢?