IT story

필드 이름 주위에 백틱 사용

hot-time 2020. 5. 24. 11:00
반응형

필드 이름 주위에 백틱 사용


여기에 몇 가지 SQL 질문에 대한 몇 가지 답변과 의견을 읽고 내 친구가 금지하는 정책이있는 곳에서 일하고 있다는 소식을 듣고 MySQL에서 필드 이름 주위에 백틱을 사용하는 데 문제가 있는지 궁금합니다. .

그건:

SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...

백틱을 사용하면 대체 문자를 사용할 수 있습니다. 쿼리 작성에서 그러한 문제는 아니지만 백틱을 사용할 수 있다고 가정하면 다음과 같은 어리석은 것들을 피할 수 있다고 가정합니다.

SELECT `id`, `my name`, `another field` , `field,with,comma` 

물론 이름이 잘못된 테이블을 생성합니다.

간결한 경우 문제가 발생하지 않으므로 쿼리를 실행하면 참고 할 것입니다.

EXPLAIN EXTENDED Select foo,bar,baz 

다시 생성 된 경고에는 백 틱 정규화 된 테이블 이름이 있습니다. 따라서 쿼리 생성 기능을 사용하고 쿼리를 자동으로 다시 작성하는 경우 백틱으로 인해 코드 구문 분석이 덜 혼동 될 수 있습니다.

그러나 백틱을 사용할 수 있는지 여부를 위임하는 대신 이름 표준이 있어야한다고 생각합니다. 더 많은 '실제'문제를 해결합니다.


백틱의 유일한 문제는 ANSI-SQL과 호환되지 않는다는 것입니다. 예를 들어 SQL Server에서는 작동하지 않습니다.

SQL을 다른 데이터베이스로 이식해야 할 가능성이 있으면 큰 따옴표를 사용하십시오.


나에게 필드 이름을 다룰 때 항상 사용하는 것이 합리적입니다.

  • 첫째, 일단 습관에 빠지면 백틱 키를 누르는 것이 아프지 않습니다.
  • 두 번째로, 쿼리의 필드가 정확히 무엇인지, 키워드 또는 메소드가 무엇인지 쉽게 볼 수 있습니다.
  • 마지막으로, 테이블을 디자인 할 때 원하는 필드 이름을 사용할 수 있습니다. 때로는 "키", "순서"또는 "값"필드의 이름을 지정하는 것이 합리적 일 수 있습니다. 모두 참조 할 때 백틱이 필요합니다.

백틱은 표준 ANSI SQL의 일부가 아닙니다. 에서 MySQL의 설명서 :

ANSI_QUOTES SQL 모드가 사용 가능한 경우 큰 따옴표 안에 식별자를 인용 할 수도 있습니다.

따라서 백틱을 사용하고 MySQL에서 멀어지기로 결정하면 문제가 있습니다 (아마도 더 큰 문제가있을 수 있습니다)


MYSQL을 계속 사용하면 쿼리의 시각적 혼란을 제외하고는 아무 문제가 없습니다. 그러나 예약 된 키워드 또는 포함 된 공백을 테이블 및 열 이름으로 사용할 수 있습니다. 이것은 대부분의 데이터베이스 엔진에서 전혀 문제가되지 않으며 나중에 마이그레이션 할 수 없습니다.

쉽게 읽을 수 있도록 많은 사람들이 SQL 키워드에 대문자를 사용합니다 (예 :

SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;

나에게 묻는다면 항상 백틱을 사용해야합니다. 그러나 팀이 사용하지 않는 이유가 몇 가지 있습니다.

장점 :

  • 그것들을 사용하면 예약어나 금지 된 문자가 없습니다.
  • 경우에 따라 더 설명적인 오류 메시지가 나타납니다.
  • 나쁜 습관을 피하면 신경 쓰지 않지만 실제로는 SQL 삽입을 피할 수있는 좋은 방법입니다.

단점 :

  • 그것들은 표준이 아니며 보통 휴대용이 아닙니다. 그러나 식별자의 일부로 백틱을 사용하지 않는 한 (내가 상상할 수있는 최악의 방법 임) 자동으로 백틱을 제거하여 쿼리를 이식 ​​할 수 있습니다.
  • 일부 쿼리가 Access에서 온 경우 "로 테이블 이름을 인용 할 수 있습니다 ("맹목적으로 모든 "을 제거 할 수는 없습니다). 그러나 백틱과 큰 따옴표의 혼합은 허용됩니다.
  • 일부 어리석은 소프트웨어 또는 함수는 쿼리를 필터링하며 백틱에 문제가 있습니다. 그러나 이들은 ASCII의 일부이므로 소프트웨어 / 기능이 매우 나쁘다는 것을 의미합니다.

내가 아는 한, 백틱을 사용하는 전체 목적은 예약 키워드와 일치하는 이름을 사용할 수 있도록하는 것입니다. 따라서 이름이 예약 키워드와 충돌하지 않으면 백틱을 사용해야 할 이유가 없습니다. 그러나, 그것들을 금지 할 이유는 없습니다.


백틱에서 무언가를 찾기 위해 코드베이스를 검색하는 것이 훨씬 쉽습니다. 라는 테이블이 있다고 가정 해보십시오 event. grep -r "event" *수백 개의 결과를 반환 할 수 있습니다. grep -r "\`event\`" *아마도 데이터베이스를 참조하는 모든 것을 반환합니다.


backtick에 대한 간단한 것 `` 은 database_name, table_name 등과 같은 식별자를 표시하는 데 사용하고 작은 따옴표 '' , 문자열 리터럴에는 큰 따옴표 "" 를 사용하는 반면 ""는 인쇄 값을 그대로 사용하고 ''값 변수 hold 또는 다른 경우에는 자신의 텍스트를 인쇄하십시오.

i.e 1.-> use `model`;   
    here `model` is database name not conflict with reserve keyword 'model'
2- $age = 27;
insert into `tbl_people`(`name`,`age`,`address`) values ('Ashoka','$age',"Delhi");

here i used both quote for all type of requirement. If anything not clear let me know..

일부 필드 이름을 기본 mysql 또는 mssql 값으로 사용하는 경우 (예 : "status") 백틱 ( "select statusfrom table_name"또는 "select id from table_name where status= 1") 을 사용해야 합니다. mysql은 오류를 반환하거나 쿼리를 작동하지 않기 때문입니다.


The main use of backticks (`) in SQL is to use them in situations where you are going to call them again in upcoming clauses. In every other time it is recommended to use double quotes("").

For example

SELECT CONCAT(Name, ' in ', city, ', ', statecode) AS `Publisher and Location`,
    COUNT(ISBN) AS "# Books",
    MAX(LENGTH(title)) AS "Longest Title",
    MIN(LENGTH(title)) AS "Shortest Title"
FROM Publisher JOIN Book
ON Publisher.PublisherID = Book.PublisherID WHERE INSTR(name, 'read')>0
GROUP BY `Publisher and Location`
HAVING COUNT(ISBN) > 1;

In the above statement do you see how Publisher and Location is used again in GROUP BY clause.

Instead of using

GROUP BY Name, city, statecode

I just used

GROUP BY Publisher and Location

Only when such situations arise, it is useful to use backticks. In all other times using double quotes is recommended.

참고URL : https://stackoverflow.com/questions/261455/using-backticks-around-field-names

반응형