在 MySQL 中实现辅助主键列的自动递增
在维护数据完整性至关重要的情况下,使用两列作为主键可能是合适的选择方法。但是,当尝试根据其中一列中的特定值对另一列设置自动增量时,可能会出现挑战。
对于 MySQL 用户,解决此问题时需要考虑两个选项:
使用带有 AUTO_INCRMENT 的 MyISAM 引擎
对于带有 MyISAM 引擎的表,您可以在辅助表上利用 AUTO_INCREMENT 属性多列索引中的列。辅助列的自动增量值计算如下:
1 | MAX(auto_increment_column) + 1 WHERE prefix=given-prefix
|
登录后复制
此技术允许您根据前缀列中的值将数据分组为有序集合。
例如:
考虑下面名为 mytable 的表,它有两个主键列:database_id 和table_id:
1 2 3 4 5 6 | CREATE TABLE mytable (
database_id MEDIUMINT NOT NULL,
table_id MEDIUMINT NOT NULL AUTO_INCREMENT,
other_column CHAR(30) NOT NULL,
PRIMARY KEY (database_id,table_id)
) ENGINE=MyISAM;
|
登录后复制
将数据插入 mytable 会自动为每个唯一的 database_id 值增加 table_id:
1 2 | INSERT INTO mytable (database_id, other_column) VALUES
(1, 'Foo' ),(1, 'Bar' ),(2, 'Baz' ),(1, 'Bam' ),(2, 'Zam' ),(3, 'Zoo' );
|
登录后复制
当您从表中检索数据时,行将根据以下顺序排序database_id 和 table_id 列:
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT * FROM mytable ORDER BY database_id,table_id;
+----------+-------------+--------------+
| table_id | database_id | other_column |
+----------+-------------+--------------+
| 1 | 1 | Foo |
| 2 | 1 | Bar |
| 3 | 1 | Bam |
| 1 | 2 | Baz |
| 2 | 2 | Zam |
| 1 | 3 | Zoo |
+----------+-------------+--------------+
|
登录后复制
以上是MySQL中如何实现辅助主键列自增?的详细内容。更多信息请关注PHP中文网其他相关文章!