IT

필드 이름 주위에 백틱 사용

itgroup 2022. 11. 7. 21:27
반응형

필드 이름 주위에 백틱 사용

여기서 몇 가지 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을 다른 데이터베이스로 이식해야 할 경우 큰따옴표를 사용하십시오.

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

  • 첫째, 일단 습관이 되면, 그냥 뒤로 똑딱이를 눌러도 나쁠 건 없다.
  • 둘째, 쿼리의 필드가 정확히 무엇인지, 키워드 또는 메서드가 무엇인지 쉽게 확인할 수 있습니다.
  • 마지막으로 테이블을 설계할 때 원하는 필드 이름을 사용할 수 있습니다.필드에 "key", "order" 또는 "values"라는 이름을 붙이는 것이 타당할 수 있습니다.이 모든 필드에는 백틱이 필요합니다.

백틱은 표준 ANSI SQL에 속하지 않습니다. mysql 매뉴얼:

ANSI_QUOTES SQL 모드가 활성화되어 있는 경우 큰따옴표 안에 식별자를 따옴표로 묶을 수도 있습니다.

따라서 백틱을 사용한 후 MySQL에서 벗어나기로 결정하면 문제가 발생합니다(더 큰 문제가 있을 수도 있지만).

MYSQL을 계속 사용한다면 쿼리의 시각적 기능 이외에는 문제될 것이 없습니다.단, 테이블 및 열 이름으로 예약된 키워드 또는 내장된 공간을 사용할 수 있습니다.이것은 대부분의 데이터베이스 엔진에서는 no no로 나중에 이행할 수 없게 됩니다.

쉽게 읽을 수 있도록 SQL 키워드에 대소문자를 사용하는 경우가 많습니다.

SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;

내 생각엔, 항상 백틱을 사용해야 해.하지만 팀이 그것들을 사용하지 않는 것을 선호할 수 있는 몇 가지 이유가 있다.

장점:

  • 그것들을 사용하면, 예약된 단어나 금지된 문자가 없습니다.
  • 경우에 따라서는, 보다 알기 쉬운 에러 메세지가 표시됩니다.
  • 나쁜 습관을 피한다면 신경 안 쓰겠지만...실제로 SQL 주입을 피할 수 있는 적절한 방법이기도 합니다.

단점:

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

코드 베이스에서 백틱을 검색하는 것이 훨씬 쉬워집니다.를 가정해 주세요.eventgrep -r "event" *을 사용하다 grep -r "\`event\`" *는 데이터베이스를 참조하는 모든 항목을 반환합니다.

제가 알기로는 백틱을 사용하는 목적은 예약 키워드와 일치하는 이름을 사용하는 것입니다.따라서 이름이 예약된 키워드와 충돌하지 않으면 백틱을 사용할 이유가 없습니다.하지만 그렇다고 그들을 금지할 이유도 없어요.

backtick의 심플한 점은 database_name, table_name 등의 식별자, 스트링 리터럴의 큰따옴표, 큰따옴표 등입니다.반면 "는 그대로의 인쇄값을 사용하고 값변수 홀드를 인쇄하거나 다른 경우 가지고 있는 텍스트를 인쇄합니다.

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") backticks를 사용해야 합니다.statustable_name" 또는 "table_name에서 id를 선택합니다.status=1" ). mysql이 오류를 반환하거나 쿼리가 작동하지 않기 때문입니다.

SQL에서 backticks(')의 주요 용도는 다음 절에서 backticks를 다시 호출하는 상황에서 사용하는 것입니다.그 외의 시간에는 큰따옴표("")를 사용하는 것이 좋습니다.

예를들면

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;

위의 문장에서 당신은 어떻게 하는지 알 수 있습니까?Publisher and Location에서 다시 사용됩니다.GROUP BY절을 클릭합니다.

사용하는 대신

GROUP BY 이름, 시

그냥 사용했어요

그룹화 기준Publisher and Location

이러한 상황이 발생할 때만 백틱을 사용하는 것이 유용합니다.그 외의 경우에는 큰따옴표를 사용하는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/261455/using-backticks-around-field-names

반응형