我有一个数据库表,其中包含复合主键(id_a, id_b)
。这不是他们实际上所说的,但我正在简化这个问题。 id_a
是外键,id_b
只是一个整数,“序列号”可以这么说。我不能只使id_b
auto_incrementing,因为它不允许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
的并发插入时,不需要锁定整个表。
我通过SQLAlchemy(使用ORM)通过Python访问这个数据库,虽然我怀疑这个问题可以在客户端(纯MySQL)方面得到解决。
答案 0 :(得分:1)
SELECT coalesce(max(ID_B),0)+1
FROM yourTable
WHERE ID_A = '1'
但是,如果没有锁定,则存在获取重复ID_B值的风险,因此您必须处理insert语句上的重复键错误。代码中的“重试”会自动进行一定次数或错误,并强制用户再次尝试。