首页 文章

本月的唯一凭证编号

提问于
浏览
1

我需要以格式创建发票号码:

CONSTANT_STRING/%d/mm/yyyy

mm - 月(两位数)yyyy - 年

现在, %d 是特定月份的发票编号 . 换句话说,这个数字每个月都要重置一次 .

现在我正在检查数据库中当前月份的最高数字 . 然后在增加之后我保存行 .

我需要整数才是唯一的 . 但是,有时会发生重复(两个用户同时保存) .

有什么建议?

4 回答

  • 2

    在字段上放置一个唯一索引,并在尝试保存第二个实例时捕获数据库错误 . 此外,推迟获取值直到最后一刻 .

  • 1

    一个解决方案是 SELECT ... FOR UPDATE ,它会阻止该行直到您更新它,但可能导致使用serios多任务应用程序死锁 .

    最好的方法是获取数字并在事务中递增它,然后开始工作 . 这样,行不会长时间锁定 .

    查看 BEGIN WORKCOMMIT .

  • 0

    使用发票表的主键(最好是 INT )或为每张发票分配一个唯一的号码,例如:通过uniqid .

    PS . 如果您使用的是 uniqid ,则可以通过将 more_entropy 参数设置为 true 来增加唯一性 .

  • 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').'\'))';
    

相关问题