Sqlite 컬럼 순서 변경 - Sqlite keolleom sunseo byeongyeong

티스토리 뷰

Sqlite 컬럼 순서 변경 - Sqlite keolleom sunseo byeongyeong

SQLite로 뭘 하고 있다. 가볍고 다 좋은데 ALTER TABLE로 컬럼 이름을 바꾸거나 컬럼을 삭제하는 기능이 없다. 단 컬럼 추가는 된다. 그래서 컬럼을 잘못 만들면 그냥 포기하고 쓰거나 DROP TABLE로 테이블을 날린 후 다시 만들어야 한다.

파이썬에서 컬럼을 보려고하면 다음과 같은 코드를 실행시키면 된다.

import sqlite3

conn = sqlite3.connect('DATEBASE')

c = conn.cursor()

c.execute("PRAGMA table_info(TABLE)")

print (c.fetchall())

c.close()

How to reorder MySQL table columnsHow to move a column in MySQLMySQL 컬럼 순서 바꾸기MySQL 컬럼 이동, 컬럼 위치 변경

1 방법 1: 쿼리[ | ]

다른 컬럼 다음으로 이동

ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 자료형 AFTER 다른컬럼;

첫번째 위치로 이동

ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 자료형 FIRST;

2 방법 2: phpMyAdmin[ | ]

phpMyAdmin에서 UI로 가능

  • 테이블 선택 --- Structure 탭
  • 변경할 컬럼이 있는 행에서 Action 중 [Change] 클릭
  • 마지막에 있는 Move column 아래 드롭다운메뉴에서 위치 선택 후 [Save] 클릭

3 방법 3: Toad For MySQL[ | ]

Toad For MySQL에서 UI로 가능

  • Object Explorer --- Tables --- 테이블명 우클릭 --- Alter Table
  • "Alter Table - 테이블명" --- Columns --- 컬럼명 선택 후 [↑] [↓] 눌러 순서 조정 --- [OK]

4 같이 보기[ | ]

  • MySQL 컬럼 추가
  • MySQL 컬럼 삭제
  • MySQL DESCRIBE
  • MySQL ALTER TABLE

주요 콘텐츠로 건너뛰기

이 브라우저는 더 이상 지원되지 않습니다.

최신 기능, 보안 업데이트, 기술 지원을 이용하려면 Microsoft Edge로 업그레이드하세요.

테이블에서 열 순서 변경

  • 아티클
  • 09/26/2022
  • 읽는 데 3분 걸림

이 문서의 내용

적용 대상: SQL Server 2016(13.x) 이상 Azure SQL Database Azure SQL Managed Instance Analytics Platform System(PDW)

SQL Server 에서는 SQL Server Management Studio를 사용하여 테이블 디자이너에서 열 순서를 변경할 수 있습니다.

주의

테이블의 열 순서를 변경하면 특정 열 순서에 의존하는 코드나 애플리케이션에 영향을 줄 수 있습니다. 여기에는 쿼리, 뷰, 저장 프로시저, 사용자 정의 함수, 클라이언트 애플리케이션 등이 포함됩니다. 따라서 열 순서를 변경할 때는 이러한 결과를 미리 신중하게 고려해야 합니다. 가장 좋은 방법은 애플리케이션 및 쿼리 수준에서 반환된 열에서 순서를 지정하는 것입니다. SELECT *를 사용해도 테이블에 정의된 순서에 따라 모든 열이 순서대로 반환된다고 가정해서는 안됩니다. 항상 열을 표시하려는 순서에 따라 쿼리 및 애플리케이션에서 이름으로 열을 지정하세요.

항목 내용

  • 열 순서를 변경하려면

    SQL Server Management Studio

    Transact-SQL

SQL Server Management Studio 사용

열 순서를 변경하려면

  1. 개체 탐색기에서 순서를 바꾸려는 열이 있는 테이블을 오른쪽 단추로 클릭하고 디자인을 선택합니다.

  2. 순서를 바꾸려는 열 이름의 왼쪽에 있는 상자를 선택합니다.

  3. 테이블 내에 다른 위치로 열을 끌어 놓습니다.

