web-dev-qa-db-ja.com

主キーではないMySQLのフィールドをauto_incrementする必要があります

現在、主キーがauto_incrementフィールドであるテーブルがあります。ただし、プライマリキーをusernamedateに設定する必要があります(日付を含むユーザー名が重複しないようにするため)。

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

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

ありがとう!

27
littleK

(ユーザー名、日付)の複合に一意のインデックスを設定するだけです。

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

別の方法として、

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

後者の場合、これらの列をNOT NULLとして宣言する必要があると思います。

19

私はこれが古い質問であることを知っています、これが私が問題をどのように解決したかです-

ALTER TABLE `student_info` ADD `sn` INT(3) UNIQUE NOT NULL AUTO_INCREMENT FIRST         
3
Abiaeme Johnson

次のようなものを使用してください:

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

すでにテーブルがあり、user + thedateに一意の制約を追加するだけの場合は、次を実行します。

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

代わりに、現在の主キーを一意のキーに変更します。

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

その後auto_incrementは問題なく機能します。行の処理に使用するには、auto_incrementフィールドにも一意のキーを配置する必要があります。

ALTER TABLE table ADD UNIQUE KEY(id);
1
zombat