当数据库在不同用户下时,将数据从一个数据库中的表复制到另一个数据库中的表的最佳方法是什么?
我知道我可以使用
INSERT INTO database2.table2 SELECT * from database1.table1
但这里的问题是两者database1
都database2
在不同的 MySQL 用户下。所以user1
只能访问database1
和user2
只能访问database2
。任何想法?
如果您有 shell 访问权限,您可以使用mysqldump
转储 的内容database1.table1
并将其通过管道传输mysql
到database2
. 这里的问题table1
仍然是table1
.
mysqldump --user=user1 --password=password1 database1 table1 \
| mysql --user=user2 --password=password2 database2
也许您需要使用另一个查询重命名table1
为。table2
另一方面,您可以使用 sed 在 to 管道之间将 table1 更改为 table2。
mysqldump --user=user1 --password=password1 database1 table1 \
| sed -e 's/`table1`/`table2`/' \
| mysql --user=user2 --password=password2 database2
如果 table2 已经存在,您可以将参数添加到第一个不允许创建 table-creates 的 mysqldump。
mysqldump --no-create-info --no-create-db --user=user1 --password=password1 database1 table1 \
| sed -e 's/`table1`/`table2`/' \
| mysql --user=user2 --password=password2 database2
CREATE TABLE db1.table1 SELECT * FROM db2.table1
其中 db1 是目标,db2 是源
如果您使用的是PHPMyAdmin,它可能非常简单。假设您有以下数据库:
DB1 & DB2
DB1 有一个表 users,您希望将其复制到 DB2
在 PHPMyAdmin 下,打开 DB1,然后转到 users 表。
在此页面上,单击右上角的“操作”选项卡。在 Operations 下,查找Copy table to (database.table) 部分:
&你完成了!
这将很容易处理迁移问题。您可以在 MySql 和 SqlServer 之间迁移选定数据库的选定表。你一定要试一试。
我使用 Navicat for MySQL...
它使所有数据库操作变得容易!
你只需在 Navicat 中选择两个数据库然后使用。
INSERT INTO Database2.Table1 SELECT * from Database1.Table1
它对我有用
CREATE TABLE dbto.table_name like dbfrom.table_name;
insert into dbto.table_name select * from dbfrom.table_name;
如果您的表在同一个 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;
这是另一种简单的方法:
INSERT INTO DB2.TB1 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
使用 MySql Workbench 的导出和导入功能。步骤:
1. 选择你想要的值
E.g. select * from table1;
使用与第一个相似的列创建一个新表
E.g. create table table2 like table1;
从新表中全选
E.g. select * from table2;
单击导入并选择您在步骤 2 中导出的 CSV 文件
Try mysqldbcopy
(documentation)
Or you can create a "federated table" on your target host. Federated tables allow you to see a table from a different database server as if it was a local one. (documentation)
After creating the federated table, you can copy data with the usual insert into TARGET select * from SOURCE
使用 MySQL Workbench,您可以使用数据导出仅将表转储到本地 SQL 文件(仅数据、仅结构或结构和数据),然后使用数据导入将其加载到另一个数据库中。
您可以同时打开多个连接(不同的主机、数据库、用户)。
首先创建转储。如果已经存在,则添加--no-create-info --no-create-db
标志:table2
mysqldump -u user1 -p database1 table1 > dump.sql
然后输入user1
密码。然后:
sed -e 's/`table1`/`table2`/' dump.sql
mysql -u user2 -p database2 < dump.sql
然后输入user2
密码。
与helmor 的答案相同,但该方法更安全,因为密码不会以原始文本形式暴露给控制台(反向搜索、密码嗅探器等)。如果它是从对其权限施加适当限制的脚本文件执行的,则其他方法很好。
获取所需的所有查询的一种简单方法是使用来自 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'
您可以通过从初始查询中追加来避免它们:
这是您需要定期做的事情,还是只做一次?
您可以进行导出(例如使用 phpMyAdmin 或类似方法),将您的表格及其内容编写成文本文件,然后您可以将其重新导入其他数据库。
使用以下步骤将一些列从一个数据库表复制并插入到另一个数据库表 -
2.INSERT INTO db2.tablename SELECT columnname1,columnname2 FROM db1.tablename;
在 xampp 中只需将所需的表导出为 .sql 文件,然后将其导入所需的
对我来说,我需要将特定模式指定为“information_schema.TABLES”
例如。
SELECT concat('CREATE TABLE new_db.', TABLE_NAME, ' LIKE old_db.', TABLE_NAME, ';') FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'old_db';
像 sakila.customer (Database_name.tablename) 一样创建表destination_customer,这将只复制源表的结构,对于数据也要与结构一起复制,这样做创建表destination_customer as select * from sakila.customer