MySQL的auto_increment(整型)的限制是多少?
MySQL是一种常用的关系型数据库管理系统,auto_increment是MySQL中用于自增列值的关键字,经常用于生成表中某一列的唯一标识符。那么,MySQL的auto_increment(整型)到底有哪些限制呢?
阅读更多:MySQL 教程
限制一:最大值
MySQL 5.7版本之前的auto_increment整形列所能存储的最大值为2^32-1,即4294967295。在这个值之后,auto_increment值会从1重新开始计数。
示例代码:
CREATE TABLE `limitDemo` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 插入数据
INSERT INTO `limitDemo` (`name`) VALUES ('Tom');
限制二:类型
auto_increment只能用于整型列,如果表中存在其他类型的列,比如字符串列或者日期列,就无法使用auto_increment属性生成唯一标识符。
示例代码:
CREATE TABLE `typeDemo` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '',
`date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 插入数据
INSERT INTO `typeDemo` (`name`,`date`) VALUES ('Tom','2022-08-01');
限制三:具有唯一性
auto_increment生成的数值必须是唯一的,并且不能为NULL,否则会导致插入数据失败。
示例代码:
CREATE TABLE `uniqueDemo` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 插入数据,将会成功
INSERT INTO `uniqueDemo` (`name`) VALUES ('Tom');
-- 再次插入相同的数据,将会失败
INSERT INTO `uniqueDemo` (`name`) VALUES ('Tom');
限制四:非负数
auto_increment生成的数值必须为非负数,不能为负数,否则会导致插入数据失败。
示例代码:
CREATE TABLE `nonNegativeDemo` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`num` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 尝试插入负数,将会失败
INSERT INTO `nonNegativeDemo` (`num`) VALUES (-1);
限制五:不可重置
auto_increment生成的数值是递增的,不能将当前已生成的自增数值进行重置,否则会导致生成的自增数值与已生成的数值冲突。
示例代码:
CREATE TABLE `notResetDemo` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 插入数据
INSERT INTO `notResetDemo` (`name`) VALUES ('Tom');
-- 重置自增数值,将会失败
ALTER TABLE `notResetDemo` AUTO_INCREMENT = 1;
结论
综上所述,MySQL的auto_increment(整型)有以下限制:
- 最大值为2^32-1,即4294967295;
- 只能用于整型列;
- 生成的数值必须唯一,并且不能为NULL;
- 生成的数值必须为非负数;
- 不能重置已生成的自增数值。