有没有办法将信息从一个数据库传输到另一个数据库?

时间:2009-11-24 00:06:34

标签: mysql

我今天想知道是否可以通过一个查询将数据从一个数据库传输到另一个数据库。说我有两张桌子:

CREATE TABLE `Table_One` (
  `ID` int(11) NOT NULL auto_increment,
  `Type_ID` int(11) NOT NULL,
  `Title` varchar(255) NOT NULL,
  `Date` varchar(100) NOT NULL,
  `Address` varchar(100) NOT NULL,
  `Town` varchar(100) NOT NULL,
  `Desc` longtext NOT NULL,
  `Inserted` varchar(100) NOT NULL,
  `Updated` varchar(100) NOT NULL,
  `User_ID` int(11) NOT NULL,
  `Pending` varchar(255) NOT NULL default '0',
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=80 DEFAULT CHARSET=latin1;

CREATE TABLE `Table_Two` (
  `ID` int(11) NOT NULL auto_increment,
  `Title` varchar(255) NOT NULL,
  `Town` varchar(255) NOT NULL,
  `Desc` varchar(255) NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

我正在考虑按照

的方式做点什么
INSERT INTO Table_Two (0,SELECT Title, Town, Desc FROM Table_One)

这似乎不正确,因为Table_Two如何知道Table_One在另一个数据库中?我可以使用模式文件使其成为更具体的查询吗?这甚至可以不使用服务器端语言吗?

谢谢,
列维

4 个答案:

答案 0 :(得分:4)

是的,有办法。在查询中使用各自的数据库作为表名的前缀,例如: (如果从Table_Two的数据库运行查询:

INSERT INTO Table_Two (Field1, Field2, Field3) 
SELECT t.Field1, t.Field2, t.Field3 FROM anotherdb.Table_One t;

来自MySQL文档

  

您可以将默认数据库中的表称为tbl_name,或将db_name.tbl_name称为显式指定数据库。您可以将列引用为col_name,tbl_name.col_name或db_name.tbl_name.col_name。除非引用不明确,否则无需为列引用指定tbl_name或db_name.tbl_name前缀。有关需要更明确的列引用形式的歧义的示例,请参见第8.2.1节“标识符限定符”。

答案 1 :(得分:1)

实际上你可以:

SELECT ID, TITLE (all the params)
INTO Table_Two
FROM Table_One

只要表格相同,就应该非常顺利。

希望这有帮助

答案 2 :(得分:1)

insert into schema1.table_two (title,town,desc)
select title,town,desc
from schema2.table_one;

你在谈论不同的实例吗?

答案 3 :(得分:0)

根据源表的大小,这可能不是将数据从一个数据库(实例?架构?)移动到另一个数据库的最有效方法。我看到你有问题标记,“mysql”,所以我将假设你正在使用的产品。如果你将一个大表从一个模式移动到另一个模式(无论它们是否在不同的实例中),使用mysqldump导出一个,然后导入到另一个中可能会更快。