0

我有一个 Mysql 表。

  • 请求 - Request_id、Request_message

用户在 HTML 表单中填写 Request_message 后,用户单击提交按钮。我将从 requests 表中生成一个请求 ID,然后添加该行。(表中有两次命中,一次用于获取最后一个 request_id,一次用于将行添加到表中)。我想避免这种情况。

此外,假设同时有 7-8 个用户点击提交按钮,他们将从表中获得相同的最后一个 request_id。他们会将 1 添加到最后一个 request_id,并尝试添加该行。除了一个都得到主键约束错误..如何避免这种情况?

请提供您的建议。

谢谢德维什

4

3 回答 3

2

使用AUTO_INCREMENT作为主键。

编辑: 如果您不对列使用整数类型,那么另一种解决方案是使用行级锁定。

于 2012-05-28T07:06:59.963 回答
0

使用 sp 在表中插入记录。

或者

对表中的主键使用自动编号字段。

或者

利用

 INSERTINTO request 
            (Request_id, 
             Request_message) 
VALUES      ( (SELECT 'REQ' + Lpad(Ifnull(Max(Request_id) + 1, 0), 4, 0) 
               FROM   request), 
              yourMessage) 
于 2012-05-28T07:07:46.637 回答
0

对于第一个问题,你可以做这样的事情

INSERT INTO request (Request_id,Request_message) VALUES (
   (SELECT MAX(Request_id) FROM request), yourMessage)

或者更好,您可以使用pk的自动增量

此外,如果您要求 DBMS 的所有增量/插入问题,您可以避免直接与 pk 相关的问题

于 2012-05-28T07:08:00.720 回答