您的位置:首页 > 数据库 > MySQL

mysql auto_increment 初始值从0开始

2016-06-27 18:44 615 查看




创建一张新表指定一个较大的自增值,想要写入id为0的记录该如何处理?

解决办法:
设置线程级别的参数"SET sql_mode='NO_AUTO_VALUE_ON_ZERO';" 

root@test11:54:45>SETsql_mode='NO_AUTO_VALUE_ON_ZERO'; 
Query OK, 0rows affected (0.00 sec)

root@test11:58:23>insert into sg_app(id, a_class, app_name,gmt_create, gmt_modified) values(0, 'a_class', 'name', now(),now());
Query OK, 1row affected (0.12 sec)

root@test11:58:33>select * from sg_app;
+--------+---------+---------------------+---------------------+----------+
| id    | a_class | gmt_create        | gmt_modified      | app_name |
+--------+---------+---------------------+---------------------+----------+
|     0 | a_class| 2011-12-14 23:58:33 | 2011-12-14 23:58:33 | name    |
|     1 | a_class| 2011-12-14 23:54:36 | 2011-12-14 23:54:36 | name    |
| 124069 |a_class | 2011-12-14 23:53:58 | 2011-12-14 23:53:58 | name    |
+--------+---------+---------------------+---------------------+----------+
3 rows inset (0.00 sec)

root@test11:58:39>show create table sg_app\G
***************************1. row ***************************
      Table:sg_app
CreateTable: CREATE TABLE `sg_app` (
  `id`bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `a_class`varchar(128) NOT NULL COMMENT '一级类别名称',
 `gmt_create` datetime NOT NULL COMMENT '记录创建时间',
 `gmt_modified` datetime NOT NULL COMMENT '记录最后修改时间',
  `app_name`varchar(200) DEFAULT NULL COMMENT '应用名称,用于UI显示',
  PRIMARYKEY (`id`)
)ENGINE=InnoDB AUTO_INCREMENT=124070 DEFAULT CHARSET=gbkCOMMENT='应用表'
1 row in set(0.00 sec)

原因分析:
mysql对于设置了自增属性auto_increment的字段自增值是从1开始的,写入0会被当做null值处理从而写入当前最大值的下一个值(即表定义中auto_increment的值);

如果需要修改自增值的起始位置可以通过"altertabletable_name AUTO_INCREMENT=xxxx;"进行修改,但是这个值必须比当前表内数据的最大值要大,否则会修改不生效;
如果需要将自增值从0而不是1开始,可以通过设置线程级别的参数"SET sql_mode='NO_AUTO_VALUE_ON_ZERO';"来实现

原文参考:
http://blog.csdn.net/nova_pegasus/article/details/6538984
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: