Использование backquote/backticks для запросов mysql
У меня есть запросы MYSQL с обратными окнами. Например,
SELECT `title` FROM `table` WHERE (`id` = 3)
в отличие от:
SELECT title FROM table WHERE (id = 3)
Я думаю, что получил эту практику из экспорта Phpmyadmin, и из того, что я понял, даже Rails генерирует свои запросы, подобные этому.
Но в настоящее время я вижу все меньше и меньше запросов, подобных этому, а также код выглядит более беспорядочным и сложнее с обратными вызовами в запросах. Даже с помощью SQL-вспомогательных функций с ними было бы проще. Следовательно, я собираюсь оставить их.
Я хотел узнать, есть ли другие последствия в этой практике, такие как скорость интерпретации SQL (MySQL в моем случае) и т.д. Как вы думаете?
Ответы
Ответ 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