复制关系表数据

2023-12-22

我希望我在这个问题上不会太啰嗦,我只是想确保我所问的内容完全清楚(我认为这相当令人困惑:)。

我有一个数据库,其中有一堆表,并且设置了所有外键约束。关系有时会深达几张表,并且也存在子级与多个父表相关的情况。我想插入“顶级”表行之一的副本以及与其相关的所有子表数据(保持关系完整性)。也就是说,我的新顶级行获得了自己的新主键(通过 auto_increment),并且所有新的子行都获得了自己的主键(再次通过 auto_increment),并且表的所有外键信息类似于我复制的数据(现在仅使用新创建的主键)。所以现在我将拥有一个独立于原始数据可变的关系数据的副本。

为了使我的示例更加具体,我煞费苦心地设置了一个类似但更简单的示例。让我们定义下表:

替代文本 http://www.freeimagehosting.net/uploads/ef22070a89.png http://www.freeimagehosting.net/uploads/ef22070a89.png

所有绿色的 id 字段都是 auto_update 主键,黄色的字段是带有外键约束的索引列。假设数据库最初有以下数据:

job_types
+----+----------+
| id | jobcode  |
+----+----------+
|  1 | DEADBEEF |
|  3 | FEEDFACE |
+----+----------+

managers
+----+---------------+-------------+
| id | name          | job_type_id |
+----+---------------+-------------+
|  1 | John          |           1 |
|  3 | Michael Scott |           3 |
+----+---------------+-------------+

departments
+----+------+------------+
| id | name | manager_id |
+----+------+------------+
|  1 | H32  |          1 |
|  2 | X11  |          3 |
+----+------+------------+

employees
+----+-------------+---------------+------------+-------------+
| id | name        | department_id | manager_id | job_type_id |
+----+-------------+---------------+------------+-------------+
|  1 | Billy Bob   |             1 |          1 |           1 |
|  2 | Sandra Lee  |             1 |          1 |           3 |
|  3 | Buddy Holly |             2 |          3 |           1 |
+----+-------------+---------------+------------+-------------+

现在说我想做的是制作部门 H32 (id=1) 的关系副本。

我最终应该得到如下所示的结果(显然主键的实际值并不重要,引用完整性才是)。

job_types
+----+----------+
| id | jobcode  |
+----+----------+
|  1 | DEADBEEF |
|  3 | FEEDFACE |
|  4 | DEADBEEF |
|  5 | FEEDFACE |
+----+----------+

managers
+----+---------------+-------------+
| id | name          | job_type_id |
+----+---------------+-------------+
|  1 | John          |           1 |
|  3 | Michael Scott |           3 |
|  4 | John          |           4 |
+----+---------------+-------------+

departments
+----+------+------------+
| id | name | manager_id |
+----+------+------------+
|  1 | H32  |          1 |
|  2 | X11  |          3 |
|  3 | H32  |          4 |
+----+------+------------+

employees
+----+-------------+---------------+------------+-------------+
| id | name        | department_id | manager_id | job_type_id |
+----+-------------+---------------+------------+-------------+
|  1 | Billy Bob   |             1 |          1 |           1 |
|  2 | Sandra Lee  |             1 |          1 |           3 |
|  3 | Buddy Holly |             2 |          3 |           1 |
|  4 | Billy Bob   |             3 |          4 |           4 |
|  5 | Sandra Lee  |             3 |          4 |           5 |
+----+-------------+---------------+------------+-------------+

实现此类复制操作的最有效方法是什么?为了它的价值,我在 Grails 的上下文中使用 MySQL,使用 InnoDB 表引擎。我期待听到一些关于如何“以正确的方式”做这样的事情的好主意。

——问候,维克

我已经发帖了示例的 MySQLDump http://pastebin.com/v0RG0AJVPasteBin 上的初始化。

EDIT对于它的价值,我发布了一个更简单/更广泛的问题here https://stackoverflow.com/questions/3260091/databases-and-deep-copy/3260254#3260254我得到了普遍积极的回应,这表明我并没有“只是做错了”......


