私は、MySQLデータベース上で多くの並列CRUD操作を実行するマルチスレッドのJavaアプリケーションを使用しています。 MySQLのマニュアルで読んでいるように、InnoDBのテーブル構造は、トランザクションがACID priciplesに従って実行されることを保証する必要があります。しかし、私はまだ問題があります。アップデートが失われることがあるためです。これは私が使用例ストアドプロシージャのいずれかです。マルチスレッド環境でのACIDの問題
DELIMITER //
CREATE PROCEDURE *** (
_*** INT,
_*** INT,
_*** INT,
_*** INT
)
BEGIN
START TRANSACTION;
UPDATE `***`
SET
`***`.`***` = `***`.`***` + _***,
`***`.`***` = `***`.`***` + _*** + _***,
`***`.`***` = DATE_ADD(NOW(), INTERVAL _*** SECOND)
WHERE `***`.`***` = _***;
COMMIT;
END;
//
DELIMITER ;
ACIDのIの有害物質。トランザクションの分離は複雑な問題です。同じ行の同時更新を避けるために、トランザクション・レベルをシリアライズ可能に設定するか、いくつかの行ロックを設定してください。 – regilero
@regilero:あなたは答えとしてそれを置くべきです! Vilius:これも読んでください:http://www.mpopp.net/2005/12/tx-isolation-levels-3-repeatable-read-serializable/ –
私はこの記事とトランザクションレベルについての他の記事を読んだが、まだそれは私のために働かなかった...私はJavaアプリケーションの設計を代わりに再考し、MySQLサーバを5.5ブランチにアップデートする。 – Vilius