vic*_*tcu 5 mysql database performance grails relational-database
我希望我在这个问题上没有太长时间的啰嗦,我只是想确保我所要求的是完全清楚的(我认为这是相当令人困惑的:).
我有一个包含大量表的数据库,并设置了所有外键约束.关系有时会有几个表深,并且还存在子表与多个父表相关的情况.我想插入一个我的"顶级"表行的副本,以及与之相关的所有子表数据(保持关系完整性).也就是说我的新的顶级行都有自己的新的主键(通过AUTO_INCREMENT),和所有的新的子行获得自己的主键(再次通过AUTO_INCREMENT),并且所有表的外键信息类似涉及我复制的数据(现在只有新创建的主键).所以现在我将拥有一份与原始数据独立可变的关系数据.
为了使我的例子更具体,我辛辛苦苦地建立了一个类似但更简单的例子.让我们定义下表:
alt text 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 |
+----+-------------+---------------+------------+-------------+
Run Code Online (Sandbox Code Playgroud)
现在说我想做的是制作部门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 |
+----+-------------+---------------+------------+-------------+
Run Code Online (Sandbox Code Playgroud)
实现此类复制操作的效率最高的方法是什么?在Grails的上下文中,使用InnoDB表引擎,我正在使用MySQL.我期待听到一些关于你如何做这样"正确方法"的好主意.
- 问候,维多利亚州
我在PasteBin上发布了一个示例初始化的MySQLDump.
编辑 为了它的价值,我在这里发布了一个更简单/更广泛的问题,我得到了普遍积极的回应,暗示我不是"只是做错了"......
我使用INSERT INTO ... SELECT语法做了类似的事情。(C api 还有一个 MYSQL_OPTION_MULTI_STATEMENTS_ON,您可以使用它来运行多个语句。或者您可以使用过程)。
这是最有效的,因为您不必在客户端和服务器之间移动数据。复制的值是创建新实体的模板。我不明白你为什么要使用这个特定的数据模型这样做。
| 归档时间: |
|
| 查看次数: |
1203 次 |
| 最近记录: |