MySQL导入导出

来源:互联网 发布:2014火的网络歌曲 编辑:程序博客网 时间:2024/05/16 07:19

使用mysqldump:(mysqldump命令位于默认安装C:/Program Files/MySQL/MySQL Server 5.1/bin目录中),mysqldump工具很多方面类似相反作用的工具mysqlimport,它们有一些同样的选项。但mysqldump能够做更多的事情,它可以把整个数据库装载到一个单独的文本文件中。这个文件包含有所有重建您的数据库所需要的SQL命令。这个命令取得所有的模式(Schema,后面有解释)并且将其转换成DDL语法(CREATE语句,即数据库定义语句),取得所有的数据,并且从这些数据中创建INSERT语句,这个工具将您的数据库中所有的设计倒转。因为所有的东西都被包含到了一个文本文件中,这个文本文件可以用一个简单的批处理和一个合适SQL语句导回到MySQL中,这个工具令人难以置信地简单而快速。

   因此,如果您想装载整个数据库test的内容到一个文件中,可以使用下面的命令:
   C:/Program Files/MySQL/MySQL Server 5.1/bin>mysqldump -uroot -proot test > d:/test_file.txt
 
   C:/Program Files/MySQL/MySQL Server 5.1/bin>mysqldump -uroot -proot test > d:/test_file.sql
 
   执行这二条语句是一样的效果,只是文件后缀名格式不一样,导出的数据信息是完全一样的。
 
   这个命令也允许您指定一个表进行dump(备份/导出/装载)。如果您只是希望把数据库test中的表friend的整个内容导出到一个文件,可以使用下面的命令:

   C:/Program Files/MySQL/MySQL Server 5.1/bin>mysqldump -uroot -proot test friend > d:/friend.sql
 
   如果你想把数据库test中的表,有选择性的选择表导出到一个文件,也可以使用下面的命令:
 
  C:/Program Files/MySQL/MySQL Server 5.1/bin>mysqldump -uroot -proot test friend pet telephone owner vote >d:/my2009.sql
 
 
    在试试这个命令的强大功能吧:
 
  导出所有表和所有数据,只需执行简单的下面那条命令就OK
 
  C:/Program Files/MySQL/MySQL Server 5.1/bin>mysqldump -uroot -proot --default-character-set=latin1 test > d:/test_file.sql
 
 
CREATE TABLE `telephone` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tname` char(20) DEFAULT NULL,
  `handset` char(20) DEFAULT NULL,
  `housephone` char(20) DEFAULT NULL,
  `officephone` char(20) DEFAULT NULL,
  `faxes` char(20) DEFAULT NULL,
  `remark` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `handset` (`handset`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='通讯录';
 
*********************************************************************************
 
   MySQL 模糊查询全文索引,不同字段的SQL中文编码索引:
 
   许多朋友在使用mysql进行中文模糊查找时(如select * from telephone where tname like "%中文%"),就象我现在一样,查寻不到记录结果,显示0条记录。如何解决这个问题呢?按如下SQL语句执行试试吧:
 
 SELECT * FROM telephone WHERE tname REGEXP "芳";
 
  SELECT * FROM telephone WHERE handset REGEXP "159";

  SELECT * FROM telephone WHERE tname like "%李%";
 
  SELECT * FROM telephone WHERE tname like binary "%李%";

group by 先排序再分组的问题

--
-- 表结构 `testemp`
--

CREATE TABLE IF NOT EXISTS testemp
(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tname` char(16) NOT NULL,
  `month` int(11) NOT NULL,
  `serial` int(11) NOT NULL,
  `other` char(20) NOT NULL,
  PRIMARY KEY (`id`)
);

--
-- 表中的数据 `testemp`
--

INSERT INTO `testemp` (`id`, `tname`, `month`, `serial`, `other`) VALUES
(1, 'a', 200905, 2, 't1'),
(2, 'e', 200907, 2, 't2'),
(3, 'b', 200903, 7, 't3'),
(4, 'b', 200910, 4, 't4'),
(5, 'a', 200902, 1, 't5'),
(6, 'c', 200901, 5, 't6'),
(7, 'd', 200904, 8, 't7'),
(8, 'c', 200906, 3, 't8'),
(9, 'f', 200908, 6, 't9');

查询整个表数据
select * from testemp;

我们想得到id最大的tname怎么办?
select max(id),tname,month,serial,orher from testemp group by tname;

虽然每个tname的最大id得到了,但是,其他数据依然是每个tname的第一行;

用子查询得到如下:
select * from (select * from testemp order by id desc) t group by tname;

用这种子查询;
select * from testemp t where id in (select max(id) from testemp group by tname);

另外还有一种子查询方法;
select * from testemp t inner join (select * from testemp order by id desc) t2 on t.id=t2.id group by t.tname;


为了想提高效率,建立视图查询,先按id desc排个视图,再group by tname,岂不是相当于子查询?
CREATE VIEW `testv` AS select `testemp`.`id` AS `id`,
`testemp`.`tname` AS `tname`,
`testemp`.`month` AS `month`
from `testemp` order by `testemp`.`id` desc;

视图建立了,再查询看效果;
SELECT * FROM `testv` group by tname;

select * from testemp t inner join (select max(id) as id,tname from testemp group by tname) t2 on t.id=t2.id and t.tname=t2.tname;

select * from (select * from testemp order by month desc,serial desc) t group by tname;

select * from (select * from testemp order by month asc,serial desc) t group by tname;

select max(id),tname,month,serial,other from testemp group by tname;
原创粉丝点击