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ı?
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ı?
Yanıtlar:
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;
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 * ...
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;
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;
- 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.
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
Bu sorguyu kullanın,
alter table `table_name` add primary key(`column_name`);
Bu kod mysql db'mde çalışıyor:
ALTER TABLE `goods`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);
ALTER TABLE GOODS MODIFY ID INT(10) NOT NULL PRIMARY KEY;
Bunu dene,
alter table goods add column `id` int(10) unsigned primary key auto_increment
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);
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;