开发者社区> 问答> 正文

mysql两列主键,具有自动增量

我有多个结构相同的数据库,有时会在其中复制数据。为了保持数据完整性,我使用两列作为主键。一个是数据库ID,它链接到包含有关每个数据库的信息的表。另一个是表键。它不是唯一的,因为它可能有多个行,且此值相同,但database_id列中的值不同。

我打算将这两列变成一个联合主键。但是,我也想将表键设置为自动递增-但基于database_id列。

EG,使用以下数据:

table_id database_id other_columns 1 1 2 1 3 1 1 2 2 2 如果我要添加包含dabase_id为1的数据,那么我希望table_id被自动设置为4。如果dabase_id被输入为2,那么我希望table_id被自动设置为3。依此类推。

在MySql中实现此目标的最佳方法是什么。

展开
收起
保持可爱mmm 2020-05-11 11:23:02 378 0
1 条回答
写回答
取消 提交回答
  • 如果您使用的是myisam

    http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

    对于MyISAM和BDB表,可以在多列索引的第二列上指定AUTO_INCREMENT。在这种情况下,将为AUTO_INCREMENT列生成的值计算为MAX(auto_increment_column)+ 1 WHERE prefix = given-prefix。当您要将数据放入有序组中时,这很有用。

    CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ) ENGINE=MyISAM;

    INSERT INTO animals (grp,name) VALUES ('mammal','dog'),('mammal','cat'), ('bird','penguin'),('fish','lax'),('mammal','whale'), ('bird','ostrich');

    SELECT * FROM animals ORDER BY grp,id;

    Which returns:

    +--------+----+---------+ | grp | id | name | +--------+----+---------+ | fish | 1 | lax | | mammal | 1 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+ 例如:

    mysql> CREATE TABLE mytable ( -> table_id MEDIUMINT NOT NULL AUTO_INCREMENT, -> database_id MEDIUMINT NOT NULL, -> other_column CHAR(30) NOT NULL, -> PRIMARY KEY (database_id,table_id) -> ) ENGINE=MyISAM; Query OK, 0 rows affected (0.03 sec)

    mysql> INSERT INTO mytable (database_id, other_column) VALUES -> (1,'Foo'),(1,'Bar'),(2,'Baz'),(1,'Bam'),(2,'Zam'),(3,'Zoo'); Query OK, 6 rows affected (0.00 sec) Records: 6 Duplicates: 0 Warnings: 0

    mysql> 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 | +----------+-------------+--------------+ 6 rows in set (0.00 sec)来源:stack overflow

    2020-05-11 11:23:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像