在工作中一般项目的所有数据表信息都是放在一个数据库内的,近来有个需要把数据表按照不同类型进行区分,建立不同的数据库进行保存,区分开了更好,也没毛病

但是在测试中遇到了一个问题,有一个跨库查询的问题,本来数据表都放在一个库内也没问题,但是分开后会存在跨库查询的问题,那么SQL就会报错了

问题:

比方现在有两个数据库,两个服务,服务A连接的是sqltest数据库,将数据保存在sqltest数据库内

服务B连接的是sqltest001数据库,将数据保存在sqltest001数据库内

在服务B内有一个业务需要去查询服务A内的t_user表的数据

这里就牵扯到了同一数据库服务下的跨库查询

MySQL同数据库服务跨库查询_视图

解决:

方案一:查询sql中指定数据库名

如果直接在sqltest001数据库内查询t_user表,则会把报错说,sqltest001数据库内不存在t_user表

MySQL同数据库服务跨库查询_跨库查询_02

可以看到如果不指定数据库名,则默认查询的是当前数据库内表数据,当前数据库内没有t_user表,那肯定就报错了

那么查询的时候指定要查询的数据库呢?

可以看出navicat直接就提示了数据库名称,此时就可以查询出来了

MySQL同数据库服务跨库查询_MySQL_03

select * from sqltest.t_user;
select * from `sqltest`.t_user;(推荐使用,有些版本好像不支持上面那样的sql,默认sqltest就是表名;
建议将数据库名用反引号括起来,sql会进行标识)
  • 1.
  • 2.
  • 3.

方案二:建立一个视图进行查询

既然根源问题是想查询另一个数据库内的t_user表数据,那么建一个视图也是可以的

建一个视图,视图名称就叫t_user,视图的sql语句就是select * from `sqltest`.t_user;

create view t_user as select * from `sqltest`.t_user;
  • 1.

视图创建之后就可以直接在当前数据库查询t_user表数据了,而且不用每次sql查询都去指定一下另外数据库的名称

MySQL同数据库服务跨库查询_视图_04