Otomatik Artış Kimliği mevcut tabloya eklensin mi?


87

Önceden var olan, 'isim', 'lname', 'e-posta', 'şifre' ve 'ip' içeren bir tablom var. Ama şimdi otomatik artış sütunu istiyorum. Ancak girdiğimde:

ALTER TABLE users
ADD id int NOT NULL AUTO_INCREMENT

Aşağıdakileri alıyorum:

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

Herhangi bir tavsiye?:)


mevcut tablo tanımınızı gönderebilir misiniz?
Taryn

lütfen çıktısını gönderindescribe users
DKSan

bunu denedim, ancak sadece tabloyu döndürüyor. neye ihtiyacın var?
Charles Jenkins

@CharlesJenkins Doğru cevabı seçebilir misiniz?
Wadih M.

MODIFY şu şekilde de kullanılabilir: ALTER TABLE kullanıcıları MODIFY id int NOT NULL AUTO_INCREMENT; / * AUG 2019 Tarihli * /
Vilas Joshi

Yanıtlar:


134

Bunu dene

ALTER TABLE `users` ADD `id` INT NOT NULL AUTO_INCREMENT;

mevcut bir birincil anahtar için


12
# 1068 - Çoklu birincil anahtar tanımlandı
Charles Jenkins

6
SQL Server 2008'de 'AUTO_INCREMENT' yerine 'IDENTITY (1,1)' benim için çalıştı.
Greg A

14
Bunun tablodaki son sütun olarak bir Kimlik sütunu eklediğine dikkat edin. FIRSTBu tablodaki ilk sorgu yapmak için sorguya ekleyin .
Tobias Baumeister

5
@CharlesJenkins "Çoklu birincil anahtar" hatasını önlemek için, yenisini tanımlamadan önce mevcut birincil anahtarı bırakın:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Sean the Bean

7
Bunu ilk sütun yapmak için FIRSTörneğinALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST
Tahir Raza

75

Otomatik kimliğin olarak kullanılıp kullanılmadığı umrunda değilse PRIMARY KEY, şunu yapabilirsiniz:

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

Bunu daha yeni yaptım ve çok işe yaradı.


1
Bu benim için çalıştı ve auto_increment id sütununu birincil anahtar olarak ayarladı.
reflexiv

3
Orada ne yapıyor FIRST?
Cees Timmerman

13
@Cees Timmerman: FIRST anahtar kelimesi yeni sütunun tablodaki ilk sütun olacağını belirtir. Alternatif olarak, mevcut_kol_adı SONRA öğesini kullanarak belirli bir konumu belirtebilirsiniz. Ne FIRST ne de AFTER kullanılmazsa, yeni sütun tüm mevcut sütunların arkasına eklenir.
Ruben Ramirez Padron

ya id üzerinde bir indeks oluşturmak istiyorsam ancak PK değilsem?
morpheus

@morpheus bu kendi başına bir dizin olan EŞSİZ bir dizin ekler. PK olmayan id adlı bir sütuna sahip olmayı sevmiyorum.
Arth

38

Mevcut bir tabloya AUTO_INCREMENT eklemek istiyorsanız, aşağıdaki SQL komutunu çalıştırmanız gerekir:

 ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key

1
bu işe yaramadı! Bu hatayı aldım: # 1068 - Birden çok birincil anahtar tanımlandı
Charles Jenkins

4
Multiple primary key definedTabloda zaten bir birincil anahtarınız olduğu için elde edersiniz. Bir tablonun yalnızca bir birincil anahtarı olabilir. Bir birincil anahtara sahip olmadığında tablodaki yukarıdaki komutu tekrar deneyin
cchi

3
"Çoklu birincil anahtar" hatasını önlemek için, yenisini tanımlamadan önce mevcut birincil anahtarı bırakın:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Sean the Bean

22

İlk önce tablonun birincil anahtarını kaldırmanız gerekir

ALTER TABLE nametable DROP PRIMARY KEY

ve şimdi otomatik artırımı ekleyebilirsiniz ...

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

düşemez, ardından kimlik EKLE. OlacakDuplicate column name 'id'
John Joe

1
@JohnJoe, çünkü zaten id sütununa sahipsin. Şunu deneyin: ALTER TABLE adlı isimlendirilebilir DROP PRIMARY KEY, MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
TwoCode

17

Peki, önce auto_incrementve primary keysahip olduğunuz ve sonra aşağıdaki gibi sizinkini eklemelisiniz:

-- 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
şu hatayı aldım: # 1064 - SQL sözdiziminizde bir hata var; 1. satırda 'LTER TABLE kullanıcıları ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)' yakınında kullanılacak doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuza bakın
Charles Jenkins

kodunuza bakın, onu ALter değil, LTER olarak gönderdiniz, hepsini kopyaladığınızdan emin olun
echo_Me

teşekkürler, ama şimdi şu hatayı aldım: # 1064 - SQL sözdiziminizde bir hata var; 3. satırdaki 'ALTER TABLE kullanıcıları ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)' yakınında kullanmak için doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuza bakın üzgünüm!
Charles Jenkins

anladım: # 1064 - SQL sözdiziminizde bir hata var; 1. satırda '(id)' yakınında kullanılacak doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuza bakın
Charles Jenkins


13

Aşağıdaki komutu çalıştırırsanız:

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

Bu size hatayı gösterecektir:

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

Bunun nedeni, bu komutun adı verilen yeni sütunu idmevcut tabloya eklemeye çalışacak olmasıdır .

Mevcut sütunu değiştirmek için aşağıdaki komutu kullanmanız gerekir:

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

Bu, mevcut sütun kısıtlamasını değiştirmek için çalışmalıdır ....!


6

Varsa, tablonun birincil anahtarını silin:

 ALTER TABLE `tableName` DROP PRIMARY KEY;

Bir tabloya otomatik artış sütunu eklemek:

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

Birincil anahtar olarak kabul etmek istediğimiz sütunu değiştirin:

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

5

ADD'yi MODIFY olarak değiştirin ve işe yarayacaktır!

Değiştir

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT

İçin

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;

4
ALTER TABLE users CHANGE id int( 30 ) NOT NULL AUTO_INCREMENT

tamsayı parametresi varsayılan sql ayarıma dayanıyor, iyi günler


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

1

PostgreSQL için auto_increment yerine SERIAL kullanmanız gerekir.

ALTER TABLE your_table_name ADD COLUMN id SERIAL NOT NULL PRIMARY KEY

0

Farklı sütuna sahip halihazırda var olan birincil anahtarı kontrol edin. Varsa, aşağıdaki kullanarak birincil anahtarı bırakın:

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1
GO

ve sonra sorgunuzu olduğu gibi yazın.


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

Bunu dene. Birincil anahtarınızı bırakmanıza gerek yok.


-1

Şu şekilde ilerleyin:

Make a dump of your database first

Remove the primary key like that

TABLO ALTER TABLOSU DROP PRIMARY KEY

Add the new column like that

ALTER TABLE tablo ekleme sütun kimliği INT NOT NULL AUTO_INCREMENT FIRST, ADD birincil KEY Id (Id)

Tablo incelenecek ve AutoInc güncellenecektir.

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.