에 내가있어 다음과 같은 테이블에 삽입 ... SELECT으로 입력 오류를 중복 :MySQL의 : UNIQUE 제약
CREATE TABLE `products_quantity` (
`id` int(11) NOT NULL auto_increment,
`product_id` varchar(100) NOT NULL,
`stock_id` int(11) NOT NULL,
`quantity` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `product_id` (`product_id`,`stock_id`),
KEY `products_quantity_product_id` (`product_id`),
KEY `products_quantity_stock_id` (`stock_id`)
) ENGINE=MyISAM
PRODUCT_ID 다른 테이블에 외래 키 등 stock_id입니다.
이 테이블은 현재 모두 동일한 stock_id (1)로 10,000 개 이상의 행을 가지고 있습니다. 내가 뭘하려고하는지 모든 행을 두 번, 새로운 stock_id (2 및 3), 그리고 '수량'에 대한 임의의 값으로 복제하는 것입니다. 잘 작동
INSERT INTO `products_quantity` (product_id, stock_id, quantity)
SELECT product_id, 2 AS stock_id, FLOOR(-1 + (RAND() * 15)) AS random_quantity FROM products_quantity;
:
다음은 SQL입니다. 다른 stock_id로 10 000+ 개의 새 행을 작성하므로 각 행에 대한 product_id가 이미 존재하더라도 고유성 제한이 위반되지 않습니다.
22 0032705090062 1 1
10783 0032705090062 2 13
21 0032705090345 1 6
10784 0032705090345 2 0
...
한 번 각 stock_id를 들어, 두 번 모든 PRODUCT_ID입니다 :
PRODUCT_ID에 의해 주문이 시점에서 테이블의 행의 예 (A VARCHAR는 추한하지만 필요), 서식을 변명. 이제 3 번째 주식을 비슷한 방식으로 작성하려고하지만 '3 AS stock_id'대신 '3 AS stock_id'를 입력하면 첫 번째 제품 행에 대해이 오류가 발생합니다.
"중복 항목 ' 0032705090062-3 '키 2에 대해
product_id 0032705090062와 stock_id 3의 조합이 갑자기 stock_id 1과 2 에서처럼 고유하지 만 고유성 제약이 위반 된 것 같습니다.
는 충분히 재미있게, 하나의 행이 생성되기 때문에, 새로운 행이 :
21563 0032705090062 3 5
...하지만 내가 삽입 할 노력하고있어 10 000 +의 하나입니다.
무엇이 여기에 있습니까? 첫 번째 SELECT ... INSERT INTO가 작동하지만 두 번째 SELECT가 작동하지 않는 이유는 무엇입니까? 당신이 그것을 것 다시 실행할 때
22 0032705090062 1 1
21 0032705090345 1 6
을 잡고 처음으로, 그래서 당신은 당신이에 삽입하고 같은 테이블에서 선택하고
정말 고마워요! 나는 그것을 깨닫지 못했다. 이제 작동합니다. –