문제

여기에 몇 가지 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 

돌아 오는 생성 된 경고에는 백 틱이 있습니다 그리고 자격을 갖춘 테이블 이름. 따라서 쿼리 생성 기능과 쿼리의 자동 재 작성을 사용하는 경우 Backticks는 코드를 덜 혼란스럽게 만들 수 있습니다.

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

다른 팁

백 티크의 유일한 문제는 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 주입을 피하는 괜찮은 방법입니다.

단점 :

  • 그들은 표준이 아니며 일반적으로 휴대용이 아닙니다. 그러나 식별자의 일부로 백틱을 사용하지 않는 한 (내가 상상할 수있는 최악의 연습 임) 백 티크를 자동으로 제거하여 쿼리를 포트 할 수 있습니다.
  • 쿼리 중 일부가 액세스 한 경우 "테이블 이름을"(그리고 아마도 맹목적으로 제거 할 수 없음)를 인용 할 수 있습니다. 그러나 백틱 및 이중 인용구의 혼합물이 허용됩니다.
  • 일부 멍청한 소프트웨어 또는 기능은 쿼리를 필터링하고 백 티크에 문제가 있습니다. 그러나 ASCII의 일부이므로 소프트웨어/기능이 매우 나쁘다는 것을 의미합니다.

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

백티크로 코드베이스를 검색하는 것이 훨씬 쉽습니다. 이름이 지정된 테이블이 있다고 가정 해 봅시다 event. grep -r "event" * 수백 개의 결과를 반환 할 수 있습니다. grep -r "\`event\`" * 아마도 데이터베이스를 참조하는 것을 반환합니다.

백틱에 대한 간단한 것 `` 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 값으로 사용하는 경우 백 티크를 사용해야합니다 ( "SELECT status table_name에서 "또는"table_name에서 id를 선택하십시오. status= 1 "). MySQL이 오류를 반환하거나 쿼리가 작동하지 않기 때문에.

SQL에서 백틱 (`)의 주요 사용은 다가오는 조항에서 다시 전화 할 상황에서 사용하는 것입니다. 다른 시간마다 이중 인용문 ( "")을 사용하는 것이 좋습니다.

예를 들어

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 절.

사용하는 대신

이름별로 그룹, 도시, Statecode

방금 사용했습니다

그룹에 의해 Publisher and Location

그러한 상황이 발생할 때만 백 티크를 사용하는 것이 유용합니다. 다른 시간에는 이중 인용문을 사용하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top