Переваги використання 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

Я сподіваюся, що це вам допоможе.


24

Якщо ви хочете використовувати щось навколо ідентифікаторів об'єктів, використовуйте принаймні стандартні подвійні лапки: "

Це працює в MySQL, PostgreSQL, SQL Server, Oracle тощо тощо. Для MySQL може знадобитися ansi_quotes режиму SQL , залежно від конфігурації за замовчуванням:

SET sql_mode = 'ANSI_QUOTES';

Повернення 'використовуються лише в MySQL, ви дізнаєтесь тип SQL, який не працюватиме в будь-якій іншій марці СУБД.


6

Це означає, що ви можете мати пробіли в назвах таблиць. Звичайно, не особливо привабливо. Те саме з SQL Server [].


3

Це може бути корисно, якщо у вас стовпчик із ім’ям, яке зарезервовано,

наприклад: Ви можете запитувати таке твердження:

select * from tablename group by `group`;

1

З моєї точки зору, відповідь @ Mr.Brownstone лише частково правильна.

Зворотний зв'язок `використовується в MySQL для розмежування літералів, які представляють ідентифікатори (а не рядки).

Це дозволяє використовувати як ідентифікатори не прийняті символи, як пробіли, зарезервовані слова тощо. Наприклад:

SELECT * FROM `Strange table name`;

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

SELECT notexistingcolumn FROM atable;

Якщо atableіснує, але notexistingcolumnстовпець не існує, він буде інтерпретуватися як буквальний рядок "notexistingconumn", вибираючи його як значення (і, ймовірно, видаючи попередження).

Натомість, якщо ви використовуєте:

SELECT `notexistingcolumn` FROM `atable`;

Він визнає, що notexistingcolumnце ім'я стовпця, який не існує, і видасть помилку.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.