在MySQL中使用INSERT
语句,很容易为主键输入AUTO_INCREMENT
值。 UPDATE
声明有这样的功能吗?自动递增更新查询ID或序列号
我想象什么是表像这样:
users
userid username password email ... unique_updated_id
用户每次更新的东西在users
表中,unique_updated_id
将包含MAX(unique_updated_id)+1
。这将用于与数据库同步的系统中。它会记住它收到的最后一个unique_updated_id
,并在从服务器获取更新时将其返回。
因此,当用户更改他们在数据库中的信息时,他们的unique_updated_id
将更新为SELECT MAX(unique_updated_id)+1 FROM users
。这将告诉同步过程只有在指定的unique_updated_id
之后更新的信息才会被发送。
但是,我担心的是,由于一个可能的竞争条件下,我可能无法与
UPDATE users SET email='[email protected]',unique_updated_id=(SELECT MAX(unique_updated_id)+1 FROM users) WHERE userid=1;
达到预期的行为如何确保unique_updated_id
将永远是独一无二的,将有连续编号的所有UPDATE
和INSERT
查询?
我试图在PHP中实现这一点,所以执行由分号分隔的查询似乎不是解决方案,以确保两个查询可以连续执行而不需要在其间执行其他查询。
好表可以有一个以上的主键。为什么你不能攻击auto_increment unique_updated_id –
难道这只是在冲突的情况下返回错误?假设3个查询同时运行:QUERY1设置UUI = 10,QUERY2设置UUI = 10,QUERY3设置UUI = 10。当QUERY2和QUERY3执行时,这不会仅仅返回错误吗? –
那么,服务器上的请求会排队,因此它会按收到的顺序处理它们并相应地更新它们。这就是为什么自己做这件事更可靠。尽管有更多SQL经验的人可以提供更好的洞察力。 –