Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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中同时使用自动增量和主键有什么意义?_Mysql_Sql_Primary Key_Auto Increment - Fatal编程技术网

什么';在MySQL中同时使用自动增量和主键有什么意义?

什么';在MySQL中同时使用自动增量和主键有什么意义?,mysql,sql,primary-key,auto-increment,Mysql,Sql,Primary Key,Auto Increment,在MySQL中,我理解如下 AUTO_INCREMENT:用于使INT值在用户每次创建行时自动增加 主键:用于使值在该表中唯一 然而,在定义id时,我经常看到它们一起使用 我不理解将自动增量与主键一起使用的意义,因为自动增量本身会使id唯一 在创建id时,它们一起使用有什么原因吗?您理解正确,但它们做的事情不同 PRIMARY KEYwithAUTO_INCREMENT表示我们希望此列在值上不重复,如果我们没有设置值,它将自动增加 但是我们只设置AUTO_INCREMENT怎么样?这只意味着

在MySQL中,我理解如下



AUTO_INCREMENT
:用于使
INT
值在用户每次创建行时自动增加

主键
:用于使
值在该表中唯一


然而,在定义
id
时,我经常看到它们一起使用

我不理解将
自动增量
主键一起使用的意义,因为
自动增量
本身会使
id
唯一


在创建
id
时,它们一起使用有什么原因吗?

您理解正确,但它们做的事情不同

PRIMARY KEY
with
AUTO_INCREMENT
表示我们希望此列在值上不重复,如果我们没有设置值,它将自动增加


但是我们只设置
AUTO_INCREMENT
怎么样?这只意味着如果我们不设置值,它将自动增加。但是没有确保该值是唯一的。

主键有三个属性:

  • 它是独一无二的
  • 它是非空的
  • 每张桌子只有一张
  • 将密钥定义为主键意味着它也应该用于外键引用

    此外,MySQL通过主键对数据进行集群。因此,该声明指示新行位于表的“末尾”——这意味着与数据页上最近的插入相邻


    此外,可以通过各种方式创建自动递增id的重复值。一种方法是可以重置增量计数器,从而导致重复。MySQL在并发更新的副本上应该是线程安全的,但是已经报告了错误。作为
    主键
    ,表中不允许有重复项。

    自动增量
    不会使列唯一。如果缺少,则仅在创建行时“自动”填充值。但您可以稍后更新这些值,也可以通过显式提供值来创建行


    主键
    拒绝任何可能导致两个不同条目存储相等值的修改sql语句。因此,它保证您的数据库处于正确的状态。

    我仍然没有得到“将密钥定义为主键意味着它也应该用于外键引用”这一部分。这是强制性的吗?请你详细说明一下,以便我能清楚地理解好吗?@Poream3387。你知道什么是外键引用吗?哦,是的,我知道什么是外键。你是说如果我要用外键引用某个键,它必须是被正确引用的主键?@Poream3387。不幸的是,它不必如此。但最好的做法是只将主键用于外键引用。哦,这就是你在文章中的意思!谢谢