我需要以格式创建发票号码:
CONSTANT_STRING/%d/mm/yyyy
mm - 月(两位数) yyyy - 年
现在,%d 是特定月份的发票编号。换句话说,这个数字每个月都要重置一次。
现在我正在检查数据库中当前月份的最高数字。然后在增加之后我将保存该行。
我需要整数才是唯一的。但是,它有时会被复制(两个用户同时保存)。
有什么建议吗?
答案 0 :(得分:2)
在字段上放置一个唯一索引,并在尝试保存第二个实例时捕获数据库错误。此外,将值推迟到最后一刻。
答案 1 :(得分:1)
一个解决方案是SELECT ... FOR UPDATE
,它会阻止该行,直到您更新它,但可能导致严重多任务应用程序死锁。
最好的方法是获取数字并在事务中递增它,然后开始工作。 这样,行就不会长时间锁定。
查看BEGIN WORK
和COMMIT
。
答案 2 :(得分:0)
使用发票表的主键(最好是INT
)或为每张发票分配一个唯一的号码,例如:通过uniqid
。
PS。如果您使用的是uniqid
,则可以通过将more_entropy
参数设置为true
来增加唯一性。
答案 3 :(得分:0)
在一个查询中设置id all。
$query = 'INSERT INTO table (invoice_number) VALUES (CONCAT(\''.CONSTANT.'\', \'/\', (SELECT COUNT(*) + 1 AS current_id FROM table WHERE MONTH(entry_date) = \''.date('n').'\' AND YEAR(entry_date) = \''.date('Y').'\'), \'/\', \''.date('m/Y').'\'))';