Php 您好,如果其中一个查询无法更新表,如何回滚mysql
我想在数据库设置检查数量>0时更新项目数量。 如果其中一个查询无法成功更新受影响的0行,如何取消所有查询? 使用mysql/mariadb、phpPhp 您好,如果其中一个查询无法更新表,如何回滚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
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 ;