UPDATE上的MySQL自动增量字段(最初为NULL)

时间:2011-03-14 18:46:15

标签: mysql

假设我有一个包含这些字段的表顺序:

  • ID(PK和常规auto_increment)
  • PAYMENT_DATE
  • INVOICE_NUMBER

最初订单是使用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

我想要做的是当我更新一行以填充payment_date时,我需要使用第一个可用的invoice_number更新invoice_number。例如,如果我更新第五行,则invoice_number将为“3”。

第一种方法是为invoice_number选择MAX()值,然后将1加到该值,但这会产生并发问题,对吗?

您认为最佳解决方案是什么?

提前致谢!

2 个答案:

答案 0 :(得分:6)

如果您想避免并发问题,可以在transactiontrigger中执行此操作。

如果你这样做:

update table
set 
    column = 'something'
    column = (select max(id) + 1 from table)
where id = 123

您也不会遇到并发问题。当您执行此更新时,表将被锁定,因此在查询运行时,没有其他人可以更新它。

答案 1 :(得分:3)

你可以做“选择MAX()” - 解决方案,如果你使用SELECT FOR UPDATE - dbms将处理并发问题。 SELECT FOR UPDATE

相关问题