Galat saat mengganti nama kolom di MySQL

434

Bagaimana cara saya mengganti nama kolom dalam tabel xyz? Kolomnya adalah:

Manufacurerid, name, status, AI, PK, int

Saya ingin mengganti nama menjadi manufacturerid

Saya mencoba menggunakan panel PHPMyAdmin, tetapi saya mendapatkan kesalahan ini:

MySQL said: Documentation
#1025 - Error on rename of '.\shopping\#sql-c98_26' to '.\shopping\tblmanufacturer' (errno: 150)
Bharanikumar
sumber
5
Anda mencoba mengubah tabel yang memiliki referensi kunci asing di dalamnya.
mellowsoon
2
kemungkinan duplikat Mengganti nama kolom kunci asing di MySQL
OMG Ponies

Jawaban:

747

Lone Ranger sangat dekat ... pada kenyataannya, Anda juga perlu menentukan tipe data dari kolom yang diubah namanya. Sebagai contoh:

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

Ingat:

  • Ganti INT dengan apa pun tipe data kolom Anda (DIPERLUKAN)
  • Tilde / Backtick (`) adalah opsional
Matt Diamond
sumber
12
Saya pikir kolom berisi kunci asing untuk mendapatkan kesalahan dari jawaban sehingga Anda harus Jatuhkan kunci asing, ubah tabel, dan tambahkan kunci asing (lebih baik untuk membuat cadangan terlebih dahulu) dan Anda dapat mengubahnya dengan hanya mengubah nama di klik kanan di atas meja - ubah tabel
Chris Sim
7
Ingatlah bahwa dalam solusi ini Anda kehilangan semua definisi kolom lainnya seperti nullability, nilai default, dll. (Lihat: stackoverflow.com/questions/8553130/… ).
Dejan
Jadi pada dasarnya, alih-alih MODIFY column <TYPE>(untuk mendefinisikan ulang kolom), bukan CHANGE column new_column <TYPE>?
mwfearnley
SHOW CREATE TABLE table_namedapat membantu Anda mengetahui definisi kolom saat ini
Tn. Deathless
@Jejan terima kasih dan ini benar-benar menjengkelkan, mengapa harus mengetik ketika Anda tidak dapat menentukan pengubah lainnya? Anda memerlukan pengubah tipe + atau tidak memerlukannya sama sekali.
JMac
43

Pernyataan ganti nama standar Mysql adalah:

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

untuk contoh ini:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype(length)

Referensi: Sintaks MYSQL 5.1 ALTER TABLE

dongpf
sumber
40

UNTUK MYSQL:

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

UNTUK ORACLE:

ALTER TABLE `table_name` RENAME COLUMN `old_name` TO `new_name`;
mahbub_siddique
sumber
3
Tidak berfungsi jika Anda menggunakan "nama kolom untuk MySQL. Jangan gunakan apa pun atau `sebagai gantinya.
Alexis No
13

EDIT

Anda dapat mengubah nama bidang menggunakan:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid INT

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

Lone Ranger
sumber
1
# 1064 - Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat '' pada baris 1
Bharanikumar
17
Ini akan berguna, tetapi itu tidak benar untuk dokumentasi yang Anda kutip: "Ketika Anda menggunakan CHANGE atau MODIFY, column_definition harus menyertakan tipe data dan semua atribut yang harus diterapkan ke kolom baru [...] Atribut hadir dalam definisi asli tetapi tidak ditentukan untuk definisi baru tidak diteruskan. "
artfulrobot
itu harus "ALTER TABLE xyz CHANGE manufacurerid manufacturerid tipe data (panjang)"
Chris Sim
7

Ada masalah sintaksis, karena sintaks yang tepat untuk mengubah perintah adalah ALTER TABLE tablename CHANGE OldColumnName NewColunmName DATATYPE;

Darshan
sumber
2

Dengan MySQL 5.x Anda dapat menggunakan:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name DATATYPE NULL DEFAULT NULL;
MIKE KIM
sumber
1

Mengganti nama kolom di MySQL:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;
Hasib Kamal
sumber
0

ALTER TABLE CHANGE;

Contoh:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;
vaquar khan
sumber
-5

SINTAKSIS

ubah table table_name ganti nama kolom nama kolom lama menjadi nama kolom baru ;

Contoh:

mengubah pustaka tabel, ganti nama biaya kolom menjadi harga ;

Abinaya
sumber
2
Dalam mysql RENAME digunakan untuk mengubah nama tabel bukan kolom, untuk mengganti nama kolom gunakan CHANGE.
jathin
Pertanyaannya untuk MySQL - ini bukan sintaks yang valid di MySQL.
tjbp
Sebagai catatan lain, silakan gunakan sintaks MySQL yang valid.
fool4jesus
Ada sintaks mysql yang tidak valid.
Hasib Kamal