执行完以下代码后运行的结果:
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;
在原来的基础上,执行完以下代码后运行的结果:
INSERT INTO t17
(email, `name`) VALUES('sql105@163.com', '105');
SELECT * FROM t17;
以下为完整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;
为什么最后一行的id值不是从104自增到105,而是直接到106?
显示表格时,如何使id按照源代码排序?(即:按照1 2 3 100 101 102 50 103 104…的顺序排序)
在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字段转换为无符号整数。