Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 您好,如果其中一个查询无法更新表,如何回滚mysql_Php_Mysql_Database_Mariadb - Fatal编程技术网

Php 您好,如果其中一个查询无法更新表,如何回滚mysql

Php 您好,如果其中一个查询无法更新表,如何回滚mysql,php,mysql,database,mariadb,Php,Mysql,Database,Mariadb,我想在数据库设置检查数量>0时更新项目数量。 如果其中一个查询无法成功更新受影响的0行,如何取消所有查询? 使用mysql/mariadb、php UPDATE `item` SET `quantity` = quantity+100 WHERE `item`.`itemid` = '0001'; UPDATE `item` SET `quantity` = quantity-100 WHERE `item`.`itemid` = '0002'; --f

我想在数据库设置检查数量>0时更新项目数量。 如果其中一个查询无法成功更新受影响的0行,如何取消所有查询? 使用mysql/mariadb、php

UPDATE `item` 
    SET `quantity` = quantity+100 
    WHERE `item`.`itemid` = '0001';

UPDATE `item` 
    SET `quantity` = quantity-100 
    WHERE `item`.`itemid` = '0002'; --fail to update

将两个更新连接到一个条件语句中

比如说,

UPDATE `item` 
    SET `quantity` = quantity + CASE itemid 
                                WHEN '0001' THEN 100
                                WHEN '0002' THEN -100
                                END
    WHERE `item`.`itemid` IN ('0001', '0002');


或者。。。许多其他变体

您必须创建存储过程

示例如下:

DELIMITER $$

CREATE  PROCEDURE `sp_name`

BEGIN

DECLARE int_count BIGINT;

START TRANSACTION;

UPDATE `item` SET `quantity` = quantity+100 WHERE `item`.`itemid` = '0001';
UPDATE `item` SET `quantity` = quantity-100 WHERE `item`.`itemid` = '0002';
    
 SELECT COUNT(itemid) INTO int_count FROM item WHERE quantity <= 0;
     
IF int_count > 0 THEN
    ROLLBACK;
 ELSE
    COMMIT;
END IF;
END$$

DELIMITER ;

查看数据库集,检查数量是否大于0。似乎它必须是数量>=0…列或表检查约束已设置:数据库集检查数量>0。此代码不可用work@mcgp代码不能工作。如果你没有得到想要的结果,那么你要么收到不正确的结果什么?或者收到错误消息什么?。
DELIMITER $$

CREATE  PROCEDURE `sp_name`

BEGIN

DECLARE int_count BIGINT;

START TRANSACTION;

UPDATE `item` SET `quantity` = quantity+100 WHERE `item`.`itemid` = '0001';
UPDATE `item` SET `quantity` = quantity-100 WHERE `item`.`itemid` = '0002';
    
 SELECT COUNT(itemid) INTO int_count FROM item WHERE quantity <= 0;
     
IF int_count > 0 THEN
    ROLLBACK;
 ELSE
    COMMIT;
END IF;
END$$

DELIMITER ;