-
SQL - ' ' / " " / ` `SQL 정리 2024. 4. 18. 22:02
신비로운 꺽쇠의 세계
" " : select 문에서 " "을 사용한다는 것은
"ABC" 라고 작성되어있다고 가정한다면 column 명이 ABC
그리고 그 하단 열의 row가 모두 'ABC'의 값을 가지게 된다 ?
' ' : 명사 지정? 호출
value() 의 리스트와 같이 문자열 값을 나타내는 데에 사용되며 큰따옴표도 가능하긴하다.
`` backtick / grave accent :
백틱은 테이블 이름과 열 이름을 식별할 때 사용되는데, 주로 MySQL의 예약어나 공백 문자, 제한된 문자가 포함된 경우에 필요합니다. 일반적으로 MySQL에서는 백틱을 사용하여 테이블 이름이나 열 이름을 감싸지 않아도 되지만, 위 조건을 충족하지 않는 경우에는 백틱으로 감싸야 합니다.
더보기757Backticks are to be used for table and column identifiers, but are only necessary when the identifier is a MySQL reserved keyword, or when the identifier contains whitespace characters or characters beyond a limited set (see below) It is often recommended to avoid using reserved keywords as column or table identifiers when possible, avoiding the quoting issue.
Single quotes should be used for string values like in the VALUES() list. Double quotes are supported by MySQL for string values as well, but single quotes are more widely accepted by other RDBMS, so it is a good habit to use single quotes instead of double.
MySQL also expects DATE and DATETIME literal values to be single-quoted as strings like '2001-01-01 00:00:00'. Consult the Date and Time Literals documentation for more details, in particular alternatives to using the hyphen - as a segment delimiter in date strings.
So using your example, I would double-quote the PHP string and use single quotes on the values 'val1', 'val2'. NULL is a MySQL keyword, and a special (non)-value, and is therefore unquoted.
None of these table or column identifiers are reserved words or make use of characters requiring quoting, but I've quoted them anyway with backticks (more on this later...).
Functions native to the RDBMS (for example, NOW() in MySQL) should not be quoted, although their arguments are subject to the same string or identifier quoting rules already mentioned.
Backtick (`) table & column ───────┬─────┬──┬──┬──┬────┬──┬────┬──┬────┬──┬───────┐ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ $query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`, `updated`) VALUES (NULL, 'val1', 'val2', '2001-01-01', NOW())"; ↑↑↑↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑↑↑↑ Unquoted keyword ─────┴┴┴┘ │ │ │ │ │ │ │││││ Single-quoted (') strings ───────────┴────┴──┴────┘ │ │ │││││ Single-quoted (') DATE ───────────────────────────┴──────────┘ │││││ Unquoted function ─────────────────────────────────────────┴┴┴┴┘
Variable interpolation
The quoting patterns for variables do not change, although if you intend to interpolate the variables directly in a string, it must be double-quoted in PHP. Just make sure that you have properly escaped the variables for use in SQL. (It is recommended to use an API supporting prepared statements instead, as protection against SQL injection).
// Same thing with some variable replacements // Here, a variable table name $table is backtick-quoted, and variables // in the VALUES list are single-quoted $query = "INSERT INTO `$table` (`id`, `col1`, `col2`, `date`) VALUES (NULL, '$val1', '$val2', '$date')";
Prepared statements
When working with prepared statements, consult the documentation to determine whether or not the statement's placeholders must be quoted. The most popular APIs available in PHP, PDO and MySQLi, expect unquoted placeholders, as do most prepared statement APIs in other languages:
// PDO example with named parameters, unquoted $query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (:id, :col1, :col2, :date)"; // MySQLi example with ? parameters, unquoted $query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (?, ?, ?, ?)";
Characters requring backtick quoting in identifiers:
According to MySQL documentation, you do not need to quote (backtick) identifiers using the following character set:
ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore)
You can use characters beyond that set as table or column identifiers, including whitespace for example, but then you must quote (backtick) them.
Also, although numbers are valid characters for identifiers, identifiers cannot consist solely of numbers. If they do they must be wrapped in backticks.
이 글은 MySQL에서의 백틱(``) 사용에 관한 설명으로 보입니다. 백틱은 테이블 이름과 열 이름을 식별할 때 사용되는데, 주로 MySQL의 예약어나 공백 문자, 제한된 문자가 포함된 경우에 필요합니다. 일반적으로 MySQL에서는 백틱을 사용하여 테이블 이름이나 열 이름을 감싸지 않아도 되지만, 위 조건을 충족하지 않는 경우에는 백틱으로 감싸야 합니다.
작은따옴표('')는 VALUES() 리스트와 같이 문자열 값을 나타내는 데 사용되며, 큰따옴표("")도 문자열 값을 나타내는 데 사용될 수 있습니다. 그러나 일반적으로 문자열 값을 표시할 때는 작은따옴표('')를 사용하는 것이 더 널리 받아들여지므로, 큰따옴표("") 대신 작은따옴표('')를 사용하는 것이 좋습니다.
또한, MySQL은 DATE와 DATETIME 리터럴 값을 문자열로 표시할 때 단일 따옴표('')로 감싸야 합니다. 숫자와 문자열 값은 각각 따로 처리되며, NULL은 MySQL의 특별한 예약어이므로 따옴표로 감싸지 않습니다.
변수를 SQL에 삽입할 때는 변수를 적절히 이스케이프하고, SQL 삽입 공격을 방지하기 위해 준비된 문장(prepared statement)을 사용하는 것이 좋습니다.
마지막으로, 테이블 이름이나 열 이름에 사용할 수 있는 문자는 ASCII 범위의 문자(기본 라틴 문자, 숫자 0-9, 달러 기호, 밑줄)입니다. 그 외의 문자를 사용하려면 백틱으로 감싸야 합니다. 또한, 숫자만으로 구성된 식별자는 백틱으로 감싸야 합니다.
SQL에서 backtick, single quotes, double quotes의 차이 : 네이버 블로그 (naver.com)
'SQL 정리' 카테고리의 다른 글
SQL - UNION (0) 2024.04.23 SQL - group by 연산자 (0) 2024.04.22 SQL - With - CTE (0) 2024.04.18 SQL - field vs column (0) 2024.04.09 SQL - datediff, 대소비교 (0) 2024.04.05