【问题标题】:MySQL won't allow VARCHAR as a Primary Key? [closed]MySQL 不允许 VARCHAR 作为主键? [关闭]
【发布时间】:2011-11-23 20:15:15
【问题描述】:

我正在尝试创建一个名为 Student 的表,其中只有一个字段 student_name。

student_name 应该是一个 VARCHAR 和一个主键,因为我想通过学生的姓名来唯一标识学生。

CREATE TABLE 'swinters'.'Students' (
  'student_name' VARCHAR NOT NULL,
  PRIMARY KEY ('student_name')
)
ENGINE = InnoDB;

MYSQL Error Number 1064

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 'NOT NULL, PRIMARY KEY ('student_name') ) ENGINE = InnoDB' 附近使用正确的语法。

【问题讨论】:

  • 那些单引号是复制粘贴错误吗?如果没有,请删除它们。它们用于标识字符串文字。您不能将它们用于对象名称
  • 为什么要关闭所有投票?对我来说似乎是合法的。
  • @EricJ。查看问题的编辑历史记录。有人删除了 OP 的评论“啊啊啊啊啊!刚刚想通了!对不起,我是超级菜鸟!需要将 VARCHAR 更改为 VARCHAR(45) 之类的。哇,对不起!”由于 OP 如此迅速地自行解决了问题,因此我投票决定关闭。
  • 这也是一个非常简单和愚蠢的问题。
  • 我在发布后立即回答了自己的问题,但我的编辑肯定已被删除。

标签: mysql sql primary-key unique unique-constraint


【解决方案1】:

需要指定VARCHAR(N),其中N是最大字符串长度

【讨论】:

    【解决方案2】:

    您需要提供 VARCHAR 列的长度。即VARCHAR(255)

    【讨论】:

      【解决方案3】:

      mySQL 你,它试图鼓励你做正确的事;)

      不要为正确的事情而战。有两个字段。

      在您的姓名字段中使用 UNIQUE。

      就这样使用主键。称它为idstudent_id

      您可以在此处查看更多信息:
      https://stackoverflow.com/questions/8232943/why-should-i-create-an-id-column-when-i-can-use-others-as-key-fields/8235024#8235024

      【讨论】:

      • 使用 UNIQUE 并祈祷 John Smith 不注册?
      • 货币表呢?您认为创建代理 PK 是否值得,而 USDGBP 已经是独一无二且不可更改的。
      • @Michael Durrant:只要您的 BL 中没有它 - 根据定义,它就是替代品。我是在特别谈论汇率项目的货币。那么你会为保存货币名称的表创建 surrogate PK 吗?干什么用的?
      • @MichaelDurrant: :-S 很难回答这个问题吗?! :-( 您会为货币创建代理整数 PK(是/否)吗?为什么?(我尊重您的经验,但我很好奇与货币进行业务 PK 可能导致的真正问题)
      • 因此您建议人们遵循您的一般规则“不要使用具有‘任何’商业价值或意义的字段作为主键。”但事实上这条规则有一个例外。你也同意这个问题并不简单。这让我很困惑:-S
      【解决方案4】:

      您必须指定该字段将使用多少个字符,例如 VARCHAR(255)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-20
        • 2018-09-20
        • 1970-01-01
        • 2020-04-17
        • 1970-01-01
        • 1970-01-01
        • 2013-03-23
        • 1970-01-01
        相关资源
        最近更新 更多