Преимущества использования backtick (`) в запросах MySQL?

25

В MySQL мы можем создавать запросы с или без `символа backtick ( ). Пример:

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

Оба прекрасно работают в MySQL консоли.

Есть ли техническая разница между ними?

Есть ли преимущество использования ( `) по сравнению с простыми запросами?

Сатиш Пандей
источник

Ответы:

33

Они называются заключенными в кавычки идентификаторами и говорят парсеру обрабатывать текст между ними в виде буквенной строки. Они полезны, когда у вас есть столбец или таблица, которая содержит ключевое слово или пробел. Например, следующее не будет работать:

CREATE TABLE my table (id INT);

Но следующее будет:

CREATE TABLE `my table` (id INT);

Кроме того, следующее может привести к ошибке, потому что COUNTэто зарезервированное ключевое слово:

SELECT count FROM some_table

Но следующее будет правильно проанализировано:

SELECT `count` FROM some_table

Я надеюсь, это поможет вам.

Mr.Brownstone
источник
24

Если вы хотите использовать что-то вокруг идентификаторов объектов, используйте хотя бы стандартные двойные кавычки: "

Это работает в MySQL, PostgreSQL, SQL Server, Oracle и т. Д. И т. Д. Для MySQL вам может потребоваться режим SQL ansi_quotes , в зависимости от конфигурации по умолчанию:

SET sql_mode = 'ANSI_QUOTES';

Обратные пометки `используются только в MySQL, вы изучаете тип SQL, который не будет работать ни в одной другой марке СУБД.

Фрэнк Хейкенс
источник
6

Это означает, что в именах таблиц могут быть пробелы. Не особо привлекательный, конечно. То же самое с SQL Server [].

Роб Фарли
источник
3

Это может быть полезно, если у вас есть столбец с именем, которое зарезервировано,

Например: Вы можете запросить утверждение как это:

select * from tablename group by `group`;
HVNSweeting
источник
1

С моей точки зрения, @ Mr.Brownstone ответ является лишь частично правильным.

Обратная черта `используется в MySQL для разделения литералов, которые представляют идентификаторы (не строки).

Это позволяет вам использовать не обычно принятые символы, такие как пробелы, зарезервированные слова и т. Д. В качестве идентификаторов. Например:

SELECT * FROM `Strange table name`;

Также важно то, что он также позволяет анализатору узнать, делаете ли вы что-то неправильно, например, выбираете несуществующий столбец. Например:

SELECT notexistingcolumn FROM atable;

Если atableсуществует, но notexistingcolumnстолбец не существует, он будет интерпретирован как буквальная строка «notexistingcolumn», выбрав его в качестве значения (и, вероятно, выдавая предупреждение).

Вместо этого, если вы используете:

SELECT `notexistingcolumn` FROM `atable`;

Он распознает, что notexistingcolumnэто имя столбца, который не существует, и выдаст ошибку.

Я думаю, что всегда предпочтительнее окружать идентификаторы обратными метками, включая псевдоним, и стараться избегать использования зарезервированных слов и странных символов для идентификаторов.

Вы можете прочитать больше о обратной связи MySQL на https://dev.mysql.com/doc/refman/8.0/en/identifiers.html .

PhoneixS
источник