我用做过类似的事情插入...选择 http://dev.mysql.com/doc/refman/5.1/en/insert-select.html句法。 (C api 还有一个 MYSQL_OPTION_MULTI_STATEMENTS_ON,您可以使用它来运行多个语句。或者您可以使用过程)。

这是最有效的,因为您不必在客户端和服务器之间移动数据。复制的值是创建新实体的模板。我不明白你为什么要使用这个特定的数据模型来这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

复制关系表数据 的相关文章

  • 在标准化数据库模式中是否可以有多个外键?

    Address addressID houseNumber postcode roadName city county Reservation reservationID roomNo leadGuestID guest2ID guest3
  • 在 C# 中,当有人插入、删除或修改记录时,如何从 MySQL 获取事件?

    我正在 WPF Net 中开发一个程序 我需要知道何时有人对数据库的任何表进行更改 这个想法是在数据库发生更改时从数据库接收一个事件 我读了很多文章 但找不到解决我的问题的方法 亲切的问候 最好的解决方案是使用消息队列 在您的应用程序向数据
  • java ResultSet,使用MAX sql函数

    你好 这就是我想要的 我连接到数据库并检索 UniqueId 列的最大元素 并将其分配给名为 maxID 的整数变量 这是我的方法 int maxID 0 Statement s2 con createStatement s2 execut
  • 不允许在 php 中连接到此 MariaDB 服务器

    我尝试在 php 中连接远程服务器数据库 但出现以下错误 Host xx xxx xx xx is not allowed to connect to this MariaDB server in 我的连接代码是这样的 servername
  • 如果没有找到值,如何让 MySQL 中的 SUM 函数返回“0”?

    假设我在 MySQL 中有一个简单的函数 SELECT SUM Column 1 FROM Table WHERE Column 2 Test 如果没有条目Column 2 包含文本 Test 然后该函数返回NULL 而我希望它返回 0 我
  • 如何在 MySQL 中求和时间?

    正如您在图片中看到的 我有一份停机报告 显示了所选工厂在选定日期的停机时间 现在我想添加所有的值 Time Duration 列并将其显示在附近的单独显示中 TOTAL TIME DURATION 例如 在图像中 所选日期为 2015 年
  • 为什么 Python 中的无分支函数和内置函数速度较慢?

    我发现了 2 个无分支函数 它们可以在 python 中查找两个数字的最大值 并将它们与 if 语句和内置 max 函数进行比较 我认为无分支或内置函数将是最快的 但最快的是 if 语句函数 有人知道这是为什么吗 以下是功能 If 语句 2
  • HTML5 数据库存储(SQL lite) - 几个问题

    你好 我在网上找不到足够的关于 HTML5 数据库存储使用示例 CRUD 的初学者资源 我正在像这样打开 创建 我的数据库 var db document ready function try if window openDatabase
  • 与保留模式 GUI 相比,使用立即模式 GUI 对性能有何影响?

    我目前正在开发一个标准的 Windows 桌面应用程序 标准意味着没有花哨的东西 只是按钮 文本 滑块等 在研究了一些 GUI 框架并被拒绝后 我决定自己编写一个 GUI 框架他们全部 由于这是一个业余爱好项目 我也愿意尝试 并决定将 GU
  • 如何在首次运行时填充大型 SQLite 数据库

    我正在开发一个基于 SQLite 数据库的字典应用程序 该数据库包含超过 300 000 行 问题在于 最终形式的数据库文件由全文索引表组成 并且重量远远超过150Mb 我通过创建无内容的 fts4 表设法将 db 文件大小降至最低 数据库
  • 如何停止在 mongodb 集合中插入重复文档

    让我们有一个MongoDB包含三个文档的集合 db collection find id user A title Physics Bank Bank A id user A title Chemistry Bank Bank B id u
  • 为 Zend 应用程序提供数据库处理程序的“正确”方法是什么

    假设您严格遵守某个组织的惯例Zend应用程序 http framework zend com manual en zend application html 您应该在哪里设置数据库处理程序以供应用程序开发人员访问 我知道如何设置ZendDb
  • PostgreSQL 中“-”处或附近的语法错误

    我正在尝试运行查询来更新用户密码 alter user dell sys with password Pass 133 但因为 它给了我这样的错误 ERROR syntax error at or near LINE 1 alter use
  • 高效秒表

    您好 我正在用 javascript 编写一个秒表实用程序 我有一个关于效率和开销的问题 我考虑过两种制作秒表的方法 1 存储开始日期并不断测量自该日期以来经过的毫秒数 2 创建一个整数并按设定的时间间隔递增其值 我想知道哪个最有效 另外
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • Gtk/GtkD 在窗口调整大小时检测鼠标按钮的释放?

    我正在尝试改进我用 GtkD Gtk 的 D 绑定 编写的绘图库 具有很多点的散点图需要很长时间才能调整大小 我想重新缩放图像 允许像素化 同时用户拖动窗口边缘来调整大小 并且仅在释放鼠标按钮时重新渲染它 是否有 API 可以检测在调整窗口
  • 错误代码:1305。函数或过程不存在

    因此 我在 MySQL 中创建一个函数 然后尝试向用户授予使用该函数的权限 但我无法这样做 这就是我正在做的 DELIMITER USE rxhelp36 scbn DROP FUNCTION IF EXISTS businessDayDi
  • 我应该用不可变或可变的数据结构来表示数据库数据吗?

    我目前正在使用 Scala 进行编程 但我想这适用于任何函数式编程语言 或者更确切地说 任何建议不变性并可以与数据库交互的编程语言 当我从数据库中获取数据时 我将其映射到模型数据结构 在函数式编程中 数据结构往往是不可变的 但是数据库中的数
  • 实现软删除的最佳方法是什么?

    目前在做一个项目 我们要对大部分用户 用户角色 实现软删除 我们决定添加一个is deleted 0 数据库中每个表的字段并将其设置为 1 如果特定用户角色点击特定记录上的删除按钮 现在为了将来的维护 每个SELECT查询需要确保它们不包含
  • 当跳转在 32 字节上不完全对齐时,使用 MITE(传统管道)代替 DSB(微指令缓存)

    这个问题曾经是这个 现已更新 问题 https stackoverflow com questions 59883527 unrolling 1 cycle loop reduces performance by 25 on skylake

