- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图将数据从数据库中的一个表复制到另一个数据库中的新空表。两个数据库都来自同一应用程序,但新数据库的版本更高。因此,这两个表具有相似的结构,只是新表和空表多了几列。我对数据库不是很熟悉,所以我使用了一些尴尬的方法来做到这一点。首先,我比较两个表并找出附加列,然后备份旧表并将附加列添加到旧表中,并确保新添加的列具有完全相同的属性。所以这两个表具有完全相同的结构......或者我是这样认为的。然后我将旧表导出到 .sql 文件。然后,我编辑 .sql 文件中出现的表名并将其导入到新表中。以上操作都是在phpMyAdmin中完成的。此后,这两个表在 phpMyAdmin 中看起来是相同的,它们具有相同的结构和数据。我认为数据迁移成功,但是,当我运行应用程序时,前端显示一些警告消息。我没有对应用程序执行任何可能触发这些错误消息的其他操作,因此我认为这与我迁移数据的方式有关。不确定,我写信给应用程序作者,他说“通过手动操作,你搞乱了表之间的集成”,所以我的问题是:
mysql数据库仅仅是表的集合吗?如果两个数据库具有完全相同的表,具有相同的结构和数据,如 phpMyAdmin 所示,我们可以称这两个数据库相同吗?这个“表间整合”指的是什么?
我对数据库的了解非常有限,我想我最好先回答这些问题,然后才能再次写信给作者并询问他更具体的问题。
我使用的是 Joomla 3.4,上面提到的应用程序是一个名为 Preachit4.0 的扩展。
最佳答案
Is mysql database merely a collection of tables?
这有点轻描淡写,因为它是表、 View 、过程、函数、触发器、事件的集合...但是,是的,数据库只不过是其各个部分的总和,包括它们的元数据(字符集、排序规则、外键约束)。
If two databases have exactly same tables with same structure and data as shown in phpMyAdmin, can we call these two databases identical?
phpMyAdmin 之于 MySQL 就像初级彩色太空百科全书之于天体物理学,所以这有点难以 promise 。假设它没有向您隐瞒任何事情,以努力“提供帮助”,那么这也应该是正确的。
但是,即使这是真的,这也不是完整的情况。
What is this "integration between the tables" referring to?
在讨论数据库时,这不是一个具有清晰明确含义的短语,但可能的解释是:
大多数表都不是在真空中运行的。它们的列的值引用另一个表中包含相同值的一行或多行。这些称为外键。它们应该在表定义中定义,尽管有些开发人员没有这样做(由于某些过时的原因)。
因此,不仅这个表需要具有相同的结构和值...而且所有其他表及其值也需要相同。
当在表中定义外键时,它们会强制表之间的一致性。例如,如果“comments”表中的“user_id”引用了用户表中的“id”列,则可以配置数据库,以便在用户的 id 出现在 comments 表中时拒绝删除用户的尝试。或者可以将其配置为在删除用户时自动删除该用户的所有“评论”行,或者在删除用户行时将 user_id 设置为 null。所有这三个操作都通过防止从一个表到另一个表的悬空、无效引用来维护表之间的一种或另一种形式的内部一致性
实际的术语是参照完整性,但这似乎就是作者的意思。
问题是,即使定义了外键约束,数据库通常也不会专门配置为在加载 .sql 转储文件时验证这一点,假设 (a) 表可能不会按顺序加载,因此暂时可以接受无效引用,(b) 加载期间的约束检查会增加额外的工作并减慢加载速度,并且应该是不必要的,因为,(c) 假设数据来自有效的数据库.
可能的解释是您破坏了引用完整性,因为至少还有一个其他表包含不同的数据。
除非您能找到这种情况的证据并修复它...或者应用程序是开源的并且您准备阅读和理解代码以了解错误的本质...您可能有点麻烦。
关于Mysql数据库: Is it merely a collection of tables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32802250/
我是一名优秀的程序员,十分优秀!