关于sql_mode对自增的一个影响
来源:互联网 发布:人性的枷锁知乎 编辑:程序博客网 时间:2024/06/05 20:20
今天碰巧遇到一个以前忽视的问题,就是sql_mode对自增列值的影响,这里做个简单的测试:
(user:root time: 11:30)[db: lidan]show variables like '%mode%';
+--------------------------+---------------------+
| Variable_name | Value |
+--------------------------+---------------------+
| innodb_autoinc_lock_mode | 1 |
| innodb_strict_mode | OFF |
| pseudo_slave_mode | OFF |
| slave_exec_mode | STRICT |
| sql_mode | STRICT_TRANS_TABLES |
+--------------------------+---------------------+
当前sql_mode 为STRICT_TRANS_TABLES
现在创建一张表自增列为id 如下:
(user:root time: 11:23)[db: lidan]create table a(id int auto_increment primary key);
Query OK, 0 rows affected (0.12 sec)
(user:root time: 11:24)[db: lidan]insert into a values(-1);
Query OK, 1 row affected (0.05 sec)
(user:root time: 11:24)[db: lidan]insert into a values(0);
Query OK, 1 row affected (0.05 sec)
然后查询结果:
(user:root time: 11:25)[db: lidan]select * from a;
+----+
| id |
+----+
| -1 |
| 1 |
+----+
发现插入负数不会触发自增长,而插入0则会,但是自增长又是从1开始的,所以这时候会出现上面的结果。
我们是从oracle -->mysql数据迁移的时候因为这个导致mysql的数据id都串了1位
解决方法:
设置会话sql_mode 为
set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_VALUE_ON_ZERO';
再次测试:
(user:root time: 11:31)[db: lidan]insert into a values(0);
Query OK, 1 row affected (0.04 sec)
(user:root time: 11:31)[db: lidan]insert into a values(-1);
Query OK, 1 row affected (0.05 sec)
(user:root time: 11:31)[db: lidan]select * from a;
+----+
| id |
+----+
| -1 |
| 0 |
+----+
这样就可以。
吐槽:mysql的各种坑,每天都让人提心吊胆。
- 关于sql_mode对自增的一个影响
- mysql的sql_mode(SQL模式)调整对数据迁移的影响和处理
- 关于sql_mode的设置问题
- 关于mysql的sql_mode的问题
- 关于RichEdit对DoModal()的影响
- 关于堆栈对齐对性能的影响
- 关于IOPS指标对性能的影响
- 关于多线程对程序执行时间的影响
- 24 迭代器分类对算法的影响(学自Boolean)
- 自增符号++(自减符号--)带来的部分影响
- 关于URL的话题与对网站的影响
- 关于5.0的主题对hint颜色值的影响
- 转载一个对我影响很大的文章
- 转载一个对我影响很大的文章 (2)
- 一个路人对你有多大的影响
- 关于 Windows XP SP2 对 raw socket 的影响
- 关于extern “C” 对函数重载的影响
- 关于connection.setAutoCommit(false)对查询的影响
- NYOJ 205 求余数
- Android中的长度单位详解(dp、sp、px、in、pt、mm)
- 访问硬件寄存器的位域值
- 全排列以及相关算法解析
- 【C#功能实现】c#程序为PDF文件填写表单内容
- 关于sql_mode对自增的一个影响
- PMD
- 清理无用的CSS比较有用的几个工具
- 新建网站与新建Asp.Net Web 应用程序的区别
- JBoss 系列九十一:JBoss 构建的高可用集群环境使用 Apache 的 mod_rewrite 转发根路径到特定应用
- android4.0屏蔽HOME键的方法
- crontab
- 手机照片丢失怎么才能恢复
- mysql函数游标