随机推荐

  • 使用 boost::numpy::ndarray 时出现分段错误

    当我试图通过时 我发现了一个奇怪的段错误boost numpy ndarray作为一个论点 include
  • 从 lxml 获取内部文本

    lxml html fromstring 坚持将所有内容包装在标签中 p默认 从这个标签树来看 p this is b the b good stuff p p 我想提取字符串 this is b the b good stuff 我该怎么
  • 在 Javascript (Meteor) 中将字符串转换为 Mongo ObjectID

    我有一个 Meteor 应用程序 最初我使用 id在我的模板中命名列表项时 我的集合中每条记录的字段 当得到 id字段 我将其转换为字符串以在模板中使用 现在我想更新 Mongo 中的这些记录并传递 id回到一个Meteor method
  • 获取本地文件的内容而不上传[重复]

    这个问题在这里已经有答案了 我正在编写一个离线网络应用程序 允许用户选择本地文件 修改它 然后也在本地保存副本 是否可以在没有任何服务器的情况下 我可以上传文件并返回其base64 但它不是离线的 应用程序只需要在 Google Chrom
  • 使用 Nginx 在单个域上运行多个 React 应用程序

    谁能推荐一个最佳实践 nginx 配置来在单个域上运行多个 React 应用程序 这些应用程序将从不同的根目录提供服务 因此 app1 和 app2 在 www domain com 上运行并获得服务 www domain com app1
  • 如何查看查询执行成功与否?

    我正在使用 codeigniter 2 0 2 这是来自它的用户指南 data array title gt title name gt name date gt date this gt db gt where id id this gt
  • SQL 中的循环行

    我正在寻找类似的输出 最近 日期 评论 第二个最近 日期 评论 Example Book Comments BookA 27 03 13 comment1 21 03 13 comment2 21 03 13 uhuuuu and so o
  • 基于数量的价格计算器[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试创建一个简单的脚本来添加到我的 html 网站 我需要它根据用户输入的数量计算价格 例如 1 1000 的值将乘以 1 50 并
  • Flex 4 组显示效果/隐藏效果

    我有一个组 我想在显示和隐藏时执行擦除效果
  • Drupal 7 在“首次加载”时太慢

    我希望有人能帮助我解决这个 Drupal 7 问题 我注意到 当我 第一次 输入网站地址时 加载时间非常慢 开始加载文件和显示内容大约需要 20 平均 秒 好像有一些延迟 然而 在那段时间之后 速度非常快 一切都很好 页面加载后 我们可以快
  • 在 NLTK 解析器中使用整数/日期作为终端

    我正在尝试使用 NLTK 中的 Earley 解析器来解析句子 例如 如果日期早于 12 21 2010 则序列号 10 为此 我尝试编写一个 CFG 但问题是我需要使用日期和整数的通用格式作为终端 而不是特定值 有没有什么方法可以将生产规
  • 列出SD卡中的所有图像

    您好 我正在开发 Android Gallery 应用程序 我正在从 SD 卡中的文件夹中获取图像并将其显示在网格视图上 如下所示 public static ArrayList
  • Linq - 如何在变量中存储“where条件”

    是否可以将此 linq 语句中的Where条件存储在变量中 Func
  • 使用 z-index 覆盖 DIV

    我试图在整个页面上覆盖一个 div 以显示弹出窗口 问题是 它不会覆盖整个页面 这是代码的近似值 div div style width 100 height 100 Overlay div Contents of container 1
  • angularjs 按顺序链 http post

    在我的应用程序中 我将数据存储在本地存储中并在后台触发异步 http post 成功发布后 发布的数据将从本地存储中删除 当 http post 正在进行时 可能会有更多数据添加到本地存储中 因此我需要将 post 排队并按顺序处理它 因为
  • 在 ABPeoplePickerNavigationController 上取消选择RowAtIndexPath

    我在我的应用程序中将 ABPeoplePickerNavigationController 显示为选项卡 用户单击姓名 然后单击电子邮件地址 然后我对电子邮件地址执行某些操作 之后 我希望他们选择的人和财产淡出 不突出显示 在普通表中 我会
  • getOutputStream() 上的设备上“没有到主机的路由” - 无线连接

    private String urlPost http 192 168 1 66 8080 DataCollectionServlet Override protected void doWakefulWork Intent intent
  • 使用泛型类型构造函数时,Null (?) 运算符返回不正确的值。网络

    使用通用类型和空运算符时 我遇到一些奇怪的行为 为什么 obj2 CurrentDate 返回的日期值在使用时看起来不正确 简写 如果我在属性中长期使用 null 运算符 if 那么它会返回正确的预期值 我以为 相当于 if 表达式 ret
  • 配置 Kafka 以接受来自 Docker 内部和外部的客户端

    我正在 Docker 网络中运行 Apache Kafka Kafka Broker 的容器称为 docker kafka 我想要的是允许来自另一个 docker 容器以及 docker 主机的 Kafka 客户端的连接 docker ka
  • 复制关系表数据

    我希望我在这个问题上不会太啰嗦 我只是想确保我所问的内容完全清楚 我认为这相当令人困惑 我有一个数据库 其中有一堆表 并且设置了所有外键约束 关系有时会深达几张表 并且也存在子级与多个父表相关的情况 我想插入 顶级 表行之一的副本以及与其相