gpt4 book ai didi

mysql - 复制具有关系的数据库记录

转载 作者:行者123 更新时间:2023-11-29 02:36:11 25 4
gpt4 key购买 nike

我在同一数据库中有 2 组表 - 一组实时数据集和一组测试数据集。每个集合中有两个表 - 表 A 和表 B - 它们之间是一对多的关系。

我需要做的是从测试集中的表 A 中选择某些记录,并将这些记录连同它们在表 B 中的关系一起复制到实时表集中。这些集合的结构是相同的。

是否可以在不必手动分解记录的情况下执行此操作?

我在 symfony 1.4 PHP 框架的上下文中使用 Doctrine ORM(我认为是 1.2)。

到目前为止,我一直在尝试这样的事情:

$record = Doctrine_Core::getTable('testSetTableA')->find(1);
$liveSetTableArecord = new LiveSetTableArecord();
$liveSetTableArecord = $record->copy();
$liveSetTableArecord->save();

但我觉得我缺少一些基本的东西。据我所知,没有从查询对象中完整设置记录的方法吗?

最佳答案

我自己对这个问题进行了更多研究,据我所知,使用 ORM 进行此类操作从一开始就是一个坏主意,因为涉及所有不必要的开销。

仅使用原始的“INSERT INTO”语句效率要高得多,这就是我现在正在做的。

    $connection = Doctrine_Manager::connection();
$query = "INSERT INTO Set2tableA SELECT * FROM Set1tableA WHERE id = '$id' ON DUPLICATE KEY UPDATE Set2tableA.id = Set2tableA.id";
$statement = $connection->execute($query);
$statement->execute();

$query2 = "INSERT INTO Set2TableB SELECT * FROM Set1TableB WHERE tableA_id = '$id' ON DUPLICATE KEY UPDATE Set2TableB.id = Set1TableB.id";
$statement = $connection->execute($query2);
$statement->execute();

'ON DUPLICATE KEY UPDATE' 是必需的,因为表 B 中的主键是非空的,因此当您尝试将记录 1 从表 A 复制到表 B 时,mysql 发现已经有 ID=1 的条目并抛出错误。

关于mysql - 复制具有关系的数据库记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4775204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com