식별자¶
식별자 작성 원칙¶
테이블 이름, 인덱스 이름, 뷰 이름, 칼럼 이름, 사용자 이름 등이 식별자에 해당한다. 식별자는 다음의 원칙에 따라 작성해야 한다.
반드시 문자로 시작되어야 한다. 즉, 숫자나 기호로 시작할 수 없다.
대소문자를 구별하지 않는다.
예약어는 허용되지 않는다.
identifier ::= identifier_letter [ { other_identifier }; ] identifier_letter ::= upper_case_letter | lower_case_letter other_identifier ::= identifier_letter | digit | _ | # digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 upper_case_letter ::= A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P| Q | R | S | T | U | V | W | X | Y | Z lower_case_letter ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p| q | r | s | t | u | v | w | x | y | z
허용되는 식별자¶
문자로 시작되는 식별자
식별자의 첫 글자에는 반드시 문자를 사용해야 하며, 연산자로 사용되는 특수 문자를 제외한 나머지 특수 문자를 포함할 수 있다. 다음은 허용되는 식별자의 예제이다.
a
a_b
ssn#
this_is_an_example_#
큰따옴표, 대괄호, 백틱 부호로 둘러싸인 식별자
허용되지 않는 식별자 또는 예약어에 해당하더라도, 큰따옴표(” “)나 대괄호([ ]) 또는 백틱 부호(` `)로 식별자를 둘러싸면 예외적으로 허용된다. 큰따옴표는 질의 관련 파라미터인 ansi_quotes가 yes일 때에만 식별자를 감싸는 부호로 사용할 수 있고, 이 값이 no이면 문자열을 감싸는 부호로 사용한다. ansi_quotes의 기본값은 yes이다. 다음은 허용되는 식별자의 예제이다.
"select"
"@lowcost"
"low cost"
"abc""def"
[position]
Note
10.0 버전부터는 예약어로 된 칼럼 이름이 “테이블 이름 (또는 별칭).”과 같이 사용되는 경우, 칼럼 이름을 겹따옴표로 감싸지 않아도 된다.
CREATE TABLE tbl ("int" int, "double" double);
SELECT t.int FROM tbl t;
위의 SELECT 질의문에서 “int”가 “t.”과 함께 쓰인 칼럼 이름이다.
허용되지 않는 식별자¶
특수 문자나 숫자로 시작되는 식별자
다음과 같이 언더바(_), #을 제외한 특수 문자, 숫자로 시작되는 식별자는 허용되지 않는다.
_a
#ack
%nums
2fer
88abs
공백을 포함하는 식별자
다음과 같이 중간에 공백을 포함하는 식별자는 허용되지 않는다.
col1 t1
연산자로 사용하는 특수 문자를 포함하는 식별자
다음과 같이 연산자로 사용되는 특수 문자(+, -, *, /, %, ||, !, <, >, =, |, ^, &, ~)를 포함하는 식별자는 허용되지 않는다.
col+
col~
col&&
식별자 이름의 최대 길이¶
다음은 각 식별자 이름으로 허용되는 최대 바이트 길이를 정리한 표이다. 단위는 바이트 길이이며, 사용하는 문자셋에 따라 문자 수와 바이트 길이는 다를 수 있음에 주의한다. (예를 들어, UTF-8 문자셋에서 한글 한 글자는 3바이트의 바이트 길이이다.)
식별자 |
최대 바이트 길이 |
---|---|
Database |
17 |
Table |
254 |
Column |
254 |
Index |
254 |
Constraint |
254 |
Java Stored Procedure |
254 |
Trigger |
254 |
View |
254 |
Serial |
254 |
Note
기본 키(pk_<table_name>_<column_name>), 외래 키(fk_<table_name>_<column_name>)의 이름 등 자동으로 생성되는 제약조건(constraint) 이름도 식별자의 최대 길이인 254바이트를 넘을 수 없다.