MySQL'de belirli bir sütundan SONRA birden çok sütun ekleme


362

Bir tabloya birden çok sütun eklemek gerekir ama sütun denilen bir sütundan sonra konumlandırın lastname.

Bunu denedim:

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

Bu hatayı alıyorum:

SQL sözdiziminizde bir hata var; lastname7. satırda ') AFTER ' 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


AFTER'i böyle bir sorguda nasıl kullanabilirim?


5
Hangi lehçeyi konuşuyorsun? Bana mysql gibi görünüyor. Ancak ALTER TABLEsözdizimi lehçeler arasında biraz değişir.
Damien_The_Unbeliever


1
Eklediğiniz sütunların her birinde AFTER anahtar kelimesine ihtiyacınız olduğunu düşünüyorum. Bu, soyadının SONRA olması veya yeni bir sütun başına ayrı bir ALTER TABLE ifadesi olması gerektiği anlamına gelirse, kesin olarak söyleyemem.
Zec

Yanıtlar:


729

Bunu dene

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

sözdizimini kontrol et


6
[ Ek bir bilgi olarak birden fazla] ADD, ALTER, DROPve CHANGEmaddeleri tek izin verilen ALTER TABLEaçıklamada, virgül ile ayrılmış. Bu, standart SQL için bir MySQL uzantısıdır ve ALTER TABLE ifadesi başına her bir maddeden yalnızca birine izin verir.
informatik01

@Ayyappan Bunu sql sunucusunda yapabilir miyiz?
Roshan

77

Belirli bir alandan sonra tek bir sütun eklemek isterseniz, aşağıdaki MySQL sorgusu çalışmalıdır:

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

Birden çok sütun eklemek istiyorsanız, bir sütun için her seferinde 'EKLE' komutunu kullanmanız gerekir. Bunun için MySQL sorgusu:

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

Dikkat edilecek nokta

İkinci yöntemde, son ADD COLUMN sütun aslında tabloya eklemek istediğiniz ilk sütun olmalıdır.

Ör: Eklemek istediğiniz takdirde count, log, statussonra doğru sırayla lastname, sonra sözdizimi aslında olacaktır:

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
İkinci versiyon benim için mükemmel çalıştı. MySql 5.5.25 kullanıyorum.
Norman

kodunun son bit sırayla sütunları eklemek gelmez count, log, statusveya count, status, log?
Sarfaraaz

1
not: 'AFTER soyadı' bitini eklemezseniz, bu değişiklik tablosu listesine koyduğunuz son sütunun ilk sıralaması gerçekten geçerli olmaz. Bu nedenle, ALTER TABLE tablosunu SÜTUN KOLONU EKLE blah1, SÜTUN KOLU EKLE blah2; ('SONRAKİ' maddesine dikkat edin), önce blah1 sütununa sonra blah2 sütununa eklenecektir.
Hongyi Li

10

Virgül kullanarak birden çok sütun adından bahsedemezsiniz ADD COLUMN. ADD COLUMNHer yeni sütun tanımladığınızda belirtmeniz gerekir .


4
Bir +1 verdim ama bu kabul edilen cevaba bir yorum olmalı
mjsarfatti

9

Bu doğru:

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

Bunu benim için iyi çalışarak yapabilirsin.


1

Bir olasılık, tablodaki sütunları yeniden sıralamak ve sütunları ekleyerek değiştirmek değildir. Ardından, siparişin gerçekten önemli olduğunu varsayarak, sütunları istediğiniz sırada içeren bir görünüm oluşturun. Görünüm, istediğiniz sıralamayı yansıtacak şekilde kolayca değiştirilebilir. Siparişin programlı uygulamalar için önemli olacağını hayal edemediğim için, görüşün önemli olabileceği manuel sorgular için yeterli olması gerekir.


4
benim iki sent ekleyebilir, tablo sütunları veya satırları olsun "yerleşim" önemsiz olmalıdır. E-tablolar bir şeyleri bulmak için konum kullanır, veritabanları kullanmaz.
Mike S.

1

Alter TABLO listingADD countINT (5), ADD logADD VARCHAR (200) status, stat SONRA VARCHAR (20)

İyi sonuçlar verecektir.


0

Bu benim için iyi çalışıyor:

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

Oy almak için bir yorum çalmak. O arkadaşı yapma.
MBouwman

0

Benim için varsayılan değer 0 ile çalışan çözüm aşağıdaki

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0

0

Alternatif:

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

AFTER deyimini düzene sokarken bunları istediğiniz sırada koyacaktır.

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.