在网上查资料的时候,偶然看到一篇文章,讲的是mysql自增联合主键的问题。 文章提到:
当多列设置为联合主键时,属性列不会盲目增加。
相反,它匹配其他主键的列。
例如:id和vid是联合主键,vid是auto,
id为1时,vid自动增加;
当id变为2时,vid重置为1并开始从1开始增长。
但是我按照这个方法测试的时候,无法设置联合主键vid自动增加?
执行命令: ALTER TABLE `` `vid` `vid` int(11) not null;
错误消息:ERROR 1075 (42000):表; 只能有一辆汽车,而且必须是一把钥匙。
当时我就很疑惑,一开始以为是因为数据库有数据,后来发现是因为我用的存储引擎不对。 对于类型的字段,索引必须只包含该字段,但在表中,可以与其他字段建立联合索引。
然后我又创建了两个表进行测试。 两个表的结构有以下三个字段:id、vid、name。 id 和 vid 是联合主键,两个存储引擎都是。 不同的是:表的id自动增长; 它的视频会自动增长。
插入一些数据后,我发现:
表id只会自行增加,不会根据vid的值恢复为1;
表vid会根据id值的变化恢复为1。
也就是说,如果联合主键的第一列(id)自增,则只会自增,不会根据第二列(vid)的值恢复为1。
只有在联合主键(vid)的第二列才会出现预期的效果。 根据第一列的值的变化,只会恢复为1。结论:
1、使用mysql联合主键自增,需要使用它作为存储引擎。
2、使用联合主键自增时,自增键不能是主键最左边的键。