假设我有一个包含这些字段的表顺序:
最初使用payment_date和invoice_number创建带有NULL值的订单,因此我可以拥有以下行:
ID | payment_date | invoice_number
1 | NULL | NULL
2 | 03/10/11 | 1
3 | 03/14/11 | 2
4 | NULL | NULL
5 | NULL | NULL
Run Code Online (Sandbox Code Playgroud)
我想要做的是当我更新一行以填充payment_date时,我需要使用第一个可用的invoice_number更新invoice_number.例如,如果我更新第五行,则invoice_number将为"3".
第一种方法是为invoice_number选择MAX()值,然后将1加到该值,但这会产生并发问题,对吧?
您认为什么是最佳解决方案?
提前致谢!
如果你做这样的事情:
update table
set
column = 'something'
column = (select max(id) + 1 from table)
where id = 123
Run Code Online (Sandbox Code Playgroud)
您也不会遇到并发问题.当您执行此更新时,表将被锁定,因此在查询运行时,没有其他人可以更新它.