我有一个多线程 Java 应用程序,它在 MySQL 数据库上执行大量并行 CRUD 操作。如 MySQL 手册中所述,InnoDB 表结构应确保事务按照 ACID 原则执行。但我仍然有问题,因为有时更新会丢失。这是我使用的示例存储过程之一:
DELIMITER //
CREATE PROCEDURE *** (
_*** INT,
_*** INT,
_*** INT,
_*** INT
)
BEGIN
START TRANSACTION;
UPDATE `***`
SET
`***`.`***` = `***`.`***` + _***,
`***`.`***` = `***`.`***` + _*** + _***,
`***`.`***` = DATE_ADD(NOW(), INTERVAL _*** SECOND)
WHERE `***`.`***` = _***;
COMMIT;
END;
//
DELIMITER ;