2016-06-15 122 views
0

我在我的sql数据库中有两个数据库表。第一个是私人表,另一个是付款细节。个人表中的自动注册ID用作支付细节的外键。我必须一次插入数据到这个表中。不过我应该将数据插入到个人表中,并获得该行的自动递增ID并将数据插入到付款数据表中。但我有一些问题。mysql&php自动增加id和插入数据

  • 我不能使用我的sql SELECT查询 很容易得到自动增量id。因为有更多的colums来检查WHERE。
  • get last insert id并不完美。因为其他用户可以在我访问时插入另一个人的数据 ,并且我收到错误的ID。

我对此没有很好的认识。帮我 !

+2

请插入你曾尝试过的东西 –

回答

1

我并不真正了解你的结构,但最好的方法是使用事务。链接:http://dev.mysql.com/doc/refman/5.7/en/commit.html

START TRANSACTION; 
INSERT /* Your insertion into personalTable */ 
SELECT @lastId:=LAST_INSERT_ID(); 
INSERT INTO paymentTable SET (user_id) VALUES (@lastId); 
COMMIT; 

还需要设置你的事务隔离级别设置为序列化,以防止任何违规交易。

UPD。感谢@Drew让我更深入地挖掘。

+0

不,作为一个遥远的问题的可能性,这不是一个人的做法。在插入和保存在第3行中的变量之间,另一个用户可以完成插入。一个使用'LAST_INSERT_ID()'来安全地获取这些数据。该函数返回* your * client连接的最后一个插入标识。 – Drew

+0

你说得对,但LAST_INSERT_ID()在这个事务正在工作时也不能阻止插入。这里最好的方法是将隔离级别设置为SERIALIZABLE,以便您的事务完全独立。 https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html – jaro1989

+0

我们为什么要防止插入?我们正试图在所有情况下获得正确的'@ lastId',并且您的答案有问题。 – Drew