我有一个资源表(可以说汽车),我想自动声明。然后我需要关于我刚才声称的资源的信息。如何使用mysql中的UPDATE自动声明一行或资源
如果有每一个用户资源的极限,我可以做下面的技巧:
UPDATE cars SET user = 'bob' WHERE user IS NULL LIMIT 1
SELECT * FROM cars WHERE user = 'bob'
这样,我要求原子资源,然后我可以看到哪一行我只是声称。
当'bob'可以声明多辆车时,这不起作用。我意识到我可以得到一份已经被bob声称的汽车列表,声称另一个,然后SELECT
再次看看发生了什么变化,但这感觉hackish。
我想知道的是,有没有什么方法可以查看哪些行我刚更新了我的上一次更新?
如果失败了,是否还有其他一些技巧来自动声明一行?我真的想避免使用SERIALIZABLE
隔离级别。如果我做这样的事情:
1 SELECT id FROM cars WHERE user IS NULL
2 <here, my PHP or whatever picks a car id>
3 UPDATE cars SET user = 'bob' WHERE id = <the one i picked>
会REPEATABLE READ
这里就够了吗?换句话说,我能保证一些其他交易不会声称我的软件在第2步中选择了哪一行吗?
我发现这个:http://stackoverflow.com/questions/1821142/atomically-mark-and-return-a-group-of-rows-in-database,但它是询问有关SQL服务器 - 我无法找到一个mySQL等效 – 2010-03-17 08:26:21