SSMS의 중요 보안 기능으로 인해 이러한 변경을 수행하는 것이 차단될 수도 있습니다. 해당 보안 기능은 테이블 재생성을 요구하는 변경 사항 저장 방지 설정으로 관리할 수 있습니다. 이 설정은 SSMS 대화 상자로 실수로 테이블을 삭제하거나 다시 만들어 메타데이터나 권한을 중단 또는 상실하는 것을 방지하는 데 사용됩니다. 자세한 내용은 SSMS에서 변경 사항 저장이 허용되지 않음 오류 메시지를 참조하세요. 대신 권한과 메타데이터를 담당하는 Transact-SQL 단계를 통해 변경의 영향을 완전히 알고 있는 상태에서 변경을 실행하는 것이 좋습니다.

Transact-SQL 사용

열 순서를 변경하려면

Transact-SQL 문을 사용하여 이 작업을 지원하지 않습니다. 열 순서를 변경하려면 테이블을 삭제하고 다시 만들어야 합니다.

테이블 컬럼의 순서를 변경하는 방법에 대해서 각 DB에 따라 방법을 정리해보았습니다.

Oracle

oracle의 경우 12c를 기준으로 나뉩니다. 12c의 신기술을 사용해서 기존 버전보다 편하게 컬럼의 순서를 변경할 수 있게 되었기 때문입니다.

~ 11g R2 까지

기존 테이블을 Drop&Create하는 방법으로 컬럼순서를 변경할 수 있습니다.

기존 테이블을 Drop하기 때문에 관련 코멘트나 권한등이 없어집니다.(기존 테이블이 아닌 새로운 테이블이기 때문입니다). 번거로운 방법이지만 이 방법밖에 없다고 보면 될것 같습니다.

테스트

EMP의 DEPTNO와 COMM 컬럼의 순서를 변경

0.버전확인
TEST@XE> select instance_name,version from v$Instance;

INSTANCE_NAME    VERSION
---------------- -----------------
XE               11.2.0.2.0

1.변경전 확인
TEST@XE> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 19-NOV-20        800 (null)             20
      7499 ALLEN      SALESMAN        7698 19-NOV-20       1600        300         30
      7521 WARD       SALESMAN        7698 19-NOV-20       1250        500         30
      7566 JONES      MANAGER         7839 19-NOV-20       2975 (null)             20
      7654 MARTIN     SALESMAN        7698 19-NOV-20       1250       1400         30
      7698 BLAKE      MANAGER         7839 19-NOV-20       2850 (null)             30
      7782 CLARK      MANAGER         7839 19-NOV-20       2450 (null)             10
      7788 SCOTT      ANALYST         7566 19-NOV-20       3000 (null)             20
      7839 KING       PRESIDENT (null)     19-NOV-20       5000 (null)             10
      7844 TURNER     SALESMAN        7698 19-NOV-20       1500          0         30
      7876 ADAMS      CLERK           7788 19-NOV-20       1100 (null)             20
      7900 JAMES      CLERK           7698 19-NOV-20        950 (null)             30
      7902 FORD       ANALYST         7566 19-NOV-20       3000 (null)             20
      7934 MILLER     CLERK           7782 19-NOV-20       1300 (null)             10

14 rows selected.

2.백업 생성
TEST@XE> create table emp_temp as
select empno,ename,job,mgr,hiredate,sal,deptno,comm
from emp;  2    3

Table created.

3.기존 테이블 DROP
TEST@XE> drop table emp purge;

Table dropped.

4.RENAME
TEST@XE> rename emp_temp to emp;

Table renamed.

