2009-07-20 11 views
21

今、プライマリキーがauto_incrementフィールドのテーブルがあります。しかし、プライマリキーをusername,dateに設定する必要があります(日付に重複するユーザ名がないようにするため)。私は、プライマリキーではないフィールドをauto_incrementする必要があります

しかし、行情報(追加と削除)を変更するには、auto_incrementフィールドが必要です。

この状況では通常何が行われますか?

ありがとうございます!

答えて

16

(username、date)のコンポジットにユニークなインデックスを設定するだけです。

ALTER TABLE `table` ADD UNIQUE INDEX `name` (`username`, `date`); 

また、あなたは

ALTER TABLE `table` DROP PRIMARY KEY, ADD PRIMARY KEY(`username`,`date`); 

に試すことができると私はあなたがそれらの列はNOT NULLと宣言する必要があり、後者の場合で考えます。

+0

これは、ありがとう! – littleK

+0

@littleK私は2つのフィールドを持っています。私は1つをプライマリキーとして設定し、別のフィールドは自動増分が可能ですか? –

1
代わりに一意のキーであるためにあなたの現在の主キーを変更し

:AUTO_INCREMENTは何の問題もなく、その後正常に機能します

ALTER TABLE table DROP PRIMARY KEY, ADD UNIQUE KEY(username,date); 

。また、あなたのロー・ハンドリングに使用するだけでなく、AUTO_INCREMENTフィールドに一意のキーを配置する必要があります

ALTER TABLE table ADD UNIQUE KEY(id); 
+0

私はこのようにしましたが、まだエラーが発生していました: #1075 - 不正なテーブル定義です。オートコラムが1つしかなく、キーとして定義する必要があります – littleK

1

使用して、のようなもの:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT, 
    user VARCHAR(32) NOT NULL, 
    thedate DATE NOT NULL, 
    UNIQUE(user,thedate) 
); 

をすでにテーブルを持っている、とだけしたい場合 ユーザー+ thedate上で一意制約を追加し、私はこれが古い質問ですけど

ALTER TABLE users ADD UNIQUE KEY user_date_idx (user, thedate); 
1

を実行し、ここで私が問題を解決する方法である -

ALTER TABLE `student_info` ADD `sn` INT(3) UNIQUE NOT NULL AUTO_INCREMENT FIRST   
+0

便利なソリューションです、ありがとうございます! –

関連する問題