MySQL에서 특정 열 이후에 여러 열 추가


361

나는 열을 테이블에 여러 열을 추가하지만 위치 할 필요가 라고하는 열 lastname.

나는 이것을 시도했다 :

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

이 오류가 발생합니다.

SQL 구문에 오류가 있습니다. lastname7 번째 줄에서 ') AFTER ' 근처에서 사용할 올바른 구문은 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오.


이와 같은 쿼리에서 AFTER를 어떻게 사용합니까?


5
무슨 방언을 말하는거야? 나에게 mysql처럼 보인다. 그러나 ALTER TABLE구문은 방언마다 약간 다릅니다.
Damien_The_Unbeliever


1
추가하려는 각 열에 AFTER 키워드가 필요하다고 생각합니다. 즉, 3을 모두 AFTER 성 또는 새 열마다 별도의 ALTER TABLE 문으로 사용 해야하는지 여부는 확실하지 않습니다.
Zec

답변:


728

이 시도

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

구문을 확인하십시오


6
[ 추가 정보로서 다중]가 ADD, ALTER, DROP, 및 CHANGE절 단일 허용되는 ALTER TABLE문 콤마로 분리된다. 이것은 표준 SQL에 대한 MySQL 확장 이며, ALTER TABLE 문당 각 절 중 하나만 허용합니다.
informatik01

@Ayyappan 우리는 SQL Server에서 이것을 할 수 있습니까?
로샨

77

특정 필드 뒤에 단일 열을 추가하려면 다음 MySQL 쿼리가 작동해야합니다.

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

여러 열을 추가하려면 열마다 'ADD'명령을 사용해야합니다. 이에 대한 MySQL 쿼리는 다음과 같습니다.

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

참고 사항

두 번째 방법에서 마지막 ADD COLUMN 은 실제로 테이블에 추가하려는 첫 번째 열이어야합니다.

예 : 추가 할 경우 count, log, status후 정확한 순서에 lastname, 다음 구문이 실제로 될 것이다 :

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
두 번째 버전은 완벽하게 잘 작동했습니다. MySql 5.5.25를 사용하고 있습니다.
Norman

코드의 마지막 비트는 순서대로 열을 추가 않는 count, log, status또는 count, status, log?
Sarfaraaz

1
참고 : 'AFTER lastname'비트를 추가하지 않으면 해당 alter table list에 마지막으로 놓인 열 순서가 실제로 적용되지 않습니다. 따라서 ALTER TABLE 테이블 ADD COLUMN blah1을 수행하면 ADD COLUMN blah2; ( 'AFTER'절 없음), blah1 열이 먼저 추가 된 다음 blah2가 추가됩니다.
Hongyi Li

10

을 사용하여 쉼표로 여러 열 이름을 언급 할 수 없습니다 ADD COLUMN. ADD COLUMN새 열을 정의 할 때마다 언급해야합니다 .


4
나는 일을하는 듯했으나이 허용 대답에 설명해야한다
mjsarfatti는

9

이것은 맞습니다 :

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

이 작업을 수행하면 나에게 잘 작동합니다.


1

한 가지 가능성은 테이블의 열 순서를 바꾸지 않고 열을 추가하여 간단히 수정하는 것입니다. 그런 다음 순서가 정말로 중요하다고 가정하고 원하는 순서대로 열이있는보기를 작성하십시오. 원하는 순서대로보기를 쉽게 변경할 수 있습니다. 프로그래밍 방식의 응용 프로그램에서는 순서가 중요하다고 생각할 수 없으므로 중요한 수동 쿼리에는보기가 충분해야합니다.


4
두 개의 센트를 추가 할 수 있다면 테이블 열 또는 행과 상관없이 "배치"가 중요하지 않아야합니다. 스프레드 시트는 위치를 사용하여 물건을 찾고 데이터베이스는 찾지 않습니다.
Mike S.

1

ALTER TABLE listingADD countINT (5), ADD logVARCHAR (200), ADD statusVARCHAR (20) 후 통계 추가

좋은 결과를 줄 것입니다.


0

이것은 나를 위해 잘 작동합니다 :

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

의견을 훔쳐 투표를합니다. 그 친구를하지 마십시오.
MBouwman

0

기본값 0으로 저에게 효과적 인 해결책은 다음과 같습니다.

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0

0

또는

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 문을 간소화하면서 원하는 순서대로 배치합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.