我一直在使用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
或者我应该将其重命名为另一个词?
如果你在MySQL中用``包装它,状态可以是它自己的列。
SELECT `t`.`Status`. FROM `t`
但是为了避免以后混淆,你可能会更好地以其他方式区分它。
我永远不会建议使用关键字作为列名,但如果将它包含在[] [Status]中的[]中则不应该是一个问题。
TL; DR:如果可以,请避免使用关键字标识符并重命名,否则请仔细引用它们。
你是正确的STATUS
is a keyword,可能是由于SHOW STATUS
。
如果重命名列对您来说不是一件苦差事,更改名称是最佳选择。这样,您可以避免以后遇到问题或者避免使用数据库结构的人员麻烦。
如果你想保留它(因为“状态”是一个方便的名字),它是完全可以的。纯粹主义者咆哮,它确保清洁代码,因为你必须根据manual on quoting identifiers使用反引号(`)或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
当然,这种标识符引用也适用于过程逻辑(如触发器脚本中)。
你应该在mysql和sql中使用``你应该使用[]
重命名您的专栏,讨论结束