Подтвердить что ты не робот

Использование backquote/backticks для запросов mysql

У меня есть запросы MYSQL с обратными окнами. Например,

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

в отличие от:

SELECT title FROM table WHERE (id = 3)

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Cheers, Брэд

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

  • Заменить все обратные выходы двойными обратными окнами
  • Окружать, что с одиночными backticks

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

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

<суб > 1. Хотя см. https://bugs.mysql.com/bug.php?id=68676