Использование обратных цитат / обратных кавычек для запросов MySQL - PullRequest
20 голосов
/ 12 октября 2009

Я строю запросы MYSQL с обратными галочками. Например,

SELECT `title` FROM `table` WHERE (`id` = 3)

вместо:

SELECT title FROM table WHERE (id = 3)

Мне кажется, я получил эту практику из экспорта Phpmyadmin, и из того, что я понял, даже Rails генерирует свои запросы следующим образом.

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

Я хотел выяснить, есть ли в этой практике другие аспекты, такие как скорость интерпретации SQL (в моем случае MySQL) и т. Д. Как вы думаете?

Ответы [ 6 ]

21 голосов
/ 12 октября 2009

В обратных именах также допускаются пробелы и другие специальные символы (за исключением обратных символов, очевидно) в именах таблиц / столбцов. Они не являются строго необходимыми, но хорошая идея для безопасности.

Если вы следуете разумным правилам именования таблиц и столбцов, обратные метки не нужны.

16 голосов
/ 17 ноября 2010

Каждый раз, когда я вижу это обсуждаемым, я пытаюсь лоббировать их включение, потому что, хорошо, ответ уже спрятан здесь, хотя и криво подмигнул без дальнейших размышлений. Когда мы по ошибке используем ключевое слово в качестве имени поля или таблицы, мы можем избежать путаницы различными методами, но только проницательный обратный тик `дает еще большую выгоду !!!

Каждое слово в выражении sql проходит через всю хеш-таблицу ключевых слов, чтобы увидеть, нет ли конфликтов, поэтому вы сделали большой запрос, сказав компилятору, что, эй, я знаю, что я делаю, вы не нужно проверять эти слова, потому что они представляют имена таблиц и полей. Скорость и элегантность.

Ура, Бред

3 голосов
/ 12 октября 2009

backticks используются для экранирования зарезервированных ключевых слов в вашем запросе mysql, например Вы хотите иметь столбец count - не так уж редко.

Вы можете использовать другие специальные символы или пробелы в именах столбцов / таблиц / БД

они не защищают вас от инъекционных атак (если вы разрешаете пользователям каким-либо образом вводить имена столбцов - в любом случае, это плохая практика)

они не стандартизированы sql и будут работать только в mysql; другие dbms будут использовать " вместо

2 голосов
/ 12 октября 2009

Что ж, если вы гарантируете, что никогда не используете случайно ключевое слово в качестве идентификатора, обратные пометки вам не нужны. : -)

1 голос
/ 15 июля 2015

Вы читаете документацию по идентификаторам на http://dev.mysql.com/doc/refman/5.6/en/identifiers.html

Генераторы SQL часто включают обратные пометки, поскольку это проще, чем включать список всех зарезервированных слов MySQL. Чтобы использовать любую 1 последовательность символов BMP Unicode, кроме U + 0000, в качестве идентификатора, они могут просто

  1. Заменить все обратные галочки на двойные.
  2. Окружите это одиночными пробками

При написании запросов ручной работы я знаю (большинство) зарезервированных слов MySQL, и я предпочитаю не использовать обратные пометки, где это возможно, так как они короче и ИМО легче читать.

В большинстве случаев это просто предпочтение стиля - если, конечно, у вас есть поле типа date или My Field, а затем вы должны использовать обратные метки.

1. Хоть см https://bugs.mysql.com/bug.php?id=68676

1 голос
/ 12 октября 2009

Мое убеждение заключалось в том, что обратные галочки в основном использовались для предотвращения ошибочных запросов, в которых использовались общие идентификаторы SQL, т. Е. LIMIT и COUNT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...