在工作中一般项目的所有数据表信息都是放在一个数据库内的,近来有个需要把数据表按照不同类型进行区分,建立不同的数据库进行保存,区分开了更好,也没毛病
但是在测试中遇到了一个问题,有一个跨库查询的问题,本来数据表都放在一个库内也没问题,但是分开后会存在跨库查询的问题,那么SQL就会报错了
问题:
比方现在有两个数据库,两个服务,服务A连接的是sqltest数据库,将数据保存在sqltest数据库内
服务B连接的是sqltest001数据库,将数据保存在sqltest001数据库内
在服务B内有一个业务需要去查询服务A内的t_user表的数据
这里就牵扯到了同一数据库服务下的跨库查询了
解决:
方案一:查询sql中指定数据库名
如果直接在sqltest001数据库内查询t_user表,则会把报错说,sqltest001数据库内不存在t_user表
可以看到如果不指定数据库名,则默认查询的是当前数据库内表数据,当前数据库内没有t_user表,那肯定就报错了
那么查询的时候指定要查询的数据库呢?
可以看出navicat直接就提示了数据库名称,此时就可以查询出来了
方案二:建立一个视图进行查询
既然根源问题是想查询另一个数据库内的t_user表数据,那么建一个视图也是可以的
建一个视图,视图名称就叫t_user,视图的sql语句就是select * from `sqltest`.t_user;
视图创建之后就可以直接在当前数据库查询t_user表数据了,而且不用每次sql查询都去指定一下另外数据库的名称