5.변경 확인
TEST@XE> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL     DEPTNO       COMM
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 19-NOV-20        800         20 (null)
      7499 ALLEN      SALESMAN        7698 19-NOV-20       1600         30        300
      7521 WARD       SALESMAN        7698 19-NOV-20       1250         30        500
      7566 JONES      MANAGER         7839 19-NOV-20       2975         20 (null)
      7654 MARTIN     SALESMAN        7698 19-NOV-20       1250         30       1400
      7698 BLAKE      MANAGER         7839 19-NOV-20       2850         30 (null)
      7782 CLARK      MANAGER         7839 19-NOV-20       2450         10 (null)
      7788 SCOTT      ANALYST         7566 19-NOV-20       3000         20 (null)
      7839 KING       PRESIDENT (null)     19-NOV-20       5000         10 (null)
      7844 TURNER     SALESMAN        7698 19-NOV-20       1500         30          0
      7876 ADAMS      CLERK           7788 19-NOV-20       1100         20 (null)
      7900 JAMES      CLERK           7698 19-NOV-20        950         30 (null)
      7902 FORD       ANALYST         7566 19-NOV-20       3000         20 (null)
      7934 MILLER     CLERK           7782 19-NOV-20       1300         10 (null)

14 rows selected.

12c R1~ 

Invisible/visible 기능을 이용하여 컬럼의 순서를 변경할 수 있습니다.

위의 테스트와 같은 결과를 보고 싶다면 아래의 명령어로 수행하면 됩니다.

--컬럼 invisible

alter table emp modify deptno invisible;
alter table emp modify comm invisible;
--변경할 컬럼부터 visible
alter table emp modify comm visible;
alter table emp modify deptno visible;

맨 끝 컬럼인 DEPARTMENR_ID가 SALARY 뒤로 이동 된것을 확인할 수 있습니다.

0.버전 확인
TEST@ysbae> select version,instance_name from v$Instance;

VERSION           INSTANCE_NAME
----------------- ----------------
12.2.0.1.0        ysbae



1. 변경전 테이블 확인
TEST@ysbae> desc emp
 Name                                                                                                                       Null?     Type
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 EMPLOYEE_ID                                                                                                         NUMBER(6)
 FIRST_NAME                                                                                                          VARCHAR2(20)
 LAST_NAME                                                                                                                  NOT NULL VARCHAR2(25)
 EMAIL                                                                                                                      NOT NULL VARCHAR2(25)
 PHONE_NUMBER                                                                                                        VARCHAR2(20)
 HIRE_DATE                                                                                                                  NOT NULL DATE
 JOB_ID                                                                                                                     NOT NULL VARCHAR2(10)
 SALARY                                                                                                              NUMBER(8,2)
 COMMISSION_PCT                                                                                                      NUMBER(2,2)
 MANAGER_ID                                                                                                          NUMBER(6)
 DEPARTMENT_ID                                                                                                       NUMBER(4)
 
 
 
 1.테이블 invisible
alter table emp modify DEPARTMENT_ID visible;
alter table emp modify COMMISSION_PCT visible;
alter table emp modify MANAGER_ID visible;


2.테이블 visible

alter table emp modify DEPARTMENT_ID visible;
alter table emp modify COMMISSION_PCT visible;
alter table emp modify MANAGER_ID visible;


3.바뀐 컬럼 순서 확인
TEST@ysbae> desc emp;
 Name                                                                                                                                                                   Null?     Type
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 EMPLOYEE_ID                                                                                                                                                     NUMBER(6)
 FIRST_NAME                                                                                                                                                      VARCHAR2(20)
 LAST_NAME                                                                                                                                                              NOT NULL VARCHAR2(25)
 EMAIL                                                                                                                                                                  NOT NULL VARCHAR2(25)
 PHONE_NUMBER                                                                                                                                                    VARCHAR2(20)
 HIRE_DATE                                                                                                                                                              NOT NULL DATE
 JOB_ID                                                                                                                                                                 NOT NULL VARCHAR2(10)
 SALARY                                                                                                                                                          NUMBER(8,2)
 DEPARTMENT_ID                                                                                                                                                   NUMBER(4)
 COMMISSION_PCT                                                                                                                                                  NUMBER(2,2)
 MANAGER_ID                                                                                                                                                      NUMBER(6)

MySQL

Mysql의 경우에는 간단한 명령어로 변경가능합니다.

