[mysql] 필드 이름 주위에 백틱 사용

여기에 몇 가지 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\`" *아마도 데이터베이스를 참조하는 모든 것을 반환합니다.