我有一个基于php浏览器的应用程序,用于医院管理系统。情况是有3个部门可以付款,即。接待,实验室和药房。上面每个位置的工人是不同的,他们的输入也是如此。这些部门中的每一个都将收据信息发送到一个名为receipt的单个表,因此生成一个ID,该ID是表的最后一个ID之后的下一个ID。数据将根据此ID(根据表中的最后一个ID生成)发送回同一部门。
现在,当两个部门同时单击“提交”按钮时,会出现问题。这两个人都获得相同的ID,因为那时两个查询的最后一个ID是相同的。这将导致存储和向部门发回数据的问题。
现在有解决方案吗?我被告知触发器会解决它,但我不想去那里并保持简单。我想到随机ID生成,但医院人员想要连续ID,因为它会出现在收据上。 还要考虑到系统不应该(显着)减速。
编辑:哎呀似乎这里有更多的信息,因此自动增量不起作用。 有3列需要考虑,即。 id(Pkey),receiptno和debitno。 现在,如果此人同时付款,则id和receiptno将一起增加一个,debitno将为空。但是如果他要稍后付款,那么他的receiptno将为NULL,而他的ID和debitno将从输入的最后一个ID增加一。 因此,没有必要填写receno(即将被发送回部门人员),因此自动增量将无法正常工作? 再次感谢你们的解决方案esp autoincrement。答案 0 :(得分:9)
对ID列使用AUTO_INCREMENT
(MySQL)字段,以便数据库负责唯一ID生成。其他数据库系统具有类似的领域,例PostgreSQL中的serial
字段类型。
答案 1 :(得分:1)
我阅读了您的问题的更新,您应该真正分解该数据库。我理解这一点 - 您需要创建一个具有唯一ID的新订单。但订单可能不会立即支付,因此在支付订单时,还需要一个唯一的收据编号。您可以生成一个随机数用于接收,使该字段唯一,而while-no-error更新数据库中的字段。这非常令人讨厌。
您最好为付款创建新表。因此,您的订单表将存储自动增加的订单ID(根据TheifMaster答案),以及其他数据,如userID,customerID,日期,描述等。然后您将有一个付款/交易表,它将存储paymentID(自动增量), orderID(与订单表相关),付款日期,状态,金额等等。
这是跟踪付款交易的首选方法。既然您知道从哪里开始,那么您应该对如何实际实现这一点进行一些研究。我们使用关系数据库是有原因的!