Mysql数据库:它只是一个表的集合吗?

时间:2015-09-26 21:34:31

标签: mysql database

我试图将数据从数据库中的一个表复制到另一个数据库中的新空表。两个数据库都来自同一个应用程序,但新的数据库具有更高的版本。所以这两个表有相似的结构,除了新的和空的有几个列。 我对数据库不太熟悉,所以我使用了一些笨拙的方法来做到这一点。首先,我比较两个表并找出其他列,然后我备份旧表并将其他列添加到旧表中,并确保新添加的列具有完全相同的属性。所以这两个表有完全相同的结构...或者我认为。然后我将旧表导出到.sql文件。然后我编辑.sql文件中的表名出现并将其导入新表。上述操作在phpMyAdmin中完成。在此之后,两个表在phpMyAdmin中看起来是相同的,它们具有相同的结构和数据。 我认为数据迁移是成功的,但是,当我运行应用程序时,前端会显示一些警告消息。我没有对可能触发这些错误消息的应用程序做任何其他事情,所以我认为它与我迁移数据的方式有关。不确定,我写信给应用程序作者,他说“通过手动操作,你搞砸了表格之间的整合”,所以我的问题是:

mysql数据库只是表的集合吗?如果两个数据库具有完全相同的表,其结构和数据与phpMyAdmin中显示的相同,那么我们可以将这两个数据库称为相同吗?什么是“表之间的整合”指的是什么?

我对数据库的了解非常有限,我想在我再次写信给作者并向他提出更具体的问题之前,我最好先回答这些问题。

我使用的是Joomla 3.4,我上面提到的应用程序是一个名为Preachit4.0的扩展程序。

2 个答案:

答案 0 :(得分:1)

  

mysql数据库只是表的集合吗?

这有点轻描淡写,因为它是表,视图,过程,函数,触发器,事件的集合......但是,是的,数据库不过是其各部分的总和,包括它们的元数据(字符集,整理,外键约束)。

  

如果两个数据库具有完全相同的表,其结构和数据与phpMyAdmin中显示的相同,那么我们可以将这两个数据库称为相同吗?

phpMyAdmin是MySQL的初级彩色天文百科全书对于天体物理学而言,所以这有点难以承诺。假设它不会隐藏任何东西,为了“有用”,那么这也应该是真的。

但是,即使确实如此,这也不是完整的图片。

  

这是什么“表之间的整合”指的是什么?

在讨论数据库时,这不是一个具有明确和明确含义的短语,但可能的解释是:

大多数桌子不在真空中操作。它们的列的值引用包含相同值的另一个表中的一行或多行。这些被称为外键。它们应该在表定义中定义,尽管有些开发人员没有(出于某些过时的原因)。

因此,表不仅需要具有相同的结构和值......而且所有其他表及其值也需要相同。

当在表中定义外键时,它们强制表之间的一致性。例如,如果“comments”表中的“user_id”引用了用户表中的“id”列,则可以配置数据库,以便在用户的id出现在comments表中时尝试删除用户。或者可以将其配置为在删除用户时自动删除该用户的所有“注释”行,或者如果删除了用户行,则将user_id设置为null。所有这三个操作都通过防止从一个表到另一个表的悬空无效引用来保持表之间的一种或另一种形式的内部一致性

这个的实际术语是参照完整性,但似乎这可能是作者的意思。

问题是,即使定义了外键约束,在假设(a)表的假设下,数据库通常专门配置 not 以在加载.sql转储文件时对此进行验证可能无法按顺序加载,因此无效引用是暂时可接受的,(b)加载期间的约束检查会产生额外的工作并减慢负载,并且应该是不必要的,因为(c)假定数据来自有效的数据库

可能的解释是您破坏了引用完整性,因为至少有一个其他表包含不同的数据。

除非你能找到证据证明这种情况并修复它......或者应用程序是开源的,你准备阅读并理解代码,以便了解错误的本质......你可能有点腌渍。

答案 1 :(得分:0)

如果表名相同 - 您可以尝试将表数据转储为插入并将此数据加载/导入到新表中。新列获取默认值或null。