使用engine对mysql表建立远程操控

功能效果

使用MySQL的engine引擎将一个表远程到另一个新的MySQL数据库中,从而实现在新的数据库中访问其他数据库里的表数据。

应用场景

对于某些需求中,可能存在一个项目同时访问两个数据库表的情况,一个主数据库,一个从数据库,当从数据库只用到一张表的时候,可以通过将这个表映射到另一个数据库连接上,然后连上主数据库也就能访问到从数据库上的表数据了。

映射分析

这种映射就像远程桌面一样,可以操作别人的电脑,但远程的看到的文件等并不属于自己的电脑,同理,MySQL表映射也是,只是实现了在主数据库中访问到从数据库表数据的效果,但是这张表的结构及数据并不直接属于主数据库,删掉主数据库中的表之后,只相当于把远程断了,表结构和数据在从数据库中还是存在的

实现sql

CREATE TABLE `需要映射的新表名` (
  `db` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
  `name` char(64) NOT NULL DEFAULT '',
  `type` enum('FUNCTION','PROCEDURE') NOT NULL,
  `specific_name` char(64) NOT NULL DEFAULT '',
  `language` enum('SQL') NOT NULL DEFAULT 'SQL',
  `sql_data_access` enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA') NOT NULL DEFAULT 'CONTAINS_SQL',
  `is_deterministic` enum('YES','NO') NOT NULL DEFAULT 'NO',
  `security_type` enum('INVOKER','DEFINER') NOT NULL DEFAULT 'DEFINER',
  `param_list` blob NOT NULL,
  `returns` longblob NOT NULL,
  `body` longblob NOT NULL,
  `definer` char(93) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH') NOT NULL DEFAULT '',
  `comment` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `character_set_client` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `collation_connection` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `db_collation` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `body_utf8` longblob,
  PRIMARY KEY (`db`,`name`,`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC
 ENGINE=FEDERATED DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC CONNECTION='mysql://root:root@127.0.0.1:3306/数据库名/需要映射的源表名';

《注意事项》

1.对本地虚拟表的结构修改,并不会修改远程表的结构

2.truncate 命令,会清除远程表数据

3.drop命令只会删除虚拟表,并不会删除远程表

4.不支持 alter table 命令

5.使用索引时,虚拟表与实体表应同步建立索引

写完后发现已经写过了,供参考叭。
https://blog.csdn.net/qq_40690077/article/details/121661487?spm=1001.2014.3001.5501

猜你喜欢

转载自blog.csdn.net/qq_40690077/article/details/125251519
今日推荐