(日常疑问)同一个mysql为什么可以查询其他库的数据?

Posted 简暄札记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(日常疑问)同一个mysql为什么可以查询其他库的数据?相关的知识,希望对你有一定的参考价值。

1、SpringBoot项目中,连接单个mysql的某个数据库,是否可以查询其他数据库内的表数据和插入、更新数据?事务是否会生效?

2、和多个mysql只有一个数据库的区别是什么?

3、多个mysql不就是分布式了?那普通事务肯定不启用,那需要使用什么事务?

测试前提:

基于SpringBoot  + mybatis-plus

 /**
  * @author Rao
  * @Date 2021/1/13
  **/
 @TableName(schema = "user")
 @Data
 public class Tes {
 
  private Long id;
 
  private Integer num;
 
  private String name;
 
 }
 /**
  * @author Rao
  * @Date 2021/1/13
  **/
 @TableName(schema = "test")
 @Data
 public class Test {
 
  private Long id;
 
  private String name;
 
 }
 @Override
 @Transactional(rollbackFor = Exception.class)
 public void test(){
  List<User> users = userDao.selectList(null);
  log.info(JsonUtil.toString(users));
  log.info("------------");
 
  // 这里插入的是 同一个MySQL下的 user 数据库的 tes表
  Tes tes = new Tes();
  tes.setName("测试");
  int insert = tesDao.insert(tes);
  log.info("测试插入数据:{}",insert);
  log.info("------------");
 
  // 这里插入的是 同一个MySQL下的 test 数据库的test表
  Test test = new Test();
  test.setName("测试");
  int inserta = testDao.insert(test);
  log.info("测试插入数据:{}",inserta);
  log.info("------------");
 
  int i = 1 / 0;
 }

测试结果:

处理单个Mysql下的不同DataBase的Table数据,取决于项目连接Mysql的用户权限级别。

第一个问题:测试结果是,会保证事务数据中的一致性,连接用户具有操作其他DataBase的权限,即代表,尽管你连接的是 (xxxx:3306/a?xxx   )DATABASE:a ,表示你的sql不做任何处理默认是查询 a库下的表数据,如果你的model上加上@Tablename(schme="xxx"),指定,则可以访问其他你当前账号有权限访问的数据库的数据。事务不会即使更新其他数据库的数据,事务也不会受到影响。

Spring的事务是和连接有关系的,默认事务是自动提交的。

第二个问题:很明显,多个mysql涉及的就是多个资源的问题。这就相当于是分布式事务


以上是关于(日常疑问)同一个mysql为什么可以查询其他库的数据?的主要内容,如果未能解决你的问题,请参考以下文章

进阶Mysql分库分表方案,如何分,怎样分?

mysql prepare疑问

[日常] 解决mysql localhost可以连接但是127.0.0.1不能连接

日常积累Mysql

MySQL 日常运维业务账号权限的控制

?March2020疑问点