结论:
- 默认的 int 类型,取值范围是 -2147483648-2147483647 之间,而 unsigned 的取值范围是 0-4294967295 之间。
- 默认的 int 类型,允许插入负数,unsigned 设置后,无法插入负数。
AUTO_INCREMENT
CREATE TABLE `test01` (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(60) DEFAULT ''
) ENGINE=InnoDB AUTO_INCREMENT=2147483647 DEFAULT CHARSET=utf8mb4 COMMENT='test01';
INSERT INTO test01(name) VALUES ('test 001');
成功插入数据后,如下图所示。AUTO_INCREMENT 的值为初始值。
select last_insert_id();
此时id的值为2147483648。
INSERT INTO test01(name) VALUES ('test 002');
如果以上语句执行成功,则id的值就变为2147483649。但是实际会报错。
因为id不能再增加了,出现id重复。
int
主键作为id可以为负,请参考https://www.cnblogs.com/gaofangye/p/13345489.html
ID 自增越界时的解决方案
方案1) 将int修改为int(11) unsigned
ALTER TABLE test01 MODIFY COLUMN `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT;
方案2)将int修改为bigint (支持8个字节)