哈夫曼树_ 2023-02-20 12:47 采纳率: 57.7%
浏览 39
已结题

MySQL自增 为什么最后一行的值不是105而是106?

执行完以下代码后运行的结果:


INSERT INTO t17 
    VALUES (NULL, 'sql001@163.com', '001'),    -- 从1开始
    (NULL, 'sql002@163.com', '002'),
    (NULL, 'sql003@163.com', '003'),
    (100, 'sql100@163.com', '100'),
    (NULL, 'sql101@163.com', '101'),   -- 从101开始
    (NULL, 'sql102@163.com', '102'),   -- 102
    (50, 'sql050@163.com', '050'),
    (NULL, 'sql103@163.com', '103'),   -- 103
    (NULL, 'sql104@163.com', '104');   -- 104

SELECT * FROM t17;

img

在原来的基础上,执行完以下代码后运行的结果:


INSERT INTO t17
    (email, `name`) VALUES('sql105@163.com', '105');

SELECT * FROM t17;

img

以下为完整MySQL代码:


CREATE TABLE t17 (
    id INT PRIMARY KEY AUTO_INCREMENT,   -- 自增和主键搭配使用
    email VARCHAR(32) NOT NULL DEFAULT '',
    `name` VARCHAR(32) NOT NULL DEFAULT '');
    
INSERT INTO t17 
    VALUES (NULL, 'sql001@163.com', '001'),    -- 从1开始
    (NULL, 'sql002@163.com', '002'),
    (NULL, 'sql003@163.com', '003'),
    (100, 'sql100@163.com', '100'),
    (NULL, 'sql101@163.com', '101'),   -- 从101开始
    (NULL, 'sql102@163.com', '102'),   -- 102
    (50, 'sql050@163.com', '050'),
    (NULL, 'sql103@163.com', '103'),   -- 103
    (NULL, 'sql104@163.com', '104');   -- 104

INSERT INTO t17
    (email, `name`) VALUES('sql105@163.com', '105');
SELECT * FROM t17;
DROP TABLE t17;
  1. 为什么最后一行的id值不是从104自增到105,而是直接到106?

  2. 显示表格时,如何使id按照源代码排序?(即:按照1 2 3 100 101 102 50 103 104…的顺序排序)

  • 写回答

1条回答 默认 最新

  • MarkHan_ 2023-02-20 13:13
    关注

    在MySQL的自增机制中,如果表中定义了主键,每次向表中插入新数据时,自增的值会按照已有数据的最大主键值+1作为新的主键值。在这里,虽然在插入第4行数据时手动指定了主键为100,但由于后续插入了若干条自增主键数据,MySQL在计算自增主键值时会发现已有的最大主键为105,因此新插入的数据主键就是106。

    要使id按照代码排序,可以使用ORDER BY和CAST函数,将name字段转换为整数进行排序,示例代码如下:

    SELECT * FROM t17 ORDER BY CAST(`name` AS UNSIGNED);
    

    其中,CAST(name AS UNSIGNED)表示将name字段转换为无符号整数。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月16日
  • 创建了问题 2月20日

悬赏问题

  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费