我有如下表分为:的MySQL:重复输入错误与SELECT ...插入具有唯一约束
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。
该表格现在有10 000多行,全部使用相同的stock_id(1)。我想要做的是将所有行重复两次,两次都使用新的stock_id(2和3)以及“数量”的随机值。
这里的SQL:
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;
这工作正常。它使用另一个stock_id创建10 000多个新行,因此不违反唯一性约束,尽管每行的product_id已经存在。
在这点在表中的行,用的product_id命令的例子(一个VARCHAR,丑但必要),原谅的格式:
22 0032705090062 1 1
10783 0032705090062 2 13
21 0032705090345 1 6
10784 0032705090345 2 0
...
这是每一个的product_id两次,一次为每个STOCK_ID。现在,如果我想以类似的方式创建第三只股票,并使用与上一次完全相同的查询,但用'3 AS stock_id'替换,则第一行产品会出现此错误:
“重复条目” '对于密钥2“
突然,唯一性约束被认为违反了,尽管product_id 0032705090062和stock_id 3的组合与stock_id 1和2一样唯一,不是吗?
有趣的是,单列被创建,所以有一个新行:
21563 0032705090062 3 5
...但是,这是我在试图插入的10 000多个唯一的一个。
我在这里错过了什么?为什么第一个SELECT ... INSERT INTO工作,但第二个不?
非常感谢!我没有意识到这一点。现在工作。 – 2009-05-22 10:46:47