MySQL中列名“ order”的替代方法


71

当我创建一个需要用户定义排序的新表时,我的第一个主意总是转到列名“ order”。当然,这不是一个好字,因为它是保留字。

您要为数据库模型中的该列指定哪个名称?

谢谢你的帮助。

Answers:



89

我用“位置”代替“顺序”


7
+1的ORDER BY position阅读肯定比ORDER BY sort-更好,并且“ sort”可能会与“ type”混淆。
rybo111

2
问题position在于,在某些SQL风格中,它被视为保留字。看到这个
Mustafa

@Mustafa在这种情况下PositionNo怎么样?
伊平

@Yiping然后我去点餐;)
Hans Wouters

代替position一个也可以只使用pos
拉斐尔·布加杰斯基

11

只需在表和列的名称周围添加对号`,例如:

  CREATE TABLE `order`
  (
         `order#` char(4) NOT NULL,
         `ord_date` DATE,
         Primary Key (`order#`)
  )
  ENGINE=InnoDB;

这允许使用特殊字符和关键字,至少这对于当前版本的MySql有效。


我知道,但是我使用的是Ebean,由于某种原因我无法理解,它没有添加这些刻度线,因此,如果我使用保留关键字命名列,它将失败。
西里尔N.12年

4

至少,SQL Server允许您使用方括号括起来的关键字,尽管我同意这不是一个好主意。

我相信上一次这样做时,我使用了SortOrder作为名称。但是,我经常使用反映该表的前缀(例如UsrSortOrder),因此这并不总是一个问题。


问题是我使用JPA,无论是否带括号,它都会发疯:/我必须更改名称。但是最后并没有那么糟糕,因为这个词是保留的;)。谢谢您的回覆
Cyril N.

我想如果您使用ANSI标准来引用名称,则JPA会更舒适:双引号。这些括号是SQL Server的“特殊性”,但也应理解标准引号(不知道是否需要对此配置进行更改)。因此"order"可能实际可行。但是我仍然建议找到其他名称。必须引用对象名称最终将导致问题。
a_horse_with_no_name 2011年

4

在ANSI / ISO SQL中,用作列名时,双引号分隔关键词。字符串文字用单引号分隔:

select "from" = 'from' from foo

Microsoft SQL Server还允许使用方括号代替双引号:

select [from] = 'from' from foo

但是,无论哪种方式,它都会使您的代码更糟(请尝试将以上内容读给别人。)

如果我需要一列用于排序结果,通常将其称为“ sequence_number”或“ sort_sequence”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.