正在创建唯一的计费标识符


Creating unique billing identifier

我想创建一个唯一的计费标识符/号码。我希望它是一个常量字符串、年份和一个附加数字的组合。例如"ABC-2013-10001"。我如何才能做到这一点,从而确保计费标识符是唯一的?我想维护一个billing_id,就像一个主键一样,它是唯一的和自动递增的。然后,我只需要选择max(billing_id)来获得最后一个,并在其上添加1和前缀"ABC-2013",然后将其插入表中。问题是这是一个三步走的方法。选择、做某事、插入。我担心可能会发生这样的情况,当两个用户同时这样做时,每个用户都选择相同的号码,所以从技术上讲,他们插入相同的标识符。是我错了,反应过度了,还是这种生成独特id的行为很常见?我应该采取不同的方法吗?

编辑

好吧,所以我做了这样的事情:

$data = array(
    'billing_identifier' => 'law-'.$year."-".$this->db->insert_id()
);
// inserting into billing_identifiers
    $this->db->insert('billing_identifiers', $data);
    $bill_id = $this->db->insert_id();

但是$this->db->insert_id()一开始是0,这是有道理的,在调用insert函数后,它会得到最后一个id。我有办法一次完成吗?

有一个MySQL函数用于获取最后插入的ID,还有一个函数用于填充字符串,例如零:

CONCAT(
    'ABC-2013-',
    LPAD(
         LAST_INSERT_ID()+1,
         6,
         '0'
    )
)

LAST_INSERT_ID()+1是当前正在插入的id。

LPAD(str, length, pad)在新ID前面加零。

CONCAT(..., ...)将多个值组合为一个字符串。

将其插入计费标识符列。

只要使用这个,它就会给你主id。

<?php
$con=mysqli_connect("127.0.0.1","user","pass","db");
//query here
$id = mysqli_insert_id($con);
$bill_id = 'ABC-2013-'. $id;
?>

因为"不符合问题"而更改。。。

您也可以使用

strtime(d/y/m) time object