MySQL에서 쿼리를 작성할 때 테이블 이름이나 컬럼 이름 주위에 따옴표를 항상 붙여야 할까요? 결론부터 말하면 항상 필요한 것은 아니지만, 예약어(reserved word)를 사용하는 경우에는 반드시 필요합니다.
백틱(`)이 필요한 이유
테이블 이름이나 컬럼 이름이 MySQL의 예약어와 겹친다면, 해당 이름을 백틱(backtick, `)으로 감싸주어야 합니다. 그렇지 않으면 MySQL이 이를 SQL 문법으로 해석하여 오류가 발생합니다.
기본 문법은 다음과 같습니다.
SELECT * FROM `table` WHERE `where` = 조건;
예약어 사용 시 발생하는 오류
예약어인 'table'과 'where'를 따옴표 없이 그대로 사용해 테이블을 생성하려고 하면 어떻게 될까요? 아래처럼 문법 오류가 발생합니다.
mysql> create table table
-> (
-> where int
-> );
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table
(
where int
)' at line 1
'table'과 'where'는 MySQL에서 미리 정의된 예약어이기 때문에, 서버가 이를 일반적인 식별자로 인식하지 못하고 구문 분석 단계에서 실패하게 됩니다.
백틱으로 감싸면 정상적으로 동작
이번에는 테이블 이름과 컬럼 이름을 백틱으로 감싸서 다시 생성해 보겠습니다.
mysql> create table `table`
-> (
-> `where` int
-> );
Query OK, 0 rows affected (0.55 sec)
이번에는 오류 없이 테이블이 성공적으로 생성됩니다.
데이터 삽입하기
INSERT 명령을 사용해 테이블에 레코드를 추가합니다.
mysql> insert into `table`(`where`) values(1); Query OK, 1 row affected (0.13 sec) mysql> insert into `table`(`where`) values(100); Query OK, 1 row affected (0.26 sec) mysql> insert into `table`(`where`) values(1000); Query OK, 1 row affected (0.13 sec)
WHERE 조건으로 특정 레코드 조회하기
WHERE 조건을 활용해 특정 레코드만 조회할 수 있습니다.
mysql> select *from `table` where `where`=100;
실행 결과는 다음과 같습니다.
+-------+ | where | +-------+ | 100 | +-------+ 1 row in set (0.00 sec)
정리
- 테이블·컬럼 이름이 예약어가 아니라면 백틱은 선택 사항입니다.
- 예약어와 겹치는 이름이라면 반드시 백틱(`)으로 감싸야 합니다.
- 가독성과 안정성을 위해 모든 식별자에 백틱을 붙이는 코딩 스타일도 널리 사용됩니다.
- 단, 문자열 값에는 작은따옴표(' ')를 사용하고, 식별자에는 백틱(` `)을 사용한다는 점을 혼동하지 않도록 주의하세요.