我目前在 MySQL 中有一个数据库,我想将其导入 MS Access。
是否可以在保持所有关系完整的同时做到这一点(即不导出到 .csv 或使用 ODBC)?
我是这方面的菜鸟,所以非常感谢任何帮助。
谢谢。
你是说 SQL Server 吗?一个好的起点可能是查看 SQL Server Integration Services (SSIS),它可用于像这样传输数据。
谷歌也会有所帮助,查看第一个结果:
http://support.microsoft.com/kb/237980
顺便说一句,您在问题中说“.sql”:.SQL 文件是一个脚本文件,它可以执行任何操作,包括创建数据库、插入数据、删除表、删除数据,或获得正确的权限,调用系统过程并重新启动机器,格式化驱动器,发送电子邮件.. 仅供参考,.SQL 文件不是 SQL Server 使用的存储格式。
您需要解决两个不同的问题:
使用与 MySQL 数据库结构匹配的结构创建一个空的 MS Access 数据库。
从 MySQL 中提取数据并将其加载到 MS Access 中。
这并不容易,因为不同的 SQL 数据库提供不同的结构特征、不同的数据类型等等。您对 MySQL 的使用越复杂,您就越有可能在转换过程中遇到一些阻碍(例如,Access 根本不支持触发器)。相反,如果您使用 MySQL 作为简单的数据存储,您可能会发现转换相当容易。
要获得与 MySQL 数据库具有相同结构的 MS Access 数据库,最好的办法是找到一个提供逆向工程并支持 MySQL 和 MS Access 的数据库定义/图表工具。用它把你的MySQL数据库逆向工程成数据库图,然后把底层数据库改成MS Access,用工具生成数据库。
查看Dezign For Databases,它(无论如何在纸上)提供了执行此操作所需的功能。
为了泵送数据,有许多工具。这种操作一般称为ETL(提取、翻译、加载)。
虽然您可以通过 SQLyog 之类的工具将数据库的架构编写到脚本文件中,但您会发现语法因数据库而异(在您的情况下是 MySQL 到 Access),因此您无法直接应用脚本。
通过编辑脚本可以创建转换脚本(可能通过程序自动生成,具体取决于生成的脚本大小)。我认为您最好使用 ODBC 来复制表(和数据),然后手动从生成的脚本中提取和重新应用关系。耗时,但也是我希望的一次性操作。
当两个系统是同一个数据库时,有一些工具可以进行比较和脚本生成(TOAD for MySQL 和 RedGate Compare for Microsoft SQL),但它们不做跨数据库工作(至少不是我知道的那些) )。
如果创建 ODBC DSN,则可以使用 TransferDatabase 从 MySQL 数据库中导入。您可以使用 GET EXTERNAL DATA 命令(或 A2007/A2010 中的任何命令)手动执行此操作,并查看它的工作情况。它不会使所有数据类型都完全正确,但您可以进行一些按摩,并可能使其更接近最有效的数据类型。
是否有某些原因您不能只链接到 MySQL 表并直接使用它们?也就是说,你为什么需要导入 Access 呢?
访问:运行查询。只需确保调整 SQL 代码,因为每个 RDMS 都有自己的 sintaxis(尽管 SQL 是 ANSI 标准)。