Столбец под названием Статус в MySQL - PullRequest
7 голосов
/ 21 июня 2011

Я использую MySQL, и мне нужен столбец с именем «Status» в таблице.

Я знаю, что это слово «Status» является ключевым словом в MySQL, и я хотел бы знать, буду ли яу меня проблемы с этим, если я пишу SQL-операторы вроде:

select t.Id, t.Name, t.Status from Table t

или в триггерах:

Set new.Status = 1;

if (new.Status <> old.Status) then
  /* do something */
end if

Или мне следует переименовать его для другого слова?

Ответы [ 5 ]

9 голосов
/ 21 июня 2011

Статус может быть собственным столбцом, если вы заключите его в MySQL с помощью ``.

SELECT `t`.`Status`. FROM `t`

Но для того, чтобы избежать путаницы в дальнейшем, для вас может быть лучше отличить его каким-либо другим способом.

3 голосов
/ 21 июня 2011

Я бы никогда не рекомендовал использовать ключевые слова в качестве имен столбцов, но это не должно быть проблемой, если вы заключите его в [], например, [Статус].

1 голос
/ 04 января 2017

TL; DR : избегайте идентификаторов ключевых слов и, если возможно, переименовывайте их, в противном случае тщательно цитируйте их.


Вы правы, что STATUS является ключевым словом , вероятно, из-за SHOW STATUS.

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

Если вы хотите сохранить , однако (потому что «status» - это удобное имя), это совершенно нормально. Пока пуристы разглагольствуют, он гарантирует чистый код, потому что вы должны использовать обратные кавычки ( `) или кавычки ANSI (то есть " ) в соответствии с руководством идентификаторы в кавычках .

SELECT `t`.`Status` FROM `Table` t -- properly quoted

SELECT t.status FROM `Table` t -- multi-part identifier

SELECT STATUS FROM `Table` t -- will still work, but tease any pedant

Конечно, этот вид цитирования идентификаторов работает и в процедурной логике (как в триггерных скриптах).

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

переименуйте вашу колонку, конец обсуждения

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

Вы должны использовать `` тогда в mysql, а в sql вы должны использовать []

...