MySQL列をAUTO_INCREMENTに変更します


194

AUTO_INCREMENT事後、テーブルを変更して主キー列を作成しようとしています。次のSQLを試しましたが、構文エラーの通知を受けました。

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

私は何か間違ったことをしていますか、これは不可能ですか?

+ -------------------- +
| VERSION()|
+ -------------------- +
| 5.0.75-0ubuntu10.2 |
+ -------------------- +

回答:


379
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

3
なぜINT(4)を提案するのか興味があります。何か特別な理由は?
Steven Oxley

3
@Steven Oxleyは、テーブルをそのように宣言したためです。
C.ロス

30
括弧内の数値を指定しても、MySQL整数型ではまったくも起こりません(まあ、ほとんど何もしません)。数の影響を受ける可能性があるのは表示幅だけであり、それを行うのはクライアントの責任です。ただし、だまされてはいけません。VARCHAR型とDECIMAL型の場合と同じように機能します。これらの場合、そこに格納できるデータの量は実際に指定されますが、INTの特定のフレーバーは常に正確に格納できます。同じ値の範囲
Roland Bouman 2010年

この操作を実行すると、常に主キーエラーが発生するので、次のようにします。SET FOREIGN_KEY_CHECKS = 0; ALTER TABLEドキュメントDROP PRIMARY KEY; ALTER TABLEドキュメントMODIFY COLUMN document_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL; SET FOREIGN_KEY_CHECKS = 1;
フェルナンド

auto_incrementにできる列は1つだけなので、列を主キーとして設定する必要があるため、これはMySQLでは機能しないようです(以下のRoland Boumanの回答
charlchad

74

Romanは正しいですが、auto_increment列はPRIMARY KEYまたはUNIQUE KEYの一部である必要があることに注意してください(ほとんどの場合、これはPRIMARY KEYを構成する唯一の列である必要があります)。

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY

10
+1。テーブルの作成時に定義されていない場合、主キーが必要です。

1
また、これはその列のデータが既に一意である必要があることを意味します
Umair Malhi

10

私の場合、それを入れnot nullたときにのみ機能しました。これは制約だと思います。

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;

7

これを行うSQLは次のとおりです。

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;

SQLが機能しない理由はいくつかあります。最初に、データ型を再指定する必要があります(INTこの場合)。また、変更しようとしている列にはインデックスを付ける必要があります(主キーである必要はありませんが、通常はこれが必要です)。さらに、AUTO_INCREMENTテーブルごとに1つの列しか存在できません。したがって、次のSQLを実行することをお勧めします(列にインデックスが付けられていない場合)。

ALTER TABLE `document` MODIFY `document_id` INT AUTO_INCREMENT PRIMARY KEY;

詳細については、MySQLのドキュメントをご覧ください。http//dev.mysql.com/doc/refman/5.1/en/alter-table.htmlカラムの変更構文とhttp://dev.mysql.com/doc列の指定の詳細については、/ refman / 5.1 / en / create-table.htmlをご覧ください。


6

auto_incrementディレクティブの前に列のタイプを指定する必要がありますALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT


1
それはMODIFY COLUMN
shxfee 2014

5

AUTO_INCREMENT は列のデータ型の一部です。列の完全なデータ型をもう一度定義する必要があります。

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

int例として、列の以前のタイプに設定する必要があります)


3

あなたはこのようにそれを行うことができます:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;

これは他のすべての答えの単なる繰り返しのようです。
パン

2

AUTO_INCREMENT は列のデータ型の一部です。列の完全なデータ型をもう一度定義する必要があります。

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(例として取られたint、あなたはそれを以前に列が持っていたタイプに設定する必要があります)


2

次のクエリを使用して、document_idを自動的に増加させることができます

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

document_idを主キーにすることも推奨されます

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;

1
その列がすでに主キーである場合は、再度その列を宣言できないことに注意してください。それ以外の場合は、複数の主キーに関するエラーが発生します(この列のほうが少し賢いと思い、同じ主キーだと思います)。 。したがって、その場合は、主キーをスキップするだけで、その列の既存の主キー設定には影響しません
George Birbilis

2

以下のステートメントは機能します。列名のデータ型について再度言及する必要があることに注意してください(以前の列のデータ型を再宣言します)。

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;

2

上記のいずれも機能しない場合は、これを試してください。これは私がMYSQLで行ったことであり、はい、列名(document_id)を2回書き込む必要があります。

ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;

1

mysqlで列を変更するには、alterおよびmodifyキーワードを使用します。次のようなテーブルを作成したとします。

create table emp(
    id varchar(20),
    ename varchar(20),
    salary float
);

次に、列IDのタイプを自動インクリメントで整数に変更します。次のようなコマンドでこれを行うことができます。

alter table emp modify column id int(10) auto_increment;

1

前のテーブル構文:

CREATE TABLE apim_log_request (TransactionId varchar(50) DEFAULT NULL);

TransactionIdを自動インクリメントに変更するには、このクエリを使用します

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;


1

ちょうどこのような:

alter table document modify column id int(11) auto_increment;


0

列を再定義するときは、データ型を再度指定し、auto_incrementをデータ型の一部として追加する必要があります。

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;

0

列を主キーとauto_incrementに同時に設定:

  mysql> ALTER TABLE persons MODIFY COLUMN personID INT auto_increment PRIMARY KEY;
    Query OK, 10 rows affected (0.77 sec)
    Records: 10  Duplicates: 0  Warnings: 0

    mysql>


-3

次のクエリを使用します。

ALTER TABLE YourTable DROP COLUMN IDCol

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