Использование обратных кавычек вокруг имен полей

StackOverflow https://stackoverflow.com/questions/261455

  •  06-07-2019
  •  | 
  •  

Вопрос

Прочитав здесь пару ответов и комментариев на некоторые вопросы по 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 :

  

Если режим SQL ANSI_QUOTES   включен, также допустимо цитировать   идентификаторы в двойных кавычках

Так что, если вы используете обратные пометки, а затем решили отойти от MySQL, у вас есть проблема (хотя у вас, вероятно, также есть и более серьезные проблемы)

Нет ничего плохого, если вы продолжаете использовать MYSQL, за исключением, может быть, визуальной нечеткости запросов. Но они позволяют использовать зарезервированные ключевые слова или встроенные пробелы в качестве имен таблиц и столбцов. Это нет-нет с большинством механизмов баз данных и предотвратит любую миграцию позже.

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

SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;

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

Преимущества:

  • При их использовании не используются зарезервированные слова или запрещенные символы.
  • В некоторых случаях вы получаете более описательные сообщения об ошибках.
  • Если вы избегаете плохих практик, вам все равно, но...на самом деле иногда это хороший способ избежать SQL-инъекций.

Недостатки:

  • Они не стандартны и обычно не портативны.Однако до тех пор, пока вы не используете обратные кавычки как часть идентификатора (что является наихудшей практикой, которую я могу себе представить), вы можете перенести свой запрос, автоматически удаляя обратные кавычки.
  • Если часть вашего запроса поступает из Access, они могут заключать имена таблиц с помощью " (и, возможно, вы не сможете удалить все " вслепую).Однако допускается сочетание обратных кавычек и двойных кавычек.
  • Какое-то глупое программное обеспечение или функция фильтрует ваши запросы и имеет проблемы с обратными кавычками.Однако они являются частью ASCII, поэтому это означает, что ваше программное обеспечение/функция очень плохое.

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

Гораздо проще найти в базе кода что-то в обратном трюке. Допустим, у вас есть таблица с именем event . grep -r " событие " * может вернуть сотни результатов. grep -r " \ `event \` " * вернет что-либо, возможно, ссылающееся на вашу базу данных.

Простая вещь о обратном кавычке `` используется для обозначения идентификатора, такого как имя_базы_данных, имя_таблицы и т. д., и одинарной кавычки '' , двойной кавычки " " для строковых литералов, тогда как " " используйте для печати значение как оно есть и '' выведите переменную value hold или в другом случае выведите текст, который он имеет.

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 по умолчанию, например, "status", вы должны использовать обратные метки (" выбрать status из table_name " или " выбрать идентификатор из table_name где status = 1 "). потому что mysql возвращает ошибки или не работает запрос.

Основное использование backticks (`) в 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 .

Вместо использования

  

GROUP BY Имя, город, код штата

Я только что использовал

  

GROUP BY Издатель и местоположение

Только когда такие ситуации возникают, полезно использовать обратные пометки. Во всех остальных случаях рекомендуется использовать двойные кавычки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top