현재 다음 MySQL 테이블이 있습니다. Employees (empID, empName, department);
테이블을 다음과 같이 변경하고 싶습니다. Employees (empID, department, empName);
ALTER
진술을 사용하여 어떻게 이것을 할 수 있습니까?
참고 : 열 위치 만 변경하고 싶습니다.
답변
empName이 VARCHAR (50) 열인 경우 :
ALTER TABLE Employees MODIFY COLUMN empName VARCHAR(50) AFTER department;
편집하다
의견에 따라 다음을 수행 할 수도 있습니다.
ALTER TABLE Employees CHANGE COLUMN empName empName VARCHAR(50) AFTER department;
반복 empName
은 의도적입니다. 동일한 열 이름을 유지하고 싶다고 MySQL에 알려야합니다.
두 구문 버전 모두 MySQL에만 해당된다는 점에 유의해야합니다. 예를 들어 PostgreSQL 또는 다른 많은 DBMS에서는 작동하지 않습니다.
다른 편집 : 주석에서 @Luis Rossi가 지적한 것처럼 AFTER
수정 자 직전에 변경된 열 정의를 완전히 지정해야합니다 . 위의 예제에는가 VARCHAR(50)
있지만 다른 특성 (예 : NOT NULL
기본값)이 필요한 경우 해당 특성도 포함해야합니다. 자세한 내용 은 문서를ALTER TABLE
참조하십시오 .
답변
열 위치 변경 :
ALTER TABLE Employees
CHANGE empName empName VARCHAR(50) NOT NULL AFTER department;
첫 번째 위치로 이동해야하는 경우 ALTER TABLE CHANGE [COLUMN] 쿼리 끝에 FIRST라는 용어를 사용해야합니다.
ALTER TABLE UserOrder
CHANGE order_id order_id INT(11) NOT NULL FIRST;
답변
phpMyAdmin은 테이블의 구조보기 내에서이를위한 GUI를 제공합니다. 이동할 열을 선택하고 열 목록 맨 아래에서 변경 조치를 클릭하십시오. 그런 다음 모든 열 속성을 변경할 수 있으며 화면 맨 오른쪽에 ‘열 이동’기능이 있습니다.
물론 이것은 완벽하게 최상의 답변으로 쿼리를 작성하는 것이지만 GUI 팬은 대안을 높이 평가할 수 있습니다.
내 phpMyAdmin 버전은 4.1.7입니다
답변
10+ 테이블에서 제품의 후기 단계에서 소개 된 컬럼에 대해이를 실행해야했습니다. 따라서이 빠른 어수선한 스크립트를 작성하여 모든 ‘관련’테이블에 대한 alter 명령을 생성했습니다.
SET @NeighboringColumn = '<YOUR COLUMN SHOULD COME AFTER THIS COLUMN>';
SELECT CONCAT("ALTER TABLE `",t.TABLE_NAME,"` CHANGE COLUMN `",COLUMN_NAME,"`
`",COLUMN_NAME,"` ", c.DATA_TYPE, CASE WHEN c.CHARACTER_MAXIMUM_LENGTH IS NOT
NULL THEN CONCAT("(", c.CHARACTER_MAXIMUM_LENGTH, ")") ELSE "" END ," AFTER
`",@NeighboringColumn,"`;")
FROM information_schema.COLUMNS c, information_schema.TABLES t
WHERE c.TABLE_SCHEMA = '<YOUR SCHEMA NAME>'
AND c.COLUMN_NAME = '<COLUMN TO MOVE>'
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_TYPE = 'BASE TABLE'
AND @NeighboringColumn IN (SELECT COLUMN_NAME
FROM information_schema.COLUMNS c2
WHERE c2.TABLE_NAME = t.TABLE_NAME);