Mysql非顺序插入问题

时间:2011-04-18 18:02:32

标签: php mysql insert null

我有一张包含100,000条记录的表格描述为:

ID primary unique int (5)
Ticket unique int (5)
user varchar (20)

该表上仅填充的字段是前两个,ID和票证。我现在需要在请求时将用户分配给该票证。我怎样才能做到这一点?如何找到下一个空用户在桌面上的位置?

编辑:按要求解释场景

它的各种彩票系统。票号已经制作并填入表格中。现在,当用户注册票证时,必须在用户字段中将其用户名插入下一个可用票证旁边。我确定这是一个更简单的方法,通过在新表上插入包含所有信息的票证,但这是确实的要求,因为听起来很愚蠢。

那么如何找出下一个空用户在桌面上的位置呢?

4 个答案:

答案 0 :(得分:0)

该表的排序方案是什么?

如果Id编号是连续的,则应该有效:

SELECT ID FROM TABLE WHERE user is null ORDER by ID LIMIT 1

如果Id编号是非连续的,您可以使用表格的自然排序(按输入时排序)

SELECT ID FROM TABLE WHERE user is null LIMIT 1

答案 1 :(得分:0)

通过执行以下操作查找下一个NULL行:

SELECT ID 
FROM Ticket
WHERE user IS NULL 
LIMIT 1;

当你更新时,你必须要小心,你没有竞争条件与另一个进程也获得相同的ID。您可以通过使用一个包含TicketAllocation的单独表来防止此重复分配问题,并为其指定一个指向Ticket表的唯一外键约束。

答案 2 :(得分:0)

这假定ID是自动递增的。

首先找到user字段为null的第一条记录:

Select * from users where user is null order by id asc limit 1;

然后填写:

Update users set user = [username] where id = [id from select];

答案 3 :(得分:0)

您也可以在一个查询中执行此操作:

UPDATE users SET user = [username] where id = 
(select min(id) from users where user is null)