2011-10-05 10 views
0

テーブルのIDを他の一意の値に変更したい。sql:プライマリキーをユニークな要素の別のリストに変更

CREATE TABLE IF NOT EXISTS test (
    id int(11) NOT NULL, 
    reverse_id int(11) NOT NULL, 
    PRIMARY KEY (id), 
    UNIQUE KEY reverse_id (reverse_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

INSERT INTO test (id, reverse_id) VALUES ('1', '2'), ('2', '1'); 

UPDATE test SET id = reverse_id; 

# Duplicate entry '2' for key 'PRIMARY' 

私は唯一のid要素の一意性のためのUPDATEの最後にチェックコマンドを探しています: これは簡単な例です。

[私は2番目の行を作成してこの行の状態をプライマリに変更できることを知っています。次にIDを更新してプライマリステータスをリセットできますが、他の行を追加したり変更したりすることなく、 、テーブル]

+0

プライマリキーを削除できますが、MySQLは単純に隠し整数プライマリキーを作成するため、要件に違反します。 – Johan

答えて

0

reverse_idを主キーとするテーブルを作成するとどうなりますか? - あなたの定義で一意なので、それは主キーの有効な候補です。

主キーは定義上一意である - この制約は、これは私の知る限りのMySQLでは不可能である

1

あなたが望むものを達成することからあなたを停止しています。

文レベルで制約を評価しません(処理中に行レベルの制約を行います)。また、遅延を定義することもできません(コミット時に制約が評価される)。

プライマリキーの名前を変更する場合は、プライマリキーを削除し、IDの番号を変更してからプライマリキーを再作成することができます。

関連する問題