mysql - 如何实现高效的数据库驱动的工单/协议(protocol)控制系统?

标签 mysql database wampserver

场景:WAMP 服务器、InnoDB 表、自动递增唯一 ID 字段 [INT(10)]、100 多个并发 SQL 请求。如果需要,也应使用 VB.Net。

我的数据库有一个自动递增字段,用于为每个存储的新信息(服务订单)生成一个唯一票/协议(protocol)号。

问题是这个数字每年必须重置。 IE。它从 01/01/2012 00:00:00 的 000001/12 开始到最大值 999999/12 然后在 01/01/2013 00:00:00它必须重新开始到 000001/13

显然,使用某种算法应该很容易完成,但是,我正试图找到一种更有效的方法来做到这一点。考虑:

  1. 它必须(?)使用自动递增,因为数据库有一定的并发性(+100)。

  2. 每张票必须唯一。所以 2012 年的 000001 不等于 2013 年的 000001

  3. 它必须是自动的。 (无需人工交互即可进行重置或其他操作)

  4. 它应该相当高效。 (监视程序应该每天检查数据库(?),但这似乎不是最好的解决方案,因为它将“失败”364 次,而只有一次成功。

我能想到的“最佳”方法是使用年份存储票号,例如:

12000001 - 12999999(无论如何都不应该达到 999.999)

然后 watch 程序应在 2013 年 1 月 1 日将自动递增字段设置为 13000000

有什么建议吗?

PS:感谢阅读...;)

最佳答案

因此,为了进一步引用,我采用了以下解决方案:

我确实在数据库上创建了 n 个表(每年一个),只有一个自动递增字段负责生成每年的唯一 ID。

因此,考虑到事件 日期,新的插入操作会被插入到相应的表中。之后,该算法使用 last_inseted_id() 将该值存储到主表中,格式为 000001/12。 (票/年)

那是因为每年都必须有自己的计数器,因为即使当前日期已经是 2013 年,也会插入 2012 年的事件。

这样事件应该是可追溯的,不需要重置,而且实现起来很简单。

插入示例代码:

$eventdate="2012-11-30";
$eventyear="2012";
$sql = "INSERT INTO tbl$eventyear VALUES (NULL)";
mysql_query ($sql);
$sql = "LAST_INSERT_ID()";
$row = mysql_fetch_assoc(mysql_query($sql));
$eventID = $row(0)
$sql = "INSERT INTO tblMain VALUES ('$eventID/$eventYear', ... ";
mysql_query($sql)

关于mysql - 如何实现高效的数据库驱动的工单/协议(protocol)控制系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11103374/

相关文章:

php - 我的循环显示结果值时遇到问题

php - 脚本在实时服务器上运行良好但在 wamp 上运行不正常

apache - 等待 LocalHost 加载永远不会结束

database - 如何表示数据库中两个项目之间的关系?

mysql - 复制 mysql 表的文件夹可以重用吗?

mysql - 将两个表组合在一起以获得所有列,但我需要单独的数据行而不是一行

文本中的 MySQL TRIM 空格

java - 尝试将定义为 PreloadedImage 的图像写入 MySQL 时出错

php - Mysqli 多行插入,简单的多插入查询

mysql - 在另一个 View Controller 中使用 Xcode 函数