MySql根据第一个表中生成的ID插入多个表

时间:2011-09-09 15:02:10

标签: mysql

我的数据库中有三个表。用户表,StoreA和StoreB

StoreA和StoreB都有一个唯一的密钥,即用户ID值。

我想要的是;当我创建用户并将其插入数据库时​​,如何在没有太多其他查询的情况下将行插入到其他两个表中。

我想我可以通过在一个查询中插入用户来做到这一点, 然后在另一个返回新创建的用户ID, 然后在另一个中,使用所述ID,在StoreA和StoreB中创建行

我可以删除中间查询吗?

5 个答案:

答案 0 :(得分:5)

  

我可以删除中间查询吗?

START TRANSACTION;
INSERT INTO user (id, name, other) 
          VALUES (null, 'John','rest of data');
INSERT INTO storeA (id, user_id, other) 
            VALUES (null, @user_id:= LAST_INSERT_ID(), 'rest of data');
INSERT INTO storeB (id, user_id, other) 
            VALUES (null, @user_id, 'rest of data');
COMMIT;

请参阅:http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

在交易中执行此操作是个好主意,如果出现问题,您不会只是没有其他数据的用户。 但这不是数据库要求。

答案 1 :(得分:2)

是的 - 应该有一个函数可以获得最后一个插入的ID(假设它是一个自动增量字段)而没有另一个查询。在PHP中,它是mysql_insert_id()。只需在第一次查询后调用它。

答案 2 :(得分:0)

 Q1: insert into table1 values (...);
 Q2: insert into table2 values (last_insert_id(), ...);

last_insert_id is the default mysql build-in function

各种编程语言中的大多数mysql库都支持返回最后一个插入ID 但你没有提到你用什么语言连接到mysql。
所以不能提供任何例子

答案 3 :(得分:0)

我只是想分享一个php解决方案。

如果您使用的是mysqli,请先执行插入查询。 然后做

$db_id = $this->db->insert_id;

答案 4 :(得分:-1)

为什么不使用他们的用户名作为主键而不是创建自动递增的任意user_id字段?他们的用户名是唯一的,对吗?