网上查看资料的时候,偶然看到一篇文章谈到mysql联合主键自增长的问题,该文章提到:
当多列被设为联合主键时,auto_increment属性得列并不是自顾自得一味的增长。
而是配合其他主键的列。
例如:
而是配合其他主键的列。
例如:
id和vid为联合主键,vid为auto auto_increment,
当id为1时,vid自动增长;
当id改变为2时,vid重新归1,从1开始增长。
当id为1时,vid自动增长;
当id改变为2时,vid重新归1,从1开始增长。
但是我按照该方法测试的时候,却无法设置联合主键vid自增长?
执行命令:ALTER TABLE `test_table` CHANGE `vid` `vid` int(11) not null auto_increment;
提示错误:ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key。
当时百思不得其解,开始以为是数据库有数据的原因,后来才发现是因为我用的存储引擎是InnoDB的原因。对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
然后我又建立2张表test1table,test2table用来测试,2张表的结构都是如下三个字段:id,vid,name。id,vid为联合主键,存储引擎都是MyISAM。
不同的是:test1table表是id自增长;test2table是vid自增长。
插入一些数据后发现:
test1table表id只会自增,不会根据vid的值恢复到1;
而test2table表vid则会根据id的值的变化,而恢复到1。
即如果是联合主键第一列(id)自增时,则只会自己自增,不会根据第二列(vid)的值恢复到1。
只有在联合主键第二列(vid),才会出现我们预期的效果,根据第一列的值的变化会将只恢复到1。
插入一些数据后发现:
test1table表id只会自增,不会根据vid的值恢复到1;
而test2table表vid则会根据id的值的变化,而恢复到1。
即如果是联合主键第一列(id)自增时,则只会自己自增,不会根据第二列(vid)的值恢复到1。
只有在联合主键第二列(vid),才会出现我们预期的效果,根据第一列的值的变化会将只恢复到1。
结论:
1、要使用mysql联合主键自增,需使用MyISAM作为存储引擎。
2、使用联合主键自增的时候,自增键不能是主键最左的键。
转自:http://zhuchao.org/mysql%E8%81%94%E5%90%88%E4%B8%BB%E9%94%AE%E8%87%AA%E5%A2%9E%E9%97%AE%E9%A2%98-24
相关推荐
在 Mycat 中,主键自增是数据库操作中的一个重要环节,对于保证数据的一致性和完整性具有关键作用。本文将深入探讨 Mycat 中主键自增的实现原理、配置以及常见问题。 1. Mycat 主键生成策略 Mycat 支持多种主键...
GenerationType.IDENTITY 是一种常用的主键策略,它使用数据库的自增字段来生成主键。在使用这个策略时,JPA会将主键的生成工作交由数据库完成,hibernate 不会介入。这意味着,数据库将负责生成主键,而不是...
- 如果使用MySQL数据库,则推荐使用自增`INT`类型作为主键;而Oracle数据库建议使用`UUID`作为主键。 - 对于金额字段,若需要进行计算操作,则使用`NUMBER`类型存储整数,计算完毕后再将结果除以100以获取实际数值。...
MySQL数据库设计规范是确保数据库高效、稳定和易于维护的关键因素。以下是一些核心要点: **一、表设计规范** 1. **命名规范**:库名、表名、字段名应使用小写字母,并以下划线(_)分隔,如`db_name`、`table_name`...
MySQL数据库设计SQL规范是数据库设计中的重要组成部分,它涉及到数据库的命名规则、基本设计原则、索引优化以及字段设计等多个方面。以下是对这些规范的详细解释: 1. **命名规范**: - 库名、表名、字段名应当...
从上面的内容中,我们可以了解到创建表、联合查询、插入数据以及如何在PHP中操作MySQL数据库的基本知识点。这些知识点在实际的数据库操作和Web开发中十分常见,并且对于数据库设计和开发具有基础性的作用。
总结来说,PHP操作MySQL数据库进行分表是解决大数据量问题的有效手段。选择合适的分表策略(如ID取模或MD5值分表),并结合适当的PHP代码,可以显著提升数据库性能和系统的整体稳定性。在实践中,还应注意数据库设计...
2. 创建MySQL数据库和表: 在PHP中,你可以使用SQL语句通过连接对象创建数据库和表。例如,创建一个名为`users`的表: ```php $sql = "CREATE TABLE users ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, ...
1. **数据库自增主键可能遇到的问题**: - 主键冲突:如果数据导入或更新过程中出现错误,可能导致主键重复。 - 空间限制:自增主键通常是整数类型,当达到最大值时,不能再自增。 - 分区和分表:在分布式系统中...
若无自增需求,主键可以是联合主键,但需谨慎使用。不强制使用外键,因为它们可能影响性能。 再者,字段规范包括了字段的命名和类型选择,字段名应清晰,类型应适当,如状态字段应注明可能的值。对于字段数量,应...
遵循“保小不保大”的原则,优先选择占用空间小的字段类型,如使用自增整数作为主键,以节省存储空间并提高查询速度。同时,对于非关键字段,也要根据实际需求选择合适的数据类型,如MD5值可使用CHAR(32)。 对于大...
mysql 总结........................................................................................................................................6 1.1 数据库的种类.......................................
例如,创建一个包含`id`、`name`和`password`字段的`user1`表,并设置联合主键: ```sql CREATE TABLE user1 ( id INT, name VARCHAR(20), password VARCHAR(20), PRIMARY KEY (id, name) ); ``` - **自增...
9. **全局唯一数字序列**:提供了自动生成全局唯一数字序列的功能,支持主键自增(auto_increment)等应用场景。 10. **并发型只读实例**:通过物理资源和链路隔离的方式,处理高并发查询,保障在线业务链路的稳定性...
在MySQL数据库中,`UNION` 是一种用于合并多个`SELECT`语句结果集的工具。这个操作的主要目的是将不同的查询结果集拼接在一起,形成一个新的结果集,它有效地消除了重复行。在本例中,我们将深入探讨`UNION`的使用、...
MySQL多实例是指在同一台物理机器上安装多个独立运行的MySQL数据库服务。这种方式可以在资源有限的情况下实现更高的资源利用率和灵活性。 ##### 1.2.2 MySQL的多实例结构图 多实例通常涉及为每个实例配置不同的...
MySQL 是一种广泛使用的开源关系型数据库管理系统,面试中常常会涉及多个方面的问题,包括存储引擎、索引原理、事务处理、数据库设计以及SQL优化等。以下是对这些知识点的详细解释: 1. **MyISAM与InnoDB的区别**:...
下面只是目标目录 01 开篇词.pdf ...25 主键是否需要设置为自增.pdf 26 MySQL是否需要开启查询缓存.pdf 27 使用读写分离需要注意哪些?.pdf 28 哪些情况需要考虑分库分表?.pdf 加餐:答疑篇(一).pdf
下面只是目标目录 01 开篇词.pdf ...25 主键是否需要设置为自增.pdf 26 MySQL是否需要开启查询缓存.pdf 27 使用读写分离需要注意哪些?.pdf 28 哪些情况需要考虑分库分表?.pdf 加餐:答疑篇(一).pdf