我有一个数据库表,它有一个复合主键(id_a, id_b)
。这不是他们的实际名称,但我简化了这个问题。id_a
是一个外键,id_b
只是一个整数,可以说是“序列号”。我不能让id_b
自动递增,因为InnoDB存储引擎不允许这样做(因为它不是复合键中的第一个字段)。在
我希望使用id_a
对这些对象进行“分组”,例如:
id_a id_b
----------------
1 1
1 2
2 1
2 2
2 3
插入带有(id_a=1
)的行的结果应该自动设置id_b=3
。我希望避免使用数据库锁,特别是当完全允许使用不同的id_a
的并发插入时,不需要锁定整个表。在
我通过Python通过SQLAlchemy(使用ORM)访问这个数据库,尽管我怀疑这个问题在客户端(纯MySQL)方面可以得到不可知的答案。在
SELECT coalesce(max(ID_B),0)+1 FROM yourTable WHERE ID_A = '1'
但是,如果没有锁定,就有可能获得重复的ID_B值,因此必须处理insert语句上的重复键错误。要么在代码中自动“重试”一段时间,要么出错并强制用户再试一次。在
相关问题 更多 >
编程相关推荐