当数据库属于不同的用户时,将数据从一个数据库中的表复制到另一个数据库中的表的最佳方法是什么?

我知道我可以用

INSERT INTO database2.table2 SELECT * from database1.table1

但这里的问题是database1和database2都在不同的MySQL用户下。所以user1只能访问database1, user2只能访问database2。任何想法?


当前回答

MySql工作台:强烈推荐

这将很容易处理迁移问题。支持在MySql和SqlServer之间迁移指定数据库的指定表。你绝对应该试一试。

其他回答

使用MySQL Workbench,您可以使用数据导出将表转储到本地SQL文件(仅数据,仅结构或结构和数据),然后使用数据导入将其加载到另一个DB中。

您可以同时打开多个连接(不同的主机、数据库、用户)。

如果你的表在同一个mysql服务器上,你可以运行下面的命令

CREATE TABLE destination_db.my_table SELECT * FROM source_db.my_table;
ALTER TABLE destination_db.my_table ADD PRIMARY KEY (id); 
ALTER TABLE destination_db.my_table MODIFY COLUMN id INT AUTO_INCREMENT;

获得所需的所有查询的一种简单方法是使用来自information_schema和concat的数据。

SELECT concat('CREATE TABLE new_db.', TABLE_NAME, ' LIKE old_db.', TABLE_NAME, ';') FROM `TABLES` WHERE TABLE_SCHEMA = 'old_db';

然后你会得到一个结果列表,看起来像这样:

CREATE TABLE new_db.articles LIKE old_db.articles;
CREATE TABLE new_db.categories LIKE old_db.categories;
CREATE TABLE new_db.users LIKE old_db.users;
...

然后就可以运行这些查询了。

但是它不能与MySQL视图一起工作。你可以通过在初始查询中附加AND TABLE_TYPE = 'BASE TABLE'来避免它们:

这里有另一个简单的方法:

使用DB1;创建表TB1 复制剪贴板中的语法,在DB2中创建TB1 使用DB2; 将语法粘贴到这里以创建表TB1

插入到db2。SELECT * from DB1.TB1;

我知道这是一个老问题,只是回答,以便任何人降落在这里得到更好的方法。

从5.6.10开始你就可以做到

CREATE TABLE new_tbl LIKE orig_tbl;

参考文档:https://dev.mysql.com/doc/refman/5.7/en/create-table-like.html