Korzyści z używania backtick (`) w zapytaniach MySQL?

25

W MySQL możemy tworzyć zapytania z lub bez `symbolu backtick ( ). Przykład:

  1. SELECT * FROM TEST;
  2. SELECT * FROM `TEST`;

Oba działają dobrze w konsoli mysql.

Czy jest między nimi jakaś różnica techniczna?

Czy jest jakaś korzyść przy użyciu ( `) w porównaniu z prostymi zapytaniami?

Satish Pandey
źródło

Odpowiedzi:

33

Są one nazywane identyfikatorami cytowanymi i mówią parserowi, aby przetwarzał tekst między nimi jako dosłowny ciąg. Są przydatne, gdy masz kolumnę lub tabelę zawierającą słowo kluczowe lub spację. Na przykład następujące nie działałyby:

CREATE TABLE my table (id INT);

Ale następujące czynności:

CREATE TABLE `my table` (id INT);

Ponadto następujący błąd może zostać wyświetlony, ponieważ COUNTjest to zastrzeżone słowo kluczowe:

SELECT count FROM some_table

Ale następujące elementy zostałyby poprawnie przeanalizowane:

SELECT `count` FROM some_table

Mam nadzieję, że to Ci pomoże.

Mr.Brownstone
źródło
24

Jeśli chcesz użyć czegoś wokół identyfikatorów obiektów, użyj przynajmniej standardowych podwójnych cudzysłowów: „

Działa to w MySQL, PostgreSQL, SQL Server, Oracle itp. Itp. W przypadku MySQL może być potrzebny tryb SQL ansi_quotes , w zależności od domyślnej konfiguracji:

SET sql_mode = 'ANSI_QUOTES';

Backticks `są używane tylko w MySQL, uczysz się SQL, który nie będzie działał w żadnej innej DBMS.

Frank Heikens
źródło
6

Oznacza to, że możesz mieć spacje w nazwach tabel. Oczywiście niezbyt pociągające. To samo z SQL Server's [].

Rob Farley
źródło
3

Może to być pomocne, jeśli masz kolumnę z nazwą, która jest zarezerwowana,

np .: Możesz zapytać o taką instrukcję:

select * from tablename group by `group`;
HVNSweeting
źródło
1

Z mojego punktu widzenia odpowiedź @ Mr.Brownstone jest tylko częściowo poprawna.

Strzałka wsteczna `jest używana w MySQL do rozgraniczenia literałów reprezentujących identyfikatory (nie łańcuchy).

Pozwala to na użycie zwykle identyfikatorów, takich jak spacje, słowa zastrzeżone itp. Na przykład:

SELECT * FROM `Strange table name`;

Ważne jest również to, że pozwala parserowi dowiedzieć się, czy robisz coś źle, np. Wybierając kolumnę, która nie istnieje. Na przykład:

SELECT notexistingcolumn FROM atable;

Jeśli atableistnieje, ale notexistingcolumnkolumna nie istnieje, zostanie zinterpretowana jako ciąg literalny „nieistniejąca kolumna”, wybierając ją jako wartość (i prawdopodobnie emitując ostrzeżenie).

Zamiast tego, jeśli użyjesz:

SELECT `notexistingcolumn` FROM `atable`;

Rozpoznaje, że notexistingcolumnjest to nazwa kolumny, która nie istnieje i zgłasza błąd.

Wydaje mi się, że zawsze lepiej jest otaczać identyfikatory za pomocą odwrotnych znaków, w tym aliasu, i starać się unikać używania zastrzeżonych słów i dziwnych znaków dla identyfikatorów.

Możesz przeczytać więcej na temat backsick MySQL na https://dev.mysql.com/doc/refman/8.0/en/identifiers.html .

PhoneixS
źródło