2011-01-08 6 views
0

私はitemsのテーブルを持っていますが、ユーザによって選択されたアイテムは保持されていますが、ユニークなキーやプライマリキーがないため、テーブルに一意のレコードがありません。userIDlistIDは一意ではありません複数のアイテムがある場合)、itemIDは、より多くのユーザーが同じアイテムを選択できるため、一意/プライマリにすることができます。そのテーブルに一意のキーや主キーを追加する正しい方法は何ですか?mysqlのユニークキー

項目表:

CREATE TABLE IF NOT EXISTS `items` (
    `userID` int(20) NOT NULL, 
    `listID` int(20) NOT NULL, 
    `itemID` int(20) NOT NULL, 
    `qty` int(10) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

アイテムデータ:

INSERT INTO `items` (`userID`, `listID`, `itemID`, `qty`) VALUES 
(12, 277, 44, 2160), 
(12, 277, 3683, 13500), 
(12, 277, 3689, 2700), 
(12 277, 9832, 4320), 
(12 277, 9848, 540), 
(12, 277, 16272, 81000), 
(12, 277, 16273, 81000), 
(12, 277, 16274, 243000), 
(71, 278, 12066, 4), 
(82, 279, 44, 2880), 
(82, 279, 3683, 18000), 
(82, 279, 3689, 3600), 
(82, 279, 9832, 5760); 

答えて

1

を追加します。この場合、私は、アイテムがユーザーとリストに一意になるように、すべてのID列にわたってあなたのインデックスを持つお勧めします。これはトリックを行う必要があります:

CREATE UNIQUE INDEX unique ON tbl_name (userID, listID, itemID); 
+0

それは私がどのように私は行を更新することができ、今、してくれてありがとう – afarazit

+0

を探していたものだ、 'UPDATEユニークKEYは何か=「」 'を設定すると言うする方法は何ですか? – afarazit

+0

@atno残念ながら、いいえ。ユニークキーは、重複が入力されるのを防ぐだけです。 'UPDATE tbl_name SET qty = 123 WHERE userID = 1234 AND listID = 4321 AND itemID = 5678;'を実行する必要があります。レコードを更新する方法が必要な場合は、他の回答に示唆されているように主キー「ID」を追加してください。 – vonconrad

1

があなたのテーブルに余分な "ID" 欄を宣言し、自動インクリメントを使用します。例えば、 http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

この列には、意味を持たないが、一意にテーブルのエントリ(主キーの全体の目的を)参照するために使用することができます。

+0

正確にどのように(新しいID列ではない)DATA ROWが一意になりますか? – PerformanceDBA

0

は、あなたが複数のカラムにインデックスを作成することができ、新しい列

`id` int (20) auto_increment primary key 
+0

DATA ROW(新しい 'id'カラムではない)がどのようにして一意になりますか? – PerformanceDBA

+0

それはありませんが、それは問題ではありませんでした。 – weltraumpirat

関連する問題