Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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数据_Mysql - Fatal编程技术网

使用自动增量插入相关MySQL数据

使用自动增量插入相关MySQL数据,mysql,Mysql,我在看一个数据库,它有3个表,我必须在其中插入数据: resource id (AUTO_INCREMENT) name resource_item id (AUTO_INCREMENT) name resource_id (FK ref resource.id) resource_item_business_function id (AUTO_INCREMENT) business_function_name resource_item_id 我所面临的是

我在看一个数据库,它有3个表,我必须在其中插入数据:

resource
  id (AUTO_INCREMENT)
  name

resource_item
  id (AUTO_INCREMENT)
  name
  resource_id (FK ref resource.id)

resource_item_business_function
  id (AUTO_INCREMENT)
  business_function_name
  resource_item_id
我所面临的是这样一个事实:这必须是脚本化的。我只插入了1条
resource
记录,这样我就可以很容易地将插入脚本编写到
resource
表中。我有~20个
resource\u项
记录要为该
资源
插入,我甚至可以使用
LAST\u insert\u ID()
函数轻松地完成这项工作。问题是…我如何插入
资源\项目\业务\功能


我不知道如何将正确的
资源项目\u id
插入每个
资源项目\u业务\u功能
记录。如果您有任何想法,我们将不胜感激。

您需要在每次插入资源项后使用最后一个插入ID()。因此,您的最终脚本可以如下所示:

SET AUTOCOMMIT=0;
SET @RESOURCE_ID=0;

INSERT INTO resource ( NULL, "Some Name");
SELECT LAST_INSERT_ID() INTO @RESOURCE_ID;

INSERT INTO resource_item ( NULL, "Some Name", RESOURCE_ID );
INSERT INTO resource_item_business_function ( NULL, "Some Name", LAST_INSERT_ID() );
...etc...
INSERT INTO resource_item ( NULL, "Some Name", RESOURCE_ID );
INSERT INTO resource_item_business_function ( NULL, "Some Name", LAST_INSERT_ID() );

COMMIT;

啊。我希望有一些聪明的脚本/循环可以避免单独的SQL语句。另一方面,没有FK的级联,所以我希望我可以编写脚本,在多次执行时自动删除现有记录。为了清楚起见,我省略了最后一部分。:-)然后在脚本完成执行后删除这些过程,我猜?我绝对不希望这种过程停留在数据库上。如果它不是一个正在进行的操作,我不会使用数据库端SP或触发器。是的。理论上,这是一次性操作。多次执行代表了测试过程中的反复试验。回顾一下您的第一个响应。使用上面的插入将生成错误。只需替换
COMMIT使用
回滚这将测试事务中的插入,并在完成前还原。所有完整性检查都在事务中完成,因此这不应影响您的测试。