Bir MySQL sütununu AUTO_INCREMENT olarak değiştirin


194

Birincil anahtar sütunu yapmak için bir tabloyu değiştirmeye çalışıyorum AUTO_INCREMENTAslında sonra . Aşağıdaki SQL denedim, ancak bir sözdizimi hata bildirimi aldım.

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

Yanlış bir şey mi yapıyorum yoksa bu mümkün değil mi?

+ -------------------- +
| SÜRÜM () |
+ -------------------- +
| 5.0.75-0ubuntu10.2 |
+ -------------------- +

Yanıtlar:


380
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

3
Neden INT'yi önereceğinizi merak ediyorum (4). Belirli bir nedeni var mı?
Steven Oxley

3
@Steven Oxley çünkü masamı bu şekilde ilan ettim.
C. Ross

30
Parantez arasında bir sayı belirtmek , MySQL tamsayı türleri için tam olarak hiçbir şey yapmaz (tamam, neredeyse hiçbir şey). Sayıdan etkilenebilecek tek şey ekran genişliğidir ve bunu yapmak istemciye bağlıdır. Ancak aldatılmayın ve VARCHAR ve DECIMAL tipleri için olduğu gibi çalıştığını düşünmeyin - bu durumlarda, orada saklayabileceğiniz veri miktarı gerçekten belirtilirken, belirli bir INT aroması her zaman kesin aynı değer aralığı
Roland Bouman

Bu işlemleri yaparken her zaman birincil bir anahtar hatası alıyorum, bu yüzden ne var: SET FOREIGN_KEY_CHECKS = 0; ALTER TABLO belgesi DAMLA PRİMER ANAHTAR; ALTER TABLO belgesi KOLONU DEĞİŞTİR document_id INT PRIMARY KEY AUTO_INCREMENT NULL DEĞİL; SET FOREIGN_KEY_CHECKS = 1;
Fernando

Bu, MySQL'de işe yaramıyor gibi görünüyor çünkü sütunu birincil anahtar olarak ayarlamanız gerekiyor, çünkü yalnızca bir sütunun otomatik_karakter olmasına izin veriliyor (ayrıca aşağıdaki Roland
charlchad

74

Roman haklıdır, ancak auto_increment sütununun PRIMARY KEY veya UNIQUE KEY öğesinin bir parçası olması gerektiğini unutmayın (ve vakaların neredeyse% 100'ünde PRIMARY KEY'i oluşturan tek sütun olmalıdır):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY

10
+1. Tablo oluşturulurken tanımlanmamışsa birincil anahtar gerekir.

1
Ayrıca bu, bu sütundaki verilerin zaten benzersiz olması gerektiği anlamına gelir
Umair Malhi

10

Benim durumumda sadece koyduğumda işe yaradı not null. Bence bu bir kısıtlama.

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;

7

Bunu yapmak için SQL:

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

SQL'inizin çalışmamasının birkaç nedeni vardır. İlk olarak, veri türünü yeniden belirtmelisiniz ( INTbu durumda). Ayrıca, değiştirmeye çalıştığınız sütun dizine eklenmelidir (birincil anahtar olması gerekmez, ancak genellikle istediğiniz şeydir). Ayrıca, AUTO_INCREMENTher tablo için yalnızca bir sütun olabilir . Bu nedenle, aşağıdaki SQL'i çalıştırmak isteyebilirsiniz (sütununuz dizine eklenmemişse):

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

MySQL belgelerinde daha fazla bilgi bulabilirsiniz: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html sütun değiştirme sözdizimi ve http://dev.mysql.com/doc /refman/5.1/tr/create-table.html sütun belirleme hakkında daha fazla bilgi için.


6

auto_incrementDirektiften önceki sütun türünü belirtmelisiniz , yani ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT.


1
O olmalıMODIFY COLUMN
shxfee

5

AUTO_INCREMENT sütununun veri türünün bir parçasıysa, sütunun tam veri türünü tekrar tanımlamanız gerekir:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

( intörnek olarak, sütunun daha önce sahip olduğu türe ayarlamanız gerekir)


3

Bunu şu şekilde yapabilirsiniz:

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

Bu sadece diğer tüm cevapların tekrarı gibi görünüyor.
Pang

2

AUTO_INCREMENT sütununun veri türünün bir parçasıysa, sütunun tam veri türünü tekrar tanımlamanız gerekir:

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(örnek olarak alınan int, sütunun önceden sahip olduğu türe ayarlamanız gerekir)


2

Belge_kimliğinin otomatik olarak artırılmasını sağlamak için aşağıdaki sorguyu kullanabilirsiniz

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

Document_id birincil anahtarının da yapılması tercih edilir

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;

1
Bu sütun zaten birincil anahtarsa, bunu tekrar bildiremezsiniz, başka birincil anahtarlar hakkında hata verir (orada biraz daha akıllı olmasını ve sanırım aynı birincil anahtar olduğunu görmeyi beklersiniz). . Bu durumda, PRIMARY
KEY'i atlayın

2

Aşağıdaki ifade çalışır. Sütun adı için veri türünden tekrar bahsetmeniz gerektiğini unutmayın (sütunun önceki veri türünü yeniden belirtin).

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;

2

Yukarıdaki çalışmaların hiçbiri bunu yapmazsa. MYSQL'de yaptığım budur ve evet, sütun adını (document_id) iki kez yazmanız gerekir.

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

1

Mysql'de sütunu değiştirmek için anahtar kelimeleri değiştiririz ve değiştiririz. Bir tablo oluşturduğumuzu varsayalım:

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

Şimdi sütun kimliğinin türünü otomatik artışla tamsayı olarak değiştirmek istiyoruz. Bunu aşağıdaki gibi bir komutla yapabilirsiniz:

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

1

Önceki Tablo sözdizimi:

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

TransactionId değerini otomatik olarak artırmak için bu sorguyu kullanın

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;


1

Aynen böyle:

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


0

Sütunu yeniden tanımlarken, veri türünü tekrar belirtmeniz ve veri türünün bir parçası olduğu için auto_increment eklemeniz gerekir.

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

0

Sütunu birincil anahtar ve aynı zamanda auto_increment olarak aynı anda ayarlama:

  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

Aşağıdaki sorguları kullanın:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.