alter table 테이블명 modify column 컬럼명 after 이동할 위치의 앞 컬럼;

테스트를 통해 student 테이블의 status 컬럼을 name뒤로 이동해보도록 하겠습니다.

2번에 컬럼의 특성을 알아야 하는 이유는 default값 등 기존 특성을 그대로 가져오기 위해서입니다.  특성을 빼고 컬럼 이동 시 기존과 특성이 달라질 수 있기 때문에 주의해야 합니다.

0.버전확인
mysql> show variables like 'version';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| version       | 8.0.22 |
+---------------+--------+
1 row in set (0.00 sec)


1.테이블 확인
mysql> select * from student;
+----------+-----------+--------+-------------+--------+
| _id      | name      | belong | phone       | status |
+----------+-----------+--------+-------------+--------+
| 20090101 | 루피      | IDE    | 01112345678 |      1 |
| 20100102 | 조로      | CSE    | 01123435343 |      4 |
| 20110103 | 상디      | MSE    | 01121342443 |      1 |
| 20100204 | 버기      | ESE    | 01123424343 |      2 |
| 20110106 | 프랑키    | IME    | 01134343222 |      0 |
| 20080104 | 나미      | IDE    | 01123432432 |      6 |
| 20090105 | 쵸파      | CSE    | 01112342433 |      8 |
| 20090301 | 에릭      | ESE    | 01132424244 |      5 |
| 20090302 | 전진      | IDE    | 01112321313 |      3 |
| 20100505 | 오공      | CSE    | 01123534644 |      2 |
| 20110506 | 오천      | MSE    | 01121334525 |      8 |
| 20100507 | 베지터    | ESE    | 01123423623 |      0 |
| 20110502 | 부우      | IME    | 01134332634 |      1 |
| 20080501 | 크리링    | IDE    | 01123436346 |      2 |
| 20090503 | 피콜로    | CSE    | 01113634645 |      3 |
| 20090509 | 셀        | ESE    | 01132427535 |      0 |
+----------+-----------+--------+-------------+--------+
16 rows in set (0.00 sec)

2.컬럼확인
mysql> show columns from test.student
    -> ;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| _id    | char(9)     | YES  |     | NULL    |       |
| name   | varchar(48) | NO   |     | NULL    |       |
| belong | varchar(5)  | YES  |     | NULL    |       |
| phone  | varchar(11) | YES  |     | NULL    |       |
| status | int         | YES  |     | 0       |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

3.컬럼 순서 변경
mysql> alter table test.student modify column status int default 0 after name;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

4.확인
mysql> select * from test.student;
+----------+-----------+--------+--------+-------------+
| _id      | name      | status | belong | phone       |
+----------+-----------+--------+--------+-------------+
| 20090101 | 루피      |      1 | IDE    | 01112345678 |
| 20100102 | 조로      |      4 | CSE    | 01123435343 |
| 20110103 | 상디      |      1 | MSE    | 01121342443 |
| 20100204 | 버기      |      2 | ESE    | 01123424343 |
| 20110106 | 프랑키    |      0 | IME    | 01134343222 |
| 20080104 | 나미      |      6 | IDE    | 01123432432 |
| 20090105 | 쵸파      |      8 | CSE    | 01112342433 |
| 20090301 | 에릭      |      5 | ESE    | 01132424244 |
| 20090302 | 전진      |      3 | IDE    | 01112321313 |
| 20100505 | 오공      |      2 | CSE    | 01123534644 |
| 20110506 | 오천      |      8 | MSE    | 01121334525 |
| 20100507 | 베지터    |      0 | ESE    | 01123423623 |
| 20110502 | 부우      |      1 | IME    | 01134332634 |
| 20080501 | 크리링    |      2 | IDE    | 01123436346 |
| 20090503 | 피콜로    |      3 | CSE    | 01113634645 |
| 20090509 | 셀        |      0 | ESE    | 01132427535 |
+----------+-----------+--------+--------+-------------+
16 rows in set (0.00 sec)

