2012-05-19 90 views
0

我需要在使用我的PHP代码更新MYSQL表之后返回受影响行的主键。 有没有办法实现这一点?我需要在MYSQL中更新表后返回受影响行的主键。

+0

如果你已经更新现有的记录,那么你必须以某种方式识别它们 - 所以你的调用(PHP)代码已经知道某种关键;如果它不是PK但你想获取PK,你可以通过SELECT ... WHERE来获得它。或者当你说“更新”时,你是否实际上在表中插入了*新的*记录? – eggyal

+0

我不认为有办法做到这一点。之后你只需要执行一个SELECT查询。 –

+0

至今尝试过 mysql_affected_rows(); mysql_info(); –

回答

2

您需要执行UPDATE之前获取的主键:

SELECT primary_key_columns FROM my_table WHERE status = 'O'; 
UPDATE my_table SET status = 'E' WHERE status = 'O'; 

但是,如果有可能改变这两种说法之间my_table并发连接,它可能是按键的结果被返回第一个SELECT声明将不会完全匹配由第二个UPDATE声明更新的记录。

为了防止这种情况,你需要在一个事务中执行的操作(但要注意交易从你的存储引擎需要的支持 - InnoDB的通常用于此目的):

START TRANSACTION; 
SELECT primary_key_columns FROM my_table WHERE status = 'O' FOR UPDATE; 
UPDATE my_table SET status = 'E' WHERE status = 'O'; 
COMMIT; 
1

做一个你想做的事情的方法是在你进行更新之前,先选择主键和更新条件。

如果您的查询是

更新*从 “表”,其中Y

你就必须做到以下几点:

选择 “表格”, “主键”,其中Y

更新X从“表”其中Y

希望这有助于!

相关问题