我有一个Mysql表。
用户在HTML表单中填写Request_message后,用户单击“提交”按钮。我将从请求表中生成一个请求ID,然后添加该行。 (表中有两个匹配,一个用于获取最后一个request_id,另一个用于将行添加到表中)。我想避免这种情况。
另外,同时说7-8个用户点击提交按钮,他们将从表中获得相同的最后一个request_id。他们会在最后一个request_id中添加1,并尝试添加该行。除了一个人都得到主键约束错误 ..如何避免这个?
请提供您的建议。
由于 Devesh
答案 0 :(得分:2)
使用AUTO_INCREMENT作为主键。
修改强> 的 如果不对列使用整数类型,则另一种解决方案是使用行级锁定。
答案 1 :(得分:0)
使用sp在表格中插入记录。
或
在表格中使用自动编号字段作为主键。
或
使用
INSERTINTO request
(Request_id,
Request_message)
VALUES ( (SELECT 'REQ' + Lpad(Ifnull(Max(Request_id) + 1, 0), 4, 0)
FROM request),
yourMessage)
答案 2 :(得分:0)
对于第一个问题,你可以做类似的事情
INSERT INTO request (Request_id,Request_message) VALUES (
(SELECT MAX(Request_id) FROM request), yourMessage)
或更好,您可以使用autoincrement作为p.k。
此外,如果您向DBMS请求所有增量/检测问题,则可以避免直接与p.k相关的问题。