mysql> show columns from test.student;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| _id    | char(9)     | YES  |     | NULL    |       |
| name   | varchar(48) | NO   |     | NULL    |       |
| status | int         | YES  |     | 0       |       |
| belong | varchar(5)  | YES  |     | NULL    |       |
| phone  | varchar(11) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

Tibero

티베로의 경우에도 Oracle의 이전 버전들과 동일하게 Drop&Create 방식으로 컬럼의 순서를 변경해야 합니다.

테스트입니다.

0.버전확인
SQL> select instance_name,version from v$instance;

INSTANCE_NAME                            VERSION
---------------------------------------- --------
tibero                                   6


1.변경 전 확인
SQL> /

     EMPNO ENAME      JOB              MGR HIREDATE                                                                SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ---------------------------------------------------------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 2020/08/05                                                             1111                    20
      7499 ALLEN      SALESMAN        7698 2020/08/05                                                             1111        300         30
      7521 WARD       SALESMAN        7698 2020/08/05                                                             1111        500         30
      7566 JONES      MANAGER         7839 2020/08/05                                                             1111                    20
      7654 MARTIN     SALESMAN        7698 2020/08/05                                                             1111       1400         30
      7698 BLAKE      MANAGER         7839 2020/08/05                                                             1111                    30
      7782 CLARK      MANAGER         7839 2020/08/05                                                             1111                    10
      7788 SCOTT      ANALYST         9999 2020/08/05                                                             1111                    20
      7839 KING       PRESIDENT            2020/08/05                                                             1111                    10
      7844 TURNER     SALESMAN        7698 2020/08/05                                                             1111          0         30
      7876 ADAMS      CLERK           7788 2020/08/05                                                             1111                    20
      7900 JAMES      CLERK           7698 2020/08/05                                                             1111                    30
      7902 FORD       ANALYST         7566 2020/08/05                                                             1111                    20
      7934 MILLER     CLERK           7782 2020/08/05                                                             1111                    10
      5555                                                                                                        5555

15 rows selected.


2.백업 테이블 생성
SQL> create table emp_temp as
select empno,ename,job,mgr,hiredate,sal,deptno,comm
from emp_test;    2    3

Table 'EMP_TEMP' created.

3.기존 테이블 삭제
SQL> drop table emp_Test purge;

Table 'EMP_TEST' dropped.


4.rename
SQL> rename emp_temp to emp_Test;

Renamed.

5.변경된 테이블 확인
SQL> select * from emp_test;

     EMPNO ENAME      JOB              MGR HIREDATE                                                                SAL     DEPTNO       COMM
---------- ---------- --------- ---------- ---------------------------------------------------------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 2020/08/05                                                             1111         20
      7499 ALLEN      SALESMAN        7698 2020/08/05                                                             1111         30        300
      7521 WARD       SALESMAN        7698 2020/08/05                                                             1111         30        500
      7566 JONES      MANAGER         7839 2020/08/05                                                             1111         20
      7654 MARTIN     SALESMAN        7698 2020/08/05                                                             1111         30       1400
      7698 BLAKE      MANAGER         7839 2020/08/05                                                             1111         30
      7782 CLARK      MANAGER         7839 2020/08/05                                                             1111         10
      7788 SCOTT      ANALYST         9999 2020/08/05                                                             1111         20
      7839 KING       PRESIDENT            2020/08/05                                                             1111         10
      7844 TURNER     SALESMAN        7698 2020/08/05                                                             1111         30          0
      7876 ADAMS      CLERK           7788 2020/08/05                                                             1111         20
      7900 JAMES      CLERK           7698 2020/08/05                                                             1111         30
      7902 FORD       ANALYST         7566 2020/08/05                                                             1111         20
      7934 MILLER     CLERK           7782 2020/08/05                                                             1111         10
      5555                                                                                                        5555

15 rows selected.

MSSQL

MSSQL의 경우에는 SQL server Management Studio에서 테이블 > 우클릭 > 디자인을 클릭하여 컬럼의 순서를 변경할 수 있습니다.