MySQL tablosuna birincil anahtar nasıl eklenir?


104

Denediğim buydu ama başarısız oldu:

alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;

Bahşiş veren var mı?


11
Bir şey olduğunda başarısız , ne belirtmek için iyi bir fikir her zaman başarısız bir hata mesajı alıyorum: araçlar? hangisi ?
— Pascal MARTIN

Sanırım hata mesajı şuna benziyor: birden fazla birincil anahtar tanımlı
— LMD

Yanıtlar:


227

Sütunu ekledikten sonra, her zaman birincil anahtarı ekleyebilirsiniz:

ALTER TABLE goods ADD PRIMARY KEY(id)

Senaryonuzun neden çalışmadığına gelince PRIMARY KEY, sadece kelimeyi değil, şunu da belirtmeniz gerekir PRIMARY:

alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;

Benim için diyor ki: bu, birden çok birincil anahtarı tanımlar. InnoDB kullanıyorum. Not Bende zaten 3 tane var.
— LMD

2
Kesinlikle FIRSTsonrasına koyacağım AUTO_INCREMENT, yani idzaten var olan tablonun ilk sütunu olacak. Aksi takdirde, şu anda yazıldığı gibi tablonun sonuna konulacaktır, bu basit yaparken biraz kafa karıştırıcı olabilirSELECT * ...
— StefanK

Yeni 'id' sütununda birincilik nasıl elde edilir
— TipVisor

17

Mevcut Sütun

Var olan bir sütuna birincil anahtar kısıtlaması eklemek isterseniz, önceden listelenen tüm sözdizimi başarısız olacaktır.

Mevcut bir sütuna birincil anahtar kısıtlaması eklemek için şu formu kullanın:

ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;

1
mysql, MODIFY'i uygun bir ifade olarak tanımıyor (en azından XAMPP, InnoDB'de)
— LMD

@LMD mysql'in hangi sürümünü kullanıyorsunuz? (NOT: Bunu gönderdiğimde işe yaradığını biliyorum ve 5.6 olduğuna inanıyorum ... ama kesin olarak hatırlayamıyorum)
— MER

1
Sizin için, benim için olduğu gibi, MODIFY'i CHANGE ile değiştirin ve çalışacaktır!
— csr-nontol

12

Masanız oldukça büyükse, şu ifadeyi kullanmayın:

alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;

çünkü geçici bir tablodaki tüm verilerin bir kopyasını oluşturur, tabloyu değiştirir ve sonra geri kopyalar. El ile yapsan iyi olur. Tablonuzu yeniden adlandırın:

rename table goods to goods_old;

birincil anahtar ve tüm gerekli dizinler ile yeni tablo oluşturun:

create table goods (
    id  int(10) unsigned not null AUTO_INCREMENT
    ... other columns ...
    primary key (id)
);

tüm verileri eski tablodan yeniye taşıyın, kopyalamayı hızlandırmak için anahtarları ve dizinleri devre dışı bırakın:

- MyISAM TABLOLARI İÇİN BUNU KULLANIN :

SET UNIQUE_CHECKS=0;
    ALTER TABLE goods DISABLE KEYS;
        INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old; 
    ALTER TABLE goods ENABLE KEYS;
SET UNIQUE_CHECKS=1;

VEYA

- BUNU InnoDB TABLOLAR İÇİN KULLANIN :

SET AUTOCOMMIT = 0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0;
    INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old; 
SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; COMMIT; SET AUTOCOMMIT = 1;

~ 200 milyon satırlık bir tabloya PK eklemek 2000 saniye sürer.


Bu cevabı bulmak için ne kadar aramam gerektiğine şaşırdım. Bu faydalı örnekler için teşekkürler.
— Ryan

4

Bunun başka biri için önemli olup olmadığından emin değilim, ancak veritabanındaki ilk sütuna kimlik tablosunu tercih ederim. Bunun sözdizimi şöyledir:

ALTER TABLE your_db.your_table ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;

Bu, ilk cevaba göre sadece küçük bir gelişme. Farklı bir konumda olmasını istiyorsanız, o zaman

ALTER TABLE unique_address ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT AFTER some_other_column;

HTH, -ft


3

Bu sorguyu kullanın,

alter table `table_name` add primary key(`column_name`);

2

Bu kod mysql db'mde çalışıyor:

ALTER TABLE `goods`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);


0

Bunu dene,

alter table goods add column `id` int(10) unsigned primary key auto_increment

0

Benim için, önerilerin hiçbiri bana sözdizimi hatalarını vererek işe yaramadı, bu yüzden phpmyadmin'i (sürüm 4.9.2), (10.4.10-MariaDB) kullanmayı denedim ve idotomatik artışlı birincil anahtarla sütun ekledim . Idsütun ilk elemandan güzelce eklendi.

Sorgu çıktısı şuydu:

Alter TABLO table_nameEkle idINT NULL AUTO_INCREMENT İLK, birincil anahtar (ADD id);


-3

Düzgün çalışması için alıntıları kaldırın ...

alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;
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.