次のような一意のインデックスを作成しました。
ALTER TABLE items
ADD UNIQUE INDEX uni_item
(warehouse_id, width, height, depth, weight);
重複したアイテムを追加することはできますが、なぜ機能しないのですか?
ノート:
テーブル自体にもここに含まれていない列がいくつかあり、warehouse_id は外部キーですが、これらは問題にならないはずですよね?
ありがとう!
@cularis: 正常に追加された複製の例を次に示します。
item_id, warehouse_id, width, height, depth, weight, date
1 4 100 100 100 14 2011-08-07 07:01:26
item_id, warehouse_id, width, height, depth, weight, date
6 4 100 100 100 14 2011-08-07 07:01:32
編集:
必要に応じてさらに情報を追加します。
CREATE TABLE `items` (
`item_id` int(11) NOT NULL AUTO_INCREMENT,
`warehouse_id` int(11) NOT NULL,
`width` decimal(3,2) NOT NULL,
`height` decimal(3,2) NOT NULL,
`depth` decimal(3,2) NOT NULL,
`weight` decimal(3,2) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY `uni_item` (`warehouse_id`,`width`,`height`,`depth`,`weight`),
KEY `warehouse_id` (`warehouse_id`),
CONSTRAINT `items_ibfk_1` FOREIGN KEY (`warehouse_id`) REFERENCES `warehouses` (`warehouse_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
INSERT INTO `main`.`items` (
`item_id` ,
`warehouse_id` ,
`width` ,
`height` ,
`depth` ,
`weight` ,
`date`
)
VALUES (
NULL , '4', 100, 100, 100, 14, CURRENT_TIMESTAMP
)