Menambahkan beberapa kolom SETELAH kolom tertentu di MySQL


361

Saya perlu menambahkan beberapa kolom ke tabel tetapi posisikan kolom setelah kolom disebut lastname.

Saya sudah mencoba ini:

ALTER TABLE `users` ADD COLUMN
(
    `count` smallint(6) NOT NULL,
    `log` varchar(12) NOT NULL,
    `status` int(10) unsigned NOT NULL
) 
AFTER `lastname`;

Saya mendapatkan kesalahan ini:

Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan dekat ') SETELAH lastname' pada baris 7


Bagaimana saya bisa menggunakan SETELAH dalam kueri seperti ini?


5
Kamu berbicara dialek apa? Sepertinya mysql bagi saya. Tetapi ALTER TABLEsintaksnya sedikit berbeda antar dialek.
Damien_The_Unbeliever


1
Saya pikir Anda memerlukan kata kunci SETELAH pada setiap kolom yang Anda tambahkan. Apakah itu berarti Anda memerlukan semua 3 menjadi SETELAH nama belakang atau pernyataan ALTER TABLE terpisah per kolom baru, saya tidak bisa mengatakan dengan pasti.
Zec

Jawaban:


728

Coba ini

ALTER TABLE users
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

periksa sintaks


6
[ Sebagai informasi tambahan ] Beberapa ADD, ALTER, DROP, dan CHANGEklausa diizinkan dalam satu ALTER TABLEpernyataan, dipisahkan dengan koma. Ini adalah ekstensi MySQL ke SQL standar, yang hanya mengizinkan satu dari setiap klausa per pernyataan ALTER TABLE.
informatik01

@ Ayyappan Bisakah kita melakukan ini di server sql?
Roshan

77

Jika Anda ingin menambahkan satu kolom setelah bidang tertentu, maka kueri MySQL berikut ini akan berfungsi:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL
    AFTER lastname

Jika Anda ingin menambahkan beberapa kolom, maka Anda harus menggunakan perintah 'ADD' setiap kali untuk sebuah kolom. Inilah permintaan MySQL untuk ini:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL,
    ADD COLUMN log VARCHAR(12) NOT NULL,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL
    AFTER lastname

Tunjuk ke catatan

Dalam metode kedua, ADD COLUMN kolom terakhir seharusnya menjadi kolom pertama yang ingin Anda tambahkan ke tabel.

Misalnya: jika Anda ingin menambahkan count, log, statusdalam urutan yang tepat setelah lastname, maka sintaks akan benar-benar menjadi:

ALTER TABLE users
    ADD COLUMN log VARCHAR(12) NOT NULL AFTER lastname,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL AFTER lastname,
    ADD COLUMN count SMALLINT(6) NOT NULL AFTER lastname

3
Versi kedua bekerja dengan sangat baik untuk saya. Saya menggunakan MySql 5.5.25.
Norman

tidak sedikit terakhir kode menambahkan kolom dalam urutan count, log, statusatau count, status, log?
Sarfaraaz

1
Catatan: jika Anda tidak menambahkan bit 'SETELAH nama belakang', maka pemesanan di mana kolom terakhir yang Anda masukkan dalam daftar perubahan tabel yang didahulukan tidak benar-benar berlaku. Jadi saat Anda melakukan ALTER TABLE table ADD COLUMN blah1, ADD COLUMN blah2; (tidak ada klausa 'SETELAH'), kolom blah1 akan ditambahkan pertama, kemudian blah2.
Hongyi Li

10

Anda tidak bisa menyebut beberapa nama kolom dengan koma ADD COLUMN. Anda perlu menyebutkan ADD COLUMNsetiap kali Anda menentukan kolom baru.


4
Saya memberi +1 tetapi ini harus menjadi komentar untuk jawaban yang diterima
mjsarfatti

9

Yang ini benar:

ALTER TABLE `users`
    ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
    ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
    ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

3
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

Anda dapat melakukannya dengan ini, bekerja dengan baik untuk saya.


1

Satu kemungkinan adalah untuk tidak repot menyusun ulang kolom dalam tabel dan cukup memodifikasinya dengan menambahkan kolom. Lalu, buat tampilan yang memiliki kolom dalam urutan yang Anda inginkan - dengan asumsi bahwa urutannya benar-benar penting. Tampilan dapat dengan mudah diubah untuk mencerminkan pemesanan apa pun yang Anda inginkan. Karena saya tidak dapat membayangkan bahwa urutan akan penting untuk aplikasi terprogram, tampilan harus cukup untuk pertanyaan manual yang mungkin penting.


4
jika saya dapat menambahkan dua sen, "penempatan" apakah kolom tabel atau baris, harus tidak penting. Spreadsheet menggunakan lokasi untuk menemukan sesuatu, database tidak.
Mike S.

1

ALTER TABLE listingADD countINT (5), ADD logVARCHAR (200), ADD statusVARCHAR (20) SETELAH stat

Ini akan memberikan hasil yang bagus.


0

Ini berfungsi baik untuk saya:

ALTER TABLE 'users'
ADD COLUMN 'count' SMALLINT(6) NOT NULL AFTER 'lastname',
ADD COLUMN 'log' VARCHAR(12) NOT NULL AFTER 'count',
ADD COLUMN 'status' INT(10) UNSIGNED NOT NULL AFTER 'log';

Mencuri komentar untuk mendapat suara. Jangan lakukan itu jodoh.
MBouwman

0

Solusi yang bekerja untuk saya dengan nilai default 0 adalah sebagai berikut

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0

0

Kalau tidak:

ALTER TABLE users
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `lastname`,
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`;

Akan menempatkan mereka dalam urutan yang Anda inginkan saat merampingkan pernyataan SETELAH.

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.