InnoDBで株価表のデータの整合性を維持する方法はありますか?これには、テーブルロックとトランザクションの両方を使用する必要がありますか?私はいくつかの良い例を見つけようとしましたが、よく知られているopensource eコマースソフトウェアでさえテーブルロック/トランザクションを実装していません。コードの下で動作するでしょうか?本当にテーブル全体をロックする必要があるのですか?あるいは、販売された製品の行だけをロックする方法はありますか?あるいは誰かが良い例を持っていますか?在庫テーブルのテーブルおよび/または取引をロックしますか?
CREATE TABLE `stock` (
`product_id` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`quantity` INT(10) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`product_id`)
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB;
。
LOCK TABLES stock WRITE;
START TRANSACTION;
SET autocommit = 0;
UPDATE stock SET quantity = quantity - 4 WHERE product_id = 'PRODUCT_1' AND quantity >= 4;
UPDATE stock SET quantity = quantity - 2 WHERE product_id = 'PRODUCT_2' AND quantity >= 2;
UPDATE stock SET quantity = quantity - 5 WHERE product_id = 'PRODUCT_3' AND quantity >= 5;
COMMIT or ROLLBACK;
すべてのUPDATEクエリは1つの影響を受けた行を持っている場合、COMMIT、あなたは同じコードを実行していることを確認同時クライアントを作成する場合を除き、それ以外の場合は