我正在将一个MS Access应用程序(它将表链接到MSSQL Server)迁移到MySQL。
作为解决MSAccess表命名问题的一种方法,我正在寻找一种解决方案,添加一个指向MySQL数据库中现有表的MySQL表别名。理想情况下,我希望在mysql中创建一个别名“dbo_customers”,它也指向mysql中的customers表。
为了清楚起见,我 * 不 * 希望在这样的查询中为表名设置别名:
SELECT * FROM customers AS dbo_customers
但是,我希望能够发出以下查询:
SELECT * FROM dbo_customers
并让它返回customers表中的数据。
8条答案
按热度按时间g2ieeal71#
我突然想到
也许不是最好的解决方案,但应该工作,因为视图是可更新的。肯定会工作的只读
bhmjp9jg2#
您可以创建一个View。
如果这对您不起作用,您可以尝试创建表的卷影副本,并使用触发器来保持表同步。
例如:
不完全是一个“别名”,也远非完美。但如果所有其他方法都失败了,这是一个选择。
mspsb9vt3#
通过MERGE表引擎,有一个更简单的MySQL解决方案:
假设我们有一个名为
rus_vacancies
的表,并且需要它的英文等效表现在,对于任何读写操作,表
rus_vacancies
等于表eng_vacancies
一个限制-原始表必须具有ENGINE=MyISAM(可以通过“
alter table rus_vacancies ENGINE=MyISAM
“轻松完成)x9ybnkn64#
您可以创建一个名为
dbo_customers
的view,它由customers
表支持。bvuwiixz5#
@OMG Ponies小马在评论中表示:
为什么不重命名该表?
......对我来说,这似乎是显而易见的答案。
如果您为MySQL表customers创建一个ODBC链接表,它将被称为customers,然后您所要做的就是将该表重命名为dbo_customers。我认为完全没有必要为此目的在MySQL中创建一个视图。
也就是说,我不希望有一个Access应用程序使用SQLServer表名,而MySQL表的名称却不一样--这只会让人感到困惑,并会导致维护问题(也就是说,如果可能,Access前端中的链接表与MySQL表具有相同的名称会更简单)。如果我处于您的位置,我会得到一个搜索和替换实用程序,并在整个Access前端将所有SQLServer表名替换为MySQL表名。您可能需要一次一个表地执行此操作,但在我看来,现在完成这一工作所花费的时间将远远超过Access前端开发过程中的清晰度。
czq61nw16#
我总是将Access中的“链接到SQL”表重命名为
从
{dbo_NAME}
更改为{NAME}
。该链接将表名创建为
{dbo_NAME}
,但Access偶尔会出现dbo_前缀问题。67up9zun7#
别名是不错的,但MySQL没有这样的特性。
除了创建视图之外,还有一个选项可以满足您的需要,那就是在本地使用FEDERATED storage engine。
目前有一些limitations with the FEDERATED storage engine。下面是一些特别重要的limitations with the FEDERATED storage engine:
8tntrjer8#
我想提一下我探索过(并放弃了)的一个糟糕的解决方案,那就是在.frm、.MYD和.MYI文件上使用硬链接,这些文件对应于我在
/var/lib/mysql/{name_of_my_database}/
中的表。对于InnoDB表,它根本不能(即使您硬链接.idb文件),因为表也在ibdata1中被引用。
对于MyISAM表,它可以正常工作,但它不能,因为在内存中,这些表仍然是不同的,因此不共享缓存。因此,如果您将一行写入
original_table
,它不会立即出现在aliased_table
中。您必须首先刷新表......这会破坏目的,甚至会导致数据丢失(如果在刷新前在原始数据和别名中都插入了一行,则只保留一行)。我认为我的实验值得一提,作为一个警示故事。