MySQL数据库自增长问题

本文探讨了数据库中自增长字段的工作原理,特别是在遇到唯一性约束时的行为。当尝试插入重复值导致失败时,自增长字段会递增但不插入记录,下次插入时会跳过已递增的值。此外,删除高数值记录并不会影响自增长的起点,除非显式地更改。更新已存在的记录不会影响自增长,但重复值会导致插入失败。理解这些机制对于数据库管理和优化至关重要。
摘要由CSDN通过智能技术生成
  • 自动增长的时候如果有其他列是也是唯一的(主键、唯一键都行),但是添加元素的时候重复添加导致失败,也会导致+1,下一次成功添加的时候就比之前+2了,这样每失败一次都会+1

    • 例如

      CREATE TABLE t15(
          id INT PRIMARY KEY AUTO_INCREMENT,
          num INT UNIQUE);
      INSERT INTO t15 VALUES(NULL,1);
      INSERT INTO t15 VALUES(NULL,2);
      INSERT INTO t15 VALUES(NULL,3);
      SELECT * FROM t15;
      -- 这里查看表表里有(1,1),(2,2),(3,3)
      -- 再次插入(null,3)
      INSERT INTO t15 VALUES(NULL,3);
      -- 由于num参数是unique,因此插入失败,此时插入(null,4)
      INSERT INTO t15 VALUES(NULL,4);
      SELECT * FROM t15;
      -- 查看表,发现此时插入的不是(4,4)而是(5,4)

  • 自增长底层是找到当前字段中最大的然后+1,如果指定插入了一个比现在增长到的值更大的数,下次自增长从这里开始

    • 但是这个自增长的值只会变大不会变小,即如果现在最大的是4,你插入的时候指定7,那么下一次自增长从7开始,但是如果这个时候你把234全部删除了,只剩下1,自增长还是从4开始

      • 下列语句删除1,2之后自动插入,查看表可以发现插入的仍然是3

        CREATE TABLE t14(
            id INT PRIMARY KEY AUTO_INCREMENT);
        INSERT INTO t14 VALUES(NULL);
        INSERT INTO t14 VALUES(NULL);
        DELETE FROM t14 WHERE id = 1;
        DELETE FROM t14 WHERE id = 2;
        INSERT INTO t14 VALUES(NULL);
        SELECT * FROM t14;

    • 如果是update修改了已经插入的值,不会有影响

    • 但是之前说了,如果是因为重复导致的添加失败,仍会+1,但是不会插入,下次插入就加了2,如果使用update修改一个值例如2改成5,当自增到4的时候再次调用,就会失败,因为5重复了,下一次再调用就会插入6

      CREATE TABLE t13(
          id INT PRIMARY KEY AUTO_INCREMENT);
      INSERT INTO t13 VALUES(NULL);
      INSERT INTO t13 VALUES(NULL);
      INSERT INTO t13 VALUES(NULL);
      UPDATE t13 SET id = 5 WHERE id = 2;
      INSERT INTO t13 VALUES(NULL);
      • 此时查看发现列表

      • 此时自增长到了4,如果再次插入,则会因为5重复而失败

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一酒。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值