我有一张如下所示的表格
| id | name | doc_no |
|:-----------|------------:|:------------:|
| 1 | abc | D11710001
| 2 | efg | D21710001
| 3 | hij | D31710001
| 4 | klm | D41710001
| 5 | nop | D51710001
| 1 | qrs | D11710002
我想基于给定的id生成唯一ID。例如,当我将项目存储在此表中时,它将根据表格的id生成唯一ID。
注意:此表中的id是外键。用户可以手动将doc no修改为自己的格式。
ID格式 - D' id' '一年' '当月' 0001(自动增量)
如何编写sql以在存储数据期间生成唯一ID?
答案 0 :(得分:1)
继续@strawberry的评论我可能会建议不将ID存储在您的数据库中。除了在插入记录的同时访问自动增量ID这一事实可能很棘手,存储此生成的ID将复制已存储在表中其他位置的信息。您可以在查询时生成ID,而不是存储您的ID,例如
SELECT
id, name, doc_no,
CONCAT('D', id, STR_TO_DATE(date, '%Y-%m'), auto_id) AS unique_id
FROM yourTable;
这假定您将每个记录的插入日期存储在名为date
的日期列中。它还假定您的表有一个名为auto_id
的自动增量列。请注意,存储插入日期可能对您有用,例如:如果您想根据日期或时间在表格中搜索数据。
答案 1 :(得分:0)
您可以创建触发器并更新列,也可以在INSERT
insert into <YOUR_TABLE>(NAME,DOC_NO) values('hello','dummy');
update <YOUR_TABLE> set DOC_NO=CONCAT('D',
CAST(YEAR(NOW()) AS CHAR(4)),
CAST(MONTH(NOW()) AS CHAR(4)),
LAST_INSERT_ID())
WHERE id=LAST_INSERT_ID();
请注意,如上所述SQL可能会导致竞争条件,同时服务器会收到多个请求。
@Tim Biegeleisen有一个很好的观点,因为当你SELECT
数据时构建id会更好。