当前第2页 返回上一页
3 其他情况
上面那是正常情况下的取值,下面我们探讨一种特殊情况
3.1 根据分组自增长
有一种特殊情况会造成自增长字段可能不会自增长, 就是当使用 MyISAM引擎,且使用了联合索引,自增字段为非联合索引首个字段。
这种情况下,自增字段取值为MAX(auto_increment_column) + auto_increment_offset WHERE prefix=given-prefix, 怎么理解,就是计算增长值的时候,对联合索引自增长字段前面字段做一个分组,在该分组内做一个独立的增长计算。
例如对a,b,c做了联合索引,c是自增字段,那么对where a=xx and b=xx这个条件下的数据做独立的增长计算。下面是实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | db83-3306>>CREATE TABLE user_pets (
-> name varchar(16) NOT NULL,
-> id_inc INT NOT NULL AUTO_INCREMENT,
-> pets varchar(16) NOT NULL,
-> PRIMARY KEY (name, id_inc)
-> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.00 sec)
db83-3306>>INSERT INTO user_pets(name, pets) VALUES
-> ( 'chengqm' , 'dog' ),
-> ( 'chengqm' , 'cat' ),
-> ( 'chengqm' , 'fish' ),
-> ( 'yexm' , 'dog' ),
-> ( 'yexm' , 'cat' ),
-> ( 'yexm' , 'fish' );
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0
db83-3306>>SELECT * FROM user_pets;
+---------+--------+------+
| name | id_inc | pets |
+---------+--------+------+
| chengqm | 1 | dog |
| chengqm | 11 | cat |
| chengqm | 21 | fish |
| yexm | 1 | dog |
| yexm | 11 | cat |
| yexm | 21 | fish |
+---------+--------+------+
6 rows in set (0.00 sec)
|
从结果可以看出,在name
字段相同的字段内,会有独立的自增长计算,这种计算方式在做group by
的时候非常方便。
以上就是MySQL自增字段取值的详细介绍(附代码)的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
在创建交叉表查询时,列标题字段的值显示在交叉表的位置是什么?
navicat连接mysql出现1045错误的解决方法是什么
mysql数据库之数据表操作ddl数据定义语言
如何利用mysql数据库命令创建和查看分区情况
我所理解的mysql五:锁及加锁规则
mysql模糊查询语句整理集合
mysql能装两个吗?
详解mysql中order by多字段排序规则
mysql怎么存数组
mysql 如何去掉毫秒值
更多相关阅读请进入《数据库》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » MySQL自增字段取值的详细介绍(附代码)