Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql根据第一个表中生成的ID插入多个表_Mysql - Fatal编程技术网

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

MySql根据第一个表中生成的ID插入多个表,mysql,Mysql,我的数据库中有三个表。A用户表、StoreA和StoreB StoreA和StoreB都有一个唯一的密钥,即用户ID值 我想要的是;当我创建一个用户并将其插入数据库时,如何在没有太多额外查询的情况下将一行插入其他两个表中 我想我可以在一个查询中插入用户, 然后在另一个返回中,返回新创建的用户ID, 然后在另一个示例中,使用所述ID在StoreA和StoreB中创建行 我可以删除中间的查询吗?是-应该有一个函数可以在不进行其他查询的情况下获取最后插入的ID(假设它是一个自动增量字段)。在PHP中,

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

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

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

我想我可以在一个查询中插入用户, 然后在另一个返回中,返回新创建的用户ID, 然后在另一个示例中,使用所述ID在StoreA和StoreB中创建行


我可以删除中间的查询吗?

是-应该有一个函数可以在不进行其他查询的情况下获取最后插入的ID(假设它是一个自动增量字段)。在PHP中,它是mysql\u insert\u id()。在第一次查询之后再调用它

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

我能把中间的问题删掉吗

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;
 Q1: insert into table1 values (...);
 Q2: insert into table2 values (last_insert_id(), ...);
见:

在事务中这样做是一个好主意,如果出现问题,您不会被一个没有其他数据的用户所困扰。
但这不是DB的要求

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;
 Q1: insert into table1 values (...);
 Q2: insert into table2 values (last_insert_id(), ...);

各种编程语言中的大多数mysql库都支持返回上次插入id。
但是您没有提到您正在使用哪种语言连接到mysql。,

因此无法提供任何示例

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

如果您使用的是mysqli,首先执行insert查询。 那就做吧


$db\u id=$this->db->insert\u id

什么是编程语言?用户ID是自动递增的整数吗?是的,用户ID是自动递增的整数。这不是个好主意。将varchar/char作为外键(不管它是否唯一)比使用整数更需要资源?BCNF@斯蒂芬,这不是标准化的问题,而是性能的问题,没有什么能比得上整数键的速度。@斯蒂芬·格兰特:不,用户名不是候选键,因为尽管它必须是唯一的,但它可能是可变的。就像一封电子邮件是独一无二的,但是它需要改变。可能是不相关的,但是你可能需要记住根据你的数据库类型使用
autocommit=0
,如果你同时使用多行插入怎么办?@CME64我想在这种情况下它不会起作用;你找到解决办法了吗?