MySQL'de bir sütun yeniden adlandırılırken hata oluştu


434

Tablodaki bir sütunu nasıl yeniden adlandırabilirim xyz? Sütunlar:

Manufacurerid, name, status, AI, PK, int

Yeniden adlandırmak istiyorum manufacturerid

PHPMyAdmin panelini kullanmayı denedim, ancak bu hatayı alıyorum:

MySQL said: Documentation
#1025 - Error on rename of '.\shopping\#sql-c98_26' to '.\shopping\tblmanufacturer' (errno: 150)

5
Yabancı anahtar başvurusu olan bir tabloyu değiştirmeye çalışıyorsunuz.
mellowsoon

Yanıtlar:


747

Lone Ranger çok yakın ... aslında, yeniden adlandırılan sütunun veri türünü de belirtmeniz gerekiyor. Örneğin:

ALTER TABLE `xyz` CHANGE `manufacurerid` `manufacturerid` INT;

Hatırlamak :

  • INT'yi sütun veri türünüzle değiştirin (GEREKLİ)
  • Tilde / Backtick (`) isteğe bağlıdır

12
Ben sütun cevap hata almak için yabancı bir anahtar içerdiğini düşünüyorum, bu yüzden yabancı anahtar bırakmak, tablo değiştirmek ve yabancı anahtar eklemek zorunda (ilk yedekleme daha iyidir) ve u sadece sağ tıklama ile adını değiştirerek değiştirebilirsiniz masanın üzerinde - masayı değiştir
Chris Sim

7
Bu çözümde, nullabilite, varsayılan değer vb.Gibi diğer tüm sütun tanımlarını kaybettiğinizi unutmayın (bkz: stackoverflow.com/questions/8553130/… ).
Dejan

Temel olarak, MODIFY column <TYPE>(bir sütunu yeniden tanımlamak için) yerine CHANGE column new_column <TYPE>?
mwfearnley

SHOW CREATE TABLE table_namemevcut sütun tanımını anlamanıza yardımcı olabilir
Mr. Deathless

@Dejan teşekkürler ve bu gerçekten sinir bozucu, başka bir değiştirici belirleyemediğinizde neden bir tür gerekiyor? Ya tip + değiştiriciler gerektirir ya da hiç gerekmez.
JMac

43

Standart Mysql rename deyimi:

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name 
CHANGE [COLUMN] old_col_name new_col_name column_definition 
[FIRST|AFTER col_name]

bu örnek için:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype(length)

Referans: MYSQL 5.1 ALTER TABLE Sözdizimi


40

MYSQL İÇİN:

ALTER TABLE `table_name` CHANGE `old_name` `new_name` VARCHAR(255) NOT NULL;

ORACLE İÇİN:

ALTER TABLE `table_name` RENAME COLUMN `old_name` TO `new_name`;

3
"MySQL için sütun adları için kullanırsanız çalışmaz . Hiçbir şey kullanmayın veya onun yerine ``.
Alexis Hayır

13

DÜZENLE

Alanları kullanarak şunları yeniden adlandırabilirsiniz:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid INT

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html


1
# 1064 - SQL sözdiziminde bir hata var; 1. satırda '' 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
Bharanikumar

17
Bu yararlı olabilir, ancak belirttiğiniz belgeler için geçerli değildir: "CHANGE veya MODIFY kullandığınızda, column_definition veri türünü ve yeni sütuna uygulanması gereken tüm nitelikleri içermelidir [...] Özgün tanımda bulunan öznitelikler ancak yeni tanım için belirtilmez ileri değildir. "
artfulrobot

"ALTER TABLE xyz CHANGE manufacurerid manufacturerid veri türü (uzunluk)" olmalıdır
Chris Sim

7

Sözdizimi sorunu var, çünkü komutu değiştirmek için doğru sözdizimi ALTER TABLE tablename CHANGE OldColumnName NewColunmName DATATYPE;


2

MySQL 5.x ile şunları kullanabilirsiniz:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name DATATYPE NULL DEFAULT NULL;

1

MySQL'de bir sütunu yeniden adlandırma:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;

0

ALTER MASA DEĞİŞİKLİĞİ;

Misal:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;

-5

SÖZDİZİMİ

alter tablo tablo_adı adlandırma sütun eski sütun adı için yeni sütun adı ;

Misal:

alter tablo kütüphanesi yeniden adlandırma sütun maliyeti için fiyat ;


2
Mysql'de RENAME, tabloyu sütun değil yeniden adlandırmak için kullanılır; bir sütunu yeniden adlandırmak için CHANGE kullanın.
jathin

Soru MySQL içindir - bu MySQL'de geçerli bir sözdizimi değildir.
tjbp

Diğerlerinin de belirttiği gibi, lütfen geçerli MySQL sözdizimini kullanın.
fool4jesus

Geçersiz mysql sözdizimi var.
Hasib Kamal
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.