自動インクリメントIDを既存のテーブルに追加しますか?


82

'fname'、 'lname'、 'email'、 'password'、および 'ip'を含む既存のテーブルがあります。しかし、今は自動インクリメント列が必要です。しかし、私が入ると:

ALTER TABLE users
ADD id int NOT NULL AUTO_INCREMENT

私は次のようになります:

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

何かアドバイス?:)


既存のテーブル定義を投稿できますか?
タリン

describe users
DKSan 2013

それを試しましたが、テーブルを返すだけです。あなたは何が必要ですか?
Charles Jenkins

@CharlesJenkins正しい答えを選んでいただけますか?
WadihM.19年

MODIFYは次のようにも使用できます。ALTERTABLEユーザーMODIFYid int NOT NULL AUTO_INCREMENT; / * 2019年
VilasJoshi19年

回答:


131

これを試して

ALTER TABLE `users` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY

12
#1068-複数の主キーが定義されました
Charles Jenkins

6
SQL Server 2008では、「AUTO_INCREMENT」を「IDENTITY(1,1)」に置き換えるとうまくいきました。
グレッグA

13
これにより、テーブルの最後の列としてID列が追加されることに注意してください。FIRSTクエリに追加して、このテーブルの最初にします。
Tobias Baumeister 2016年

5
@CharlesJenkinsは、新しいものを定義する前に、既存の主キーをドロップし、「複数の主キー」エラーを回避するには:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
ショーン・ビーン

6
最初の列にするには、FIRSTたとえばALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST
Tahir Raza 2018

72

自動IDがとして使用されているかどうかを気にしない場合PRIMARY KEYは、

ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST;

私はちょうどこれをしました、そしてそれは御馳走を働きました。


1
これは私にとってはうまくいき、auto_incrementid列を主キーとして設定しました。
reflexiv 2013

3
そこで何をしFIRSTますか?
Cees Timmerman 2015

12
@Cees Timmerman:キーワードFIRSTは、新しい列がテーブルの最初の列になることを示します。または、AFTERexistent_col_nameを使用して特定の位置を指定することもできます。FIRSTもAFTERも使用されていない場合、現在のすべての列の後に新しい列が追加されます。
ルーベンラミレスパドロン2015

PKではなくidにインデックスを作成したい場合はどうすればよいですか?
morpheus 2016

@morpheusこれは、それ自体がインデックスであるUNIQUEインデックスを追加します。PKではないidという列を持つのは好きではありません。
ARTH

34

既存のテーブルにAUTO_INCREMENTを追加する場合は、次のSQLコマンドを実行する必要があります。

 ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key

1
それはうまくいきませんでした!このエラーが発生しました:#1068-複数の主キーが定義されています
Charles Jenkins

4
Multiple primary key definedテーブルに主キーがすでにあるために取得します。テーブルは1つの主キーのみを持つことができます。主キーがない場合は、テーブルで上記のコマンドを再試行してください
cchi 2016

3
「複数の主キー」エラーを回避するには、新しいものを定義する前に、既存の主キーをドロップしますALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
ショーン・ビーン

21

まず、テーブルの主キーを削除する必要があります

ALTER TABLE nametable DROP PRIMARY KEY

そして今、あなたは自動インクリメントを追加することができます...

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

ドロップできない場合は、IDを追加します。取得しますDuplicate column name 'id'
ジョンジョー

1
@JohnJoe、それはあなたがすでにid列を持っているからです。これを試してください:ALTER TABLE nametable DROP PRIMARY KEY、MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
TwoCode 2018年

17

さて、あなたは最初にを落とさなければなりません、auto_incrementそしてprimary keyあなたは持っていて、それからあなたのものを次のように追加します:

-- drop auto_increment capability
alter table `users` modify column id INT NOT NULL;
-- in one line, drop primary key and rebuild one
alter table `users` drop primary key, add primary key(id);
-- re add the auto_increment capability, last value is remembered
alter table `users` modify column id INT NOT NULL AUTO_INCREMENT;

1
このエラーが発生しました:#1064-SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、「LTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY(id)」の近くで使用する正しい構文を確認してください。1行目
Charles Jenkins

あなたのコードを見て、あなたがそれを投稿したのは、ALterではなくLTERを見逃している、あなたがそれをすべてコピーしたことを確認してください
echo_Me 2013

おかげで、しかし今私はこのエラーを持っています:#1064-あなたはあなたのSQL構文にエラーがあります。3行目の「ALTERTABLEusers ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY(id)」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。申し訳ありません。
Charles Jenkins

これを取得しました:#1064-SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、1行目の「(id)」の近くで使用する正しい構文を確認してください
Charles Jenkins

さて

12

次のコマンドを実行した場合:

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

これにより、エラーが表示されます。

ERROR 1060 (42S21): Duplicate column name 'id'

これは、このコマンドがという名前の新しい列を追加しようとするためです。 idを既存のテーブルです。

既存の列を変更するには、次のコマンドを使用する必要があります。

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

これは、既存の列制約を変更するために機能するはずです。


6

テーブルの主キーが存在する場合は削除します。

 ALTER TABLE `tableName` DROP PRIMARY KEY;

テーブルへの自動インクリメント列の追加:

ALTER TABLE `tableName` ADD `Column_name` INT PRIMARY KEY AUTO_INCREMENT;

主キーと見なす列を変更します。

alter table `tableName` modify column `Column_name` INT NOT NULL AUTO_INCREMENT PRIMARY KEY;

5

ADDをMODIFYに変更するだけで、機能します。

交換

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;


2
ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key FIRST

0

別の列を持つ既存の主キーを確認してください。はいの場合、以下を使用して主キーをドロップします。

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1
GO

次に、クエリをそのまま記述します。


0
ALTER TABLE `table` ADD `id` INT NOT NULL AUTO_INCREMENT unique

これを試して。主キーを削除する必要はありません。


0

PostgreSQLの場合、auto_incrementの代わりにSERIALを使用する必要があります。

ALTER TABLE your_table_name ADD COLUMN id SERIAL NOT NULL PRIMARY KEY

-1

そのように進んでください:

Make a dump of your database first

Remove the primary key like that

ALTER TABLE yourtable DROP PRIMARY KEY

Add the new column like that

ALTER TABLE yourtable add column Id INT NOT NULL AUTO_INCREMENT FIRST、ADD primary KEY Id(Id)

テーブルが検索され、AutoIncが更新されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.