MySQLデータベースで多くの並列CRUD操作を実行するマルチスレッドJavaアプリケーションがあります。MySQLのマニュアルで読まれているように、InnoDBテーブル構造は、トランザクションがACIDの原則に従って実行されることを保証する必要があります。しかし、アップデートが失われることがあるため、まだ問題があります。これは、私が使用するストアドプロシージャの例の1つです。
DELIMITER //
CREATE PROCEDURE *** (
_*** INT,
_*** INT,
_*** INT,
_*** INT
)
BEGIN
START TRANSACTION;
UPDATE `***`
SET
`***`.`***` = `***`.`***` + _***,
`***`.`***` = `***`.`***` + _*** + _***,
`***`.`***` = DATE_ADD(NOW(), INTERVAL _*** SECOND)
WHERE `***`.`***` = _***;
COMMIT;
END;
//
DELIMITER ;