Выбор столбца, который также является ключевым словом в MySQL - PullRequest
5 голосов
/ 22 октября 2010

По какой-то причине разработчики в новой компании, на которую я работаю, решили назвать свои столбцы "игнорировать" и "существует". Теперь, когда я выполняю запросы MySQL с этими словами в предложении where, я получаю синтаксическую ошибку; Тем не менее, я не могу понять, как ссылаться на эти столбцы без ошибок. Я попытался установить их как строки, но это не имеет никакого смысла.

Помощь

Кроме того, есть ли термин для такого несоответствия?

Ответы [ 2 ]

11 голосов
/ 22 октября 2010

поместите имена в обратных кавычках:

`ignore`, `exists`

Если вы работаете с несколькими таблицами или базами данных, вам нужно экранировать имя базы данных, имя таблицы и имя поля отдельно (если каждый из них соответствует ключевому слову):

SELECT * FROM `db1`.`table1`
LEFT JOIN `db2`.`table2` on `db1`.`table1`.`field1`=`db2`.`table2`.`field2`

Необходимо экранировать только те части, которые действительно соответствуют ключевому слову, поэтому такие вещи, как:

select * from `db1`.table

тоже подойдут.

4 голосов
/ 22 октября 2010

Официальный термин «идиотизм» :-) Вы можете поставить галочку напротив таких имен, как

`ignore`

, но я бы серьезно подумал об изменении имен, если это возможно.Обратные пометки не являются стандартным SQL, и я предпочитаю, чтобы имена моих столбцов были немного более выразительными.Например, ignoreThisUser или orderExists (общее правило, которому я стараюсь следовать, это иметь где-то существительное и глагол).

Интересно, что некоторые СУБД могут не относиться к ним как кзарезервированное слово, основанное на контексте.Например, DB2 / z допускает довольно отвратительные:

> CREATE TABLE SELECT ( SELECT VARCHAR(10) );
> INSERT INTO SELECT VALUES ('HELLO');
> SELECT SELECT FROM SELECT;
SELECT
---------+---------+---------+--------
HELLO
DSNE610I NUMBER OF ROWS DISPLAYED IS 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...