让我们这样想,比如我在MYSQL中有一个名为“names”的表,如下所示:
id| name
1 | Bob
2 | Sally
3 | Anne
其中“id”是表的唯一标识符,并且每增加一行就会自动递增。
说我以某种方式设法在一行中输入一个完全不合适的ID,如下所示:
id| name
1 | Bob
2 | Sally
3 | Anne
20| John
随机行后面的行会从新ID 20继续吗? (例如,添加的下一行有id 21),还是会继续从id 3开始? (例如,添加的下一行有id 4)
之前是否发生过SQl?
答案 0 :(得分:3)
他们将继续21,这禁止重复。否则,当你达到19并且下一个插入的行应该变为20时,你会遇到问题,这已经存在了。
顺便说一下插入这样一行并不复杂。只需在INSERT
上提供特定值,而不是省略自动增量列或移交NULL
。
除非您手动设置next-autoincrement值,否则MySQL会尽一切努力确保不会发生冲突。因此,如果您插入一个较大的值,它会将此+1保存为下一个自动增量值。
答案 1 :(得分:0)
要查看mysql表的下一个自动增量是什么,请使用
SHOW TABLE STATUS LIKE'tablename';
您将有 Auto_increment 列,其中说明下一个自动增量值是什么。为了测试和好奇,我进行了以下测试:
我创建了表格如下:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`num` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
然后我进行了以下查询:
INSERT INTO `test` (`id`,`num`) VALUES (NULL,1);
INSERT INTO `test` (`id`,`num`) VALUES (NULL,2);
INSERT INTO `test` (`id`,`num`) VALUES (NULL,3);
INSERT INTO `test` (`id`,`num`) VALUES (50,4);
INSERT INTO `test` (`id`,`num`) VALUES (NULL,5);
输出如下:
mysql> select * from `test`;
+----+------+
| id | num |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 50 | 4 |
| 51 | 5 |
+----+------+
5 rows in set (0.00 sec)
这意味着,在插入自定义值后,Auto_increment也会增加。然后我又执行了一个查询:
INSERT INTO `test` (`id`,`num`) VALUES (100,6);
之后的状态如下
mysql> SHOW TABLE STATUS LIKE 'test';
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+
| test | InnoDB | 10 | Compact | 6 | 2730 | 16384 | 0 | 0 | 8388608 | 101 | 2014-02-26 22:12:32 | NULL | NULL | latin1_swedish_ci | NULL | | |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+
1 row in set (0.00 sec)
您可以看到下一个自动增量值将为101,这意味着MySQL会自动调整为插入的值。
让我知道你的想法。