Ubah kolom MySQL menjadi AUTO_INCREMENT

194

Saya mencoba memodifikasi tabel untuk membuat kolom kunci utama AUTO_INCREMENTsetelah fakta. Saya sudah mencoba SQL berikut, tetapi mendapat notifikasi kesalahan sintaksis.

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

Apakah saya melakukan sesuatu yang salah atau apakah ini tidak mungkin?

+ -------------------- +
| VERSI () |
+ -------------------- +
| 5.0.75-0ubuntu10.2 |
+ -------------------- +
C. Ross
sumber

Jawaban:

379
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment
Roma
sumber
3
Saya ingin tahu mengapa Anda menyarankan INT (4). Ada alasan khusus?
Steven Oxley
3
@ Seven Oxley karena saya menyatakan meja saya seperti itu.
C. Ross
30
Menentukan angka di antara tanda kurung tidak melakukan apa- apa (well ok, hampir tidak ada) untuk tipe integer MySQL. Satu-satunya hal yang dapat dipengaruhi oleh angka adalah lebar layar, dan terserah klien untuk melakukan itu. Tapi jangan tertipu dan berpikir bahwa itu berfungsi seperti halnya untuk tipe VARCHAR dan DECIMAL - dalam kasus tersebut, jumlah data yang dapat Anda simpan di sana sebenarnya ditentukan, sedangkan rasa tertentu dari INT selalu memungkinkan penyimpanan yang tepat rentang nilai yang sama
Roland Bouman
Saya selalu mendapatkan kesalahan kunci utama saat melakukan operasi ini, jadi saya punya ini yang saya lakukan: SET FOREIGN_KEY_CHECKS = 0; ALTER TABLE document DROP KUNCI UTAMA; ALTER TABEL dokumen MODIFY COLUM document_id INT PRIMARY KEY AUTO_INCREMENT TIDAK NULL; SET FOREIGN_KEY_CHECKS = 1;
Fernando
Ini sepertinya tidak berfungsi di MySQL karena Anda perlu mengatur kolom sebagai kunci utama karena hanya satu kolom yang diizinkan menjadi auto_increment (juga lihat jawaban Roland Bouman di bawah ini
charlchad
74

Roman benar, tetapi perhatikan bahwa kolom auto_increment harus menjadi bagian dari KUNCI UTAMA atau KUNCI UNIK (dan dalam hampir 100% kasus, itu harus menjadi satu-satunya kolom yang membentuk KUNCI UTAMA):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY
Roland Bouman
sumber
10
+1. Kunci primer diperlukan jika tidak didefinisikan pada saat pembuatan tabel.
1
Ini juga berarti bahwa data dalam kolom tersebut harus sudah unik
Umair Malhi
10

Dalam kasus saya itu hanya berfungsi ketika saya meletakkan not null. Saya pikir ini adalah kendala.

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;
Rabia Naz khan
sumber
7

SQL untuk melakukan ini adalah:

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

Ada beberapa alasan mengapa SQL Anda mungkin tidak berfungsi. Pertama, Anda harus menentukan kembali tipe data ( INTdalam hal ini). Juga, kolom yang Anda coba ubah harus diindeks (itu tidak harus menjadi kunci utama, tetapi biasanya itulah yang Anda inginkan). Selain itu, hanya ada satu AUTO_INCREMENTkolom untuk setiap tabel. Jadi, Anda mungkin ingin menjalankan SQL berikut (jika kolom Anda tidak diindeks):

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

Anda dapat menemukan informasi lebih lanjut di dokumentasi MySQL: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html untuk sintaks kolom ubah dan http://dev.mysql.com/doc /refman/5.1/en/create-table.html untuk informasi lebih lanjut tentang menentukan kolom.

Steven Oxley
sumber
6

Anda harus menentukan jenis kolom sebelum auto_incrementarahan, yaitu ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT.

Håvard S
sumber
1
SeharusnyaMODIFY COLUMN
shxfee
5

AUTO_INCREMENT adalah bagian dari tipe data kolom, Anda harus menentukan tipe data lengkap untuk kolom lagi:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

( intdiambil sebagai contoh, Anda harus mengaturnya dengan jenis kolom sebelumnya)

Dan Sabun
sumber
3

Anda dapat melakukannya seperti ini:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;
Aditya Kumar
sumber
Ini sepertinya hanya pengulangan dari semua jawaban lainnya.
Pang
2

AUTO_INCREMENT adalah bagian dari tipe data kolom, Anda harus menentukan tipe data lengkap untuk kolom lagi:

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(int diambil sebagai contoh, Anda harus mengaturnya dengan jenis kolom sebelumnya)

KKK
sumber
2

Anda dapat menggunakan kueri berikut untuk membuat document_id bertambah secara otomatis

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

Lebih disukai untuk membuat kunci primer document_id juga

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;
Azhar Zafar
sumber
1
Perhatikan bahwa jika kolom itu sudah menjadi kunci utama Anda tidak dapat mendeklarasikannya lagi di sana lagi ia memberikan kesalahan tentang beberapa kunci primer (Anda akan berharap itu menjadi sedikit lebih pintar di sana dan melihat bahwa itu adalah kunci primer yang sama saya kira) . Jadi dalam hal ini Anda hanya melewatkan KUNCI UTAMA dan itu tidak mempengaruhi pengaturan kunci primer yang ada pada kolom itu
George Birbilis
2

Pernyataan di bawah ini berfungsi. Perhatikan bahwa Anda perlu menyebutkan tipe data lagi untuk nama kolom (nyatakan ulang tipe data kolom sebelumnya).

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;
pengguna5082888
sumber
2

Jika tidak ada di atas yang berhasil coba ini. Inilah yang saya lakukan di MYSQL dan ya, Anda perlu menulis nama kolom (document_id) dua kali.

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

Untuk memodifikasi kolom di mysql kami menggunakan ubah dan ubah kata kunci. Misalkan kita telah membuat tabel seperti:

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

Sekarang kami ingin mengubah jenis id kolom menjadi bilangan bulat dengan kenaikan otomatis. Anda bisa melakukan ini dengan perintah seperti:

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

Sintaksis Tabel Sebelumnya:

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

Untuk mengubah TransactionId ke kenaikan otomatis gunakan kueri ini

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;
Usman Yaqoob
sumber
1
alter table tbl_user MODIFY COLUMN id int(10) auto_increment;
Aminur Rahman
sumber
1

Seperti ini:

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

paling utama
sumber
0

Ketika Anda mendefinisikan kembali kolom itu lagi, Anda harus menentukan tipe data lagi dan menambahkan auto_increment sebagai bagian dari tipe data.

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;
Pengoptimal
sumber
0

Menyetel kolom sebagai kunci utama dan auto_increment secara bersamaan:

  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>
Nesimi Taghizade
sumber
0

ALTER TABLE table_name MODIFY COLUM id datatype auto_increment;

Kartik Madnani
sumber
-3

Gunakan pertanyaan berikut:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
Doug Cobain
sumber