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)

5
Anda mencoba mengubah tabel yang memiliki referensi kunci asing di dalamnya.
mellowsoon

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

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


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`;

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


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;


2

Dengan MySQL 5.x Anda dapat menggunakan:

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

1

Mengganti nama kolom di MySQL:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;

0

ALTER TABLE CHANGE;

Contoh:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;

-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 ;


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.