一、同一连接下的不同数据库通过视图映射到本地

假设在同一连接下有数据库db1和db2,现需要将db2.user表映射到db1中,可以使用如下语句在db1中创建视图

 

CREATE OR REPLACE VIEW db1.vuser AS SELECT * FROM db2.user

 

MySQL 建立映射关系 mysql表映射_数据库

 

 

 db2.user成功映射到db1中

MySQL 建立映射关系 mysql表映射_数据库_02

 

 

 在这样 我们对db1.vuser中的数据增删改查,就可以直接影响到db2.user,当然前提是拥有操作db2.user相关操作权限,把我们db2中需要的表通过视图全部映射到db1中,我们就可以像操作本地库一样操作异库。

 

 

***一.1.

MySQL使用CREATE OR REPLACE VIEW语句修改视图

在MySQL中,使用CREATE OR REPLACE VIEW语句可以修改视图。视图存在时,可以对视图进行修改;视图不存在时,可以创建视图。

CREATE OR REPLACE VIEW语句的语法格式如下:

 

MySQL 建立映射关系 mysql表映射_mysql_03

 

 

  • ALGORITHM:可选。表示视图选择的算法。
  • UNDEFINED:表示MySQL将自动选择所要使用的算法。
  • MERGE:表示将使用视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。
  • TEMPTABLE:表示将视图的结果存入临时表,然后使用临时表执行语句。
  • 视图名:表示要创建的视图的名称。
  • 属性清单:可选。指定了视图中各个属性的名词,默认情况下,与SELECT语句中查询的属性相同。
  • SELECT语句:是一个完整的查询语句,表示从某个表中查出某些满足条件的记录,将这些记录导入视图中。
  • WITH CHECK OPTION:可选。表示修改视图时要保证在该视图的权限范围之内。
  • CASCADED:可选。表示修改视图时,需要满足跟该视图有关的所有相关视图和表的条件,该参数为默认值。
  • LOCAL:表示修改视图时,只要满足该视图本身定义的条件即可。

 

实例

使用CREATE OR REPLACE VIEW语句修改视图department_view1。操作步骤如下:

1. 使用DESC语句查看department_view1的结构,以便与修改后的结果进行对比。如下图所示:

从上图中的查询结果可以看出,视图department_view1有4个属性:d_id、d_name、function和address。

2. 执行CREATE OR REPLACE VIEW语句来修改视图。SQL代码如下:

MySQL 建立映射关系 mysql表映射_MySQL 建立映射关系_04

 

 

在DOS提示符窗口中查看MySQL使用CREATE OR REPLACE VIEW语句修改视图的操作效果。如下图所示:

从上图中显示的结果可以看出,修改成功。

3. 重新执行DESC语句来查看视图的详细信息。如下图所示:

从上图中显示的结果可以看出,department_view1视图中只有3个属性:department、function和location。

视图修改成功。

 

 

 

 

 

 

 

 

 

二、不同服务下通过FEDERATED存储引擎访问在远程数据库的表中的数据

Federate存储引擎也是mysql比较常用的存储引擎,使用它可以访问远程的mysql数据库上的表,这种引擎的作用类似于oracle数据库的dblink

1.查看federated引擎是否开启

点击进入Navicat并点击键盘上F6,出现命令行界面 ,输入指令:show engines;

MySQL 建立映射关系 mysql表映射_MySQL_05

 

 

 以上说明federated已经安装但是并没有开启

2.开启federated引擎

Windows系统 : 在my.ini的[mysqld]中加入federated(注意:我这里是mysql解压版,直接在解压目录就可以找到ini文件,安装版该文件路径可能有出入)

MySQL 建立映射关系 mysql表映射_数据库_06

 

 

 重启mysql服务,管理员打开CMD

 

cmd>net stop mysql
cmd>net start mysql

MySQL 建立映射关系 mysql表映射_mysql_07

 

 Linux操作系统:vi /etc/my.cnf(以实际路径为准),加入一行federated,保存并退出

MySQL 建立映射关系 mysql表映射_MySQL 建立映射关系_08

 

 

重启mysql服务

mysql>service mysqld restart

再次查看,输入指令:show engines;

MySQL 建立映射关系 mysql表映射_MySQL_09

 

 3.创建fedearted表

 

CREATE TABLE (......) ENGINE =FEDERATED CONNECTION='mysql://[name]:[pass]@[location]:[port]/[db-name]/[table-name]'

name--mysql用户名

pass--mysql密码

location--ip

port:端口号

db-name:数据库名

table-name:表名

 

CREATE TABLE `user` (
`Id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
`UserName` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`Name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
`Password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
`Status` int(0) NOT NULL COMMENT '状态1有效0无效',
`LastLoginTime` datetime(0) NULL DEFAULT NULL,
`CreateTime` datetime(0) NULL DEFAULT NULL,
`Email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = FEDERATED CONNECTION='mysql://root:root@远程数据库IP:3306/admboot/user';

 

至此远程数据库的user表就同步到我们本地数据库上了。我们就可以像操作本地库一样操作远程数据库了。

 

注意事项:

  1. 对本地虚拟表的结构修改,并不会修改远程表的结构
  2. truncate 命令,会清除远程表数据
  3. drop命令只会删除虚拟表,并不会删除远程表
  4. 不支持 alter table 命令
  5. 使用索引时,虚拟表与实体表应同步建立索引

 

三、跨库操作的其他方案

跨库操作的方案有很多种,比如我们还可以在程序上支持多库连接,那么在数据库上我们什么都不需要做,在程序中设置好对应数据库数据即可。

优点:

  • 不受数据库类型限制,主库和从库可以是不同的数据库。
  • 不建立数据库链,查询速度快

缺点:

  • 表间关联查询只能在内存中进行
  • 多库事务一致性不好处理

比如还可以通过接口的方式调用从库数据,等等。大家还有什么比较好的方案可以留言探讨。

 

 

 

 

 

 

 

简单来说就是在建表语句(caeate table)后面加入一行指令(加入到最后面,并且该账号要有创建表的权限哦!这一行的代码信息均是原始表的信息。最后注意的是必须要打开FEDERATED这个引擎,需要选择这个引擎来创建表)

指令如下:

例:

ENGINE=FEDERATED DEFAULT CHARSET=utf8

connection = 'mysql://adang:adang@10.10.170.46:3306/data_reporting_2020_3/btlmx'

翻译:ENGINE(引擎)=FEDERATED(选择这个引擎可以实现映射) DEFAULT CHARSET(字符集)=utf8

connection = ‘mysql://服务器账号:服务器密码@服务器:端口号/数据库名/表名’(这里的数据库名和表名是中文的话容易报错)

 

实例:

CREATE TABLE `course_copy111` (
`c_id` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '课程表',
`c_name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`t_id` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`c_id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8
connection = 'mysql://root:root@localhost:3306/jingdian/course_copy1';

 

***开启FEDERATED引擎

1.查看federated引擎是否开启

点击进入Navicat并点击键盘上F6,出现命令行界面 ,输入指令:show engines;

MySQL 建立映射关系 mysql表映射_MySQL 建立映射关系_10

 

2.开启federated引擎

 Windows系统 : 在my.ini中加入federated

MySQL 建立映射关系 mysql表映射_mysql_11

 

 

MySQL 建立映射关系 mysql表映射_MySQL_12

 

 重启MySQL,搞定!不会重启MySQL就重启电脑