InnoDB를 사용하여 주식 테이블의 데이터 무결성을 유지하려면 어떻게해야합니까? 이를 위해서는 테이블 잠금과 트랜잭션을 모두 사용해야합니까? 좋은 예제를 찾으려고 노력했지만, 오픈 소스 전자 상거래 소프트웨어는 잘 알려진 테이블 잠금/트랜잭션을 구현하지 않습니다. 아래 코드가 작동합니까? 전체 테이블을 잠글 필요가 있습니까? 아니면 판매 된 제품의 행만 잠글 수있는 방법이 있습니까? 아니면 누구도 좋은 모범을 보았습니까?재고 테이블에 대한 테이블 및/또는 거래를 잠그시겠습니까?
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;
. 모든 UPDATE 쿼리가 1 행에 영향이있는 경우
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;
그렇지 않으면 당신이 동일한 코드를하지 실행해야합니다 동시 클라이언트를 만들고 싶어하지 않는 한 테이블 잠금을 할 필요는 없습니다