Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否需要在SQL表中创建id列?_Mysql_Sql - Fatal编程技术网

Mysql 是否需要在SQL表中创建id列?

Mysql 是否需要在SQL表中创建id列?,mysql,sql,Mysql,Sql,大家好,我在书或博客的某个地方读到,SQL中有一条经验法则,我们必须在每个表中使用主键和自动增量属性创建ID列。如果我使用手机号码作为表中的用户id,该怎么办。我应该在我的表中创建id列还是在我的表中创建作为主键的手机号码就足够了?只要该键是唯一的,它就可以用作主键。当您没有可以用作主键的列时,应该使用一个附加的ID列,因为它不是唯一的,或者可以有空值。此外,整数列也是首选。因此,电话号码可以工作。只要钥匙是唯一的,它就可以用作主键。当您没有可以用作主键的列时,应该使用一个附加的ID列,因为它不

大家好,我在书或博客的某个地方读到,SQL中有一条经验法则,我们必须在每个表中使用主键和自动增量属性创建ID列。如果我使用手机号码作为表中的用户id,该怎么办。我应该在我的表中创建id列还是在我的表中创建作为主键的手机号码就足够了?

只要该键是唯一的,它就可以用作主键。当您没有可以用作主键的列时,应该使用一个附加的ID列,因为它不是唯一的,或者可以有空值。此外,整数列也是首选。因此,电话号码可以工作。

只要钥匙是唯一的,它就可以用作主键。当您没有可以用作主键的列时,应该使用一个附加的ID列,因为它不是唯一的,或者可以有空值。此外,整数列也是首选。因此,电话号码是有效的。

不,这是不必要的,但对于任何缺少关联表的情况,建议使用它

此标识列提供数据的唯一且不变的标识符,使设置外键关系变得非常容易


关联表不会有这些标识列中的任何一列,因为它本身没有数据。它们通常由2个或更多外键列组成。

不,这不是必需的,但对于关联表以外的任何列,建议使用它

此标识列提供数据的唯一且不变的标识符,使设置外键关系变得非常容易


关联表不会有这些标识列中的任何一列,因为它本身没有数据。它们通常由2个或多个外键列组成。

创建SQL时,它必须具有唯一的标识键,这意味着当您需要从该特定表中查询记录时,必须有唯一的列,以便于识别

主键是该特殊、唯一的数据库术语 分配给表中特定行的值

在一些非常特殊的情况下,您甚至可以从多个列中创建主键,而不是仅创建一个。他们称之为复合键。简言之,创建您的表,并将主键设置为手机号码,如果每个人都是唯一的,我认为就是这样


让我举个例子。在美国和欧洲,社会保险号也被设置为表中的主键;而且它不是一个增量键。

创建SQL时,它必须具有唯一的可识别键,这意味着当您需要从该特定表中查询记录时,必须有唯一的列以便于识别

主键是该特殊、唯一的数据库术语 分配给表中特定行的值

在一些非常特殊的情况下,您甚至可以从多个列中创建主键,而不是仅创建一个。他们称之为复合键。简言之,创建您的表,并将主键设置为手机号码,如果每个人都是唯一的,我认为就是这样


让我举个例子。在美国和欧洲,社会保险号也被设置为表中的主键;而且它不是一个增量键。

如果您想使用电话号码作为主键,您可以

create table MyData(
phonenumber int not null primary key,
fname varchar(25),
lname varchar(25)
...
)
但这可能不是最佳做法。因为电话号码可能会改变。它曾经属于客户A,现在属于客户B。使用这种模式,您可能最终会遇到一个问题,即您无法仅根据电话号码提取唯一的客户。如果您添加一个自增索引作为主键,则始终可以通过该ID引用唯一的客户。这更安全、更清晰、更直观,并且易于编码。特别是当你添加外键时,它会帮助你。一开始选择错误的主键,你可能会在一两年后陷入大麻烦

您还可以添加一个自递增索引作为主键,并对电话号码设置唯一约束,以便电话号码必须唯一才能输入数据库。这主要是为了数据完整性,例如,如果有人输入错误,而现在它与另一个数字匹配,那么它将立即被捕获。我仍然不建议这样做,因为您可能再次遇到这样的问题,即此约束可能会捕获有效案例


所以我会使用自增索引作为主键,使事情变得简单,并添加一个电话号码字段,该字段不能为空(这将是另一个限制:)

如果您想使用电话号码作为主键,您可以

create table MyData(
phonenumber int not null primary key,
fname varchar(25),
lname varchar(25)
...
)
但这可能不是最佳做法。因为电话号码可能会改变。它曾经属于客户A,现在属于客户B。使用这种模式,您可能最终会遇到一个问题,即您无法仅根据电话号码提取唯一的客户。如果您添加一个自增索引作为主键,则始终可以通过该ID引用唯一的客户。这更安全、更清晰、更直观,并且易于编码。特别是当你添加外键时,它会帮助你。一开始选择错误的主键,你可能会在一两年后陷入大麻烦

您还可以添加一个自递增索引作为主键,并对电话号码设置唯一约束,以便电话号码必须唯一才能输入数据库。这主要是为了数据完整性,例如,如果有人输入错误,而现在它与另一个数字匹配,那么它将立即被捕获。我仍然不建议这样做,因为您可能再次遇到这样的问题,即此约束可能会捕获有效案例


所以我会使用自增索引作为主键,使事情变得简单,并添加一个电话号码字段,该字段不能为空(这将是另一个限制:)

没有这样的拇指规则。是的,代理密钥是可以的,但它们不是必需的,而且