【问题标题】:How to make the primary key as varchar如何将主键设为varchar
【发布时间】:2021-02-06 18:30:00
【问题描述】:

大家好,所以我不知道如何将其设为 varchar,因为我想输入 BSIT 作为我的主键,但我无法弄清楚如何将其设为字符,请帮助我这是我的代码 btw

create table CourseTBL
(
    CourseID int primary key,
    Course varchar(50),
    Description varchar(50),
)

【问题讨论】:

  • 为什么要这样做?通常最好使用INT 作为主键。您只想让Course 独一无二吗?
  • @Barmar 我想将其设为字符代码而不是数字,但我不知道该怎么做。这是我的项目要求,我不知道如何将其设为 char。
  • CourseID VARCHAR(50) PRIMARY KEY?
  • 你有 MySQL 和 T-SQL 的标签。您实际使用的是哪个?删除另一个标签。
  • 将您尝试过的内容和错误消息添加到问题中。

标签: mysql sql tsql


【解决方案1】:

最好创建一个不同的 CODE 列以在其上使用 WHERE 条件,因为 key 是无意义的,仅用于参照完整性。对于 PK,添加一个约束作为 CREATE TABLE 语句的另一个元素。 Like this:

create table CourseTBL
(
    CourseID varchar(50),
    Course varchar(50),
    Description varchar(50),
    primary key( CourseID )
)

【讨论】:

  • MySQL 允许您添加主键作为列上的选项或稍后作为约束。这应该没什么区别。
  • 是的 :( 不工作尝试了你的代码,但仍然不工作
  • 主键的目的是唯一标识一行。如果它是一个自然或有意义的键,那么它是一个 varchar/etc 很好,特别是如果按它排序可能有用。将键作为单独的数字(例如,自动递增的 int)称为“代理”或“便利”键,因为它是一种特殊的键 - 您可以在其中卸载对新键的引用。例如,假设您有一个“按天报告”表。为什么不以PK为日期?添加单独的 PK 只会使您的表膨胀,您仍然应该对日期字段以及聚集索引设置唯一约束。
  • @seanb 是的,这不是很准确的说法。当然,这不是经验法则。但是,当您将智能放在主键中时,您将保护您的模型免受更改。如果有一天您发现您需要通过任何附加属性(由于任何原因)来识别您的实体,并且您的 varchar 不够长,您将破坏密钥的智能或破坏其含义或更新所有你的相关表格,希望你没有错过任何东西。对于日期示例,我真的无法想象日期是除日历之外的任何实体的主键。
  • @Jujubreaz“不起作用”不是一个有用的问题。你有错误吗?如果是这样,确切的错误信息是什么?而且您还没有弄清楚您使用的是 MySQL 还是 SQL-Server。
【解决方案2】:

我的偏好是添加课程代码栏

Create table CourseTBL
(
    CourseID int primary key,
    CourseName varchar(50),
    CourseCode varchar(10),
    CourseDescription varchar(50),
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2010-10-31
    • 2012-07-03
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多