Почему команда обновления в sql настаивает на использовании наклонных одинарных кавычек? - PullRequest
2 голосов
/ 30 июня 2011

У меня были проблемы с обновлением некоторых полей в базе данных mysql, и я разочарован тем, что иногда mysql отказывается разрешать мне запрашивать, если я не заключаю поля в наклонные кавычки, а не в одиночные.Похоже, что для этого нет четкой схемы, может кто-нибудь объяснить, что здесь происходит?

Этот запрос работает без каких-либо кавычек (x - это первичный ключ)

UPDATE  table SET  x =  1821 WHERE  x =1820

Эти два запроса терпят неудачу с синтаксическими проблемами около o.

UPDATE  table SET  o =  200 WHERE  x =1820

UPDATE  table SET  'o' =  200 WHERE  x =1820

Этот запрос работает.

UPDATE  table SET  `o` =  200 WHERE  x =1820

Существует ли какая-либо законная причина, по которой mysql настаивает на использовании наклонных кавычек?

Ответы [ 2 ]

4 голосов
/ 30 июня 2011

Почти во всех диалектах SQL строки (например, входные значения) заключаются в одинарные кавычки, а идентификаторы (например, имена таблиц или столбцов) остаются без кавычек:

SELECT column_name, function_name() AS column_alias
FROM table_name
WHERE another_column='The value to match'

Это действительно для MySQL, Oracle, SQL-Server и других приложений.

Это общее правило. Затем возникает особая ситуация: когда вы хотите использовать определенное имя для идентификатора, который обычно будет недействительным. В таком случае MySQL позволяет вам использовать кавычки вокруг имени (другие СУБД используют квадратные скобки, двойные кавычки или просто не позволяют использовать такое имя):

SELECT `Full Name` -- Name with spaces
FROM `from` -- Reserved word

В общем, лучше избегать подобных имен, хотя я понимаю, что бывают случаи, когда действительно хорошее имя уже взято :

SELECT `key`, value
FROM settings

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

0 голосов
/ 30 июня 2011

Это означает, что o является зарезервированным словом для MySQL, поэтому вы не можете просто поставить o.Вы не можете использовать 'o' для указания имени столбца, одинарные кавычки для значений.Косые кавычки должны указывать имена столбцов, это устраняет проблему наличия зарезервированных слов.Если вы хотите быть уверены, что вы всегда должны использовать `` для имен таблиц и столбцов.

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