Mysql使用LOAD DATA INFILE语句插入数据,数据内容为文本文件newdata.txt,将新数据插入到YouClass表中;
表YouClass原有内容如下:
id | name | sex | degree | passtest |
---|---|---|---|---|
2 | Mary | 1 | 89.34 | 0 |
3 | tom | 0 | NULL | 0 |
newdata.txt内容如下:
4 John 0 90 1
5 Jack 1 60 \N
mysql命令行执行如下命令:
mysql> LOAD DATA LOCAL INFILE '/Users/hugang/Desktop/newdata.txt' INTO TABLE YouClass;
表YouClass变更为
id | name | sex | degree | passtest |
---|---|---|---|---|
2 | Mary | 1 | 89.34 | 0 |
3 | tom | 0 | NULL | 0 |
4 | John | 0 | 90.00 | 1 |
5 | Jack | 1 | 60.00 | NULL |
说明:
LOCAL,从客户主机上按路径读取文件;不添加LOCAL,则从服务器上按路径读取文件。
数据文件中\N标记为NULL。
可以指定列值的分隔符和行尾标记;默认为\t和换行符。
DOS 下换行符:\r\n
Unix 下换行符:\n
Mac 下换行符: \r
可以显示指定列值的分隔符和行尾标记(可选项)
FIELDS(TERMINATED BY、[OPTIONALLY] ENCLOSED BY 和 ESCAPED BY)
LINES TERMINATED BY、[OPTIONALLY] ENCLOSED BY 和 ESCAPED BY)
e.g.
FIELDS TERMINATED BY ':'
LINES TERMINATED BY '\r\n'
LOAD DATA默认是按照数据文件中列的顺序插入到表中,如果数据文件列的顺序和表不一致,可以指定插入到列的顺序。
新插入文件data.txt:
Lee 98 1 1
Chen 100 1 0
列名顺序:name, degree, sex, passtest
执行:
mysql> LOAD DATA LOCAL INFILE '/Users/hugang/Desktop/data.txt'
-> INTO TABLE YouClass(name, degree, sex, passtest);
查看YouClass表:
id | name | sex | degree | passtest |
---|---|---|---|---|
2 | Mary | 1 | 89.34 | 0 |
3 | tom | 0 | NULL | 0 |
4 | John | 0 | 90.00 | 1 |
5 | Jack | 1 | 60.00 | NULL |
7 | Lee | 1 | 98.00 | 1 |
8 | Chen | 1 | 100.00 | 0 |
mysql> SELECT *
-> FORM YouClass INTO OUTFILE '/tmp/YouClass.txt';
YouClass.txt内容:
2 Mary 1 89.34 0
3 tom 0 \N 0
4 John 0 90.00 1
5 Jack 1 60.00 \N
7 Lee 1 98.00 1
8 Chen 1 100.00 0
可以指定输出格式:
SELECT * FROM YouClass
INTO OUTFILE '/tmp/data.txt'
FIELDS TERMINATED BY ',' ENCLOSED BY '"';
data.txt内容:
"2","Mary","1","89.34","0"
"3","tom","0",\N,"0"
"4","John","0","90.00","1"
"5","Jack","1","60.00",\N
"7","Lee","1","98.00","1"
"8","Chen","1","100.00","0"
mysqldump会生成一个SQL脚本,包含新建数据库表内容所需的CREATE ,INSERT等。
mysqldump: command not found问题解决:
find / -name mysqldump -print
/Applications/XAMPP/xamppfiles/bin/mysqldump
ln -fs /Applications/XAMPP/xamppfiles/bin/mysqldump /usr/bin
#mysqldump -uroot -p --tab=/tmp/tab test YouClass
在/tmp/tab生成YouClass.sql,主要内容如下:
DROP TABLE IF EXISTS `YouClass`;
CREATE TABLE `YouClass` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
`sex` int(4) NOT NULL DEFAULT '0',
`degree` double(16,2) DEFAULT NULL,
`passtest` int(4) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;
#mysqldump -uroot -p test YouClass > YouClass.sql
查看YouClass.sql主要内容,包括了INSERT INTO内容:
--
-- Table structure for table `YouClass`
--
DROP TABLE IF EXISTS `YouClass`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `YouClass` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
`sex` int(4) NOT NULL DEFAULT '0',
`degree` double(16,2) DEFAULT NULL,
`passtest` int(4) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `YouClass`
--
LOCK TABLES `YouClass` WRITE;
/*!40000 ALTER TABLE `YouClass` DISABLE KEYS */;
INSERT INTO `YouClass` VALUES (2,'Mary',1,89.34,0), (3,'tom',0,NULL,0),(4,'John',0,90.00,1),(5,'Jack', 1,60.00,NULL),(7,'Lee',1,98.00,1),(8,'Chen',1,100.00,0);
/*!40000 ALTER TABLE `YouClass` ENABLE KEYS */;
UNLOCK TABLES;
#mysqldump -uroot -p test > test.sql
#mysqldump -uroot -p --all-databases > alldata.sql
mysql>use 数据库名;
mysql>source test.sql
当恢复数据库时,可以备份的sql文件恢复,表和单个数据库的备份sql需要数据库已经创建;所有数据库的sql不需要,它包含创建数据库过程
恢复一张表:
#mysql -uroot -p test < YouClass.sql
恢复整个数据库:
#mysql -uroot -p test < test.sql
恢复所有数据库:
#mysql -uroot -p < alldata.sql
mysqldump -uroot -p test | mysql -h 10.13.1.139 test
查看10.13.1.139 机器上的test库,新增数据:
mysql> SHOW TABLES;
mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| YouClass |
| person |
+----------------+
2 rows in set (0.00 sec)