我目前正在使用主键的模数为服务器分配记录,这导致均匀分布。有时我需要关闭其中一台服务器,我不希望记录在离线时建立起来。
当前SQL
UPDATE table
SET server_id = ((primary_key % 10000) + 1)
WHERE server_id IS NULL;
我试图避免第二个SQL语句,所以如果你有另一个想法,我很乐意听到它。
答案 0 :(得分:1)
我认为您需要以下内容:
update table t join
(select s.*, @rn := @rn + 1 as FakeServerNumber, NumServers
from servers s cross join
(select count(*) as NumServers, @rn := -1
from servers
where isup = 'isup'
) const
where s.isup = 'isup'
) s
on t.primary_key % s.NumServer = s.rn
set t.server_id = s.server_id
where t.server_id is null;
这会为所有“up”服务器添加一个序列号。它将join
用于主键上的模数表达式。然后,您可以将实际的服务器信息插入表中。