1 select- into outfile結果導出
mysql支持,將獲得到的數據記錄在文件內而不是返回到客戶端。
常規的:文件內的每一行是一條數據,而每個字段之間使用水平製表符分隔。
導出的數據文件可以使用LOAD DATA INFILE語法載入到某個數據表內。
注意,不允許向已經存在的文件內導出數據
在導出到文件的過程中,支持配置字段分隔符,包裹符,和轉義符。和配置行(記錄)結束符,和起始符
默認爲:
字段:fields terminated by '\t' enclosed by '' escaped by '\\‘
記錄:lines terminated by '\n' starting by ''
其他常用的是:字段使用逗號分割,而使用引號包裹
SELECT a,b,a+b INTO OUTFILE ‘file‘
FIELDS TERMINATED BY ',' ENCLOSED BY '"‘
LINES TERMINATED BY '\n‘
FROM test_table;
同時支持 into dumpfile,作用與outfile一致,不過是不做任何換行和轉義處理。非常適合導出二進制數據。
mysql> select * into outfile "E:/outfile.txt" from one;
Query OK, 3 rows affected (0.00 sec)
將表one導出到E盤目錄下的outfile.txt文件中,文件的中的內容如下:mysql> select * into outfile "E:/outfile2.txt" from teacher_class where id between 2 and 5;
Query OK, 4 rows affected (0.02 sec)
支持,在導出數據時,設置記錄,與字段的分割符。
通過如下的選項:
fields:設置字段選項
Lines: 設置行選項(記錄選項)
先看默認值:
字段:
fields terminated by '\t' enclosed by '' escaped by '\\‘
記錄:
lines terminated by '\n' starting by ''
mysql> select * into outfile "E:/outfile4.txt" fields terminated by ',' lines starting by 'start: ' terminated by '===end;\n'from t
eacher_class where id between 2 and 5;
Query OK, 4 rows affected (0.00 sec)
mysql> select * into outfile "E:/outfile5.txt" fields terminated by ',' enclosed by 'x' lines starting by 'start: ' terminated by '
===end;\n'from teacher_class where id between 2 and 5;
Query OK, 4 rows affected (0.02 sec)
保存二進制數據,不會發生轉移和換行:
mysql> select * into dumpfile 'e:/outfile9.txt' from teacher_class where t_name = '韓信' limit 1
2 新增數據 insert & replace & loaddata
2.1 insert
創建表test_1:
mysql> drop table if exists test_1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create table if not exists test_1(
-> id int primary key auto_increment,
-> name char(20),
-> sex enum('male', 'female', 'secret')
-> )character set utf8;
Query OK, 0 rows affected (0.08 sec)
mysql> desc test_1;
+-------+--------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(20) | YES | | NULL | |
| sex | enum('male','female','secret') | YES | | NULL | |
+-------+--------------------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
方式一:
可以省略對列的指定,要求 value() 括號內,提供給了按照列順序出現的所有字段的值。
Insert into tbl_name values (), (), ();
mysql> insert into test_1 values
-> (null, 'Apple', 1),
-> (null, 'Lin', 2);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from test_1;
+----+-------+--------+
| id | name | sex |
+----+-------+--------+
| 1 | Apple | male |
| 2 | Lin | female |
+----+-------+--------+
2 rows in set (0.00 sec)
或者使用set語法。
Insert into tbl_name set field=value,…;
mysql> insert into test_1 set name = 'Qian',sex = 3;
Query OK, 1 row affected (0.01 sec)
mysql> select * from test_1;
+----+-------+--------+
| id | name | sex |
+----+-------+--------+
| 1 | Apple | male |
| 2 | Lin | female |
| 3 | Qian | secret |
+----+-------+--------+
3 rows in set (0.00 sec)
Insert into tbl_name values (field_value, 10+10, now());
方式四
可以使用一個特殊值 default,表示該列使用默認值。
Insert into tbl_name values (field_value, default);
insert into teacher values
(13, 'xxx', 'yyy', default),//前提是該變量類型設置了default
(14, 'xxx', 'yyy', default(days))//得到字段的默認值
方式五
可以通過一個查詢的結果,作爲需要插入的值。
Insert into tbl_name select …;
如下所示:
mysql> insert into test_1 (name, sex) select name, sex from test_1;
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from test_1;
+----+-------+--------+
| id | name | sex |
+----+-------+--------+
| 1 | Apple | male |
| 2 | Lin | female |
| 3 | Qian | secret |
| 4 | Apple | male |
| 5 | Lin | female |
| 6 | Qian | secret |
+----+-------+--------+
6 rows in set (0.01 sec)
方式六
可以指定在插入的值出現主鍵(或唯一索引)衝突時,更新其他非主鍵列的信息。
Insert into tbl_name 值 on duplicate key update 字段=值, …;
mysql> insert into test_1 values (2, 'Blue', 2) on duplicate key update name = 'Blue', sex = 2;
Query OK, 2 rows affected (0.08 sec)
數據展示:
mysql> select * from test_1;
+----+-------+--------+
| id | name | sex |
+----+-------+--------+
| 1 | Apple | male |
| 2 | Blue | female |
| 3 | Qian | secret |
| 4 | Apple | male |
| 5 | Lin | female |
| 6 | Qian | secret |
+----+-------+--------+
6 rows in set (0.00 sec)
Into 可以省略。不建議。2.2 replace
Replace REPLACE的運行與INSERT很相像。只有一點除外,如果表中的一箇舊記錄與一個用於PRIMARY KEY或一個UNIQUE索引的新記錄具有相同的值,則在新記錄被插入之前,舊記錄被刪除。(替換原有記錄)
此時表test_1中的數據:
mysql> select * from test_1;
+----+-------+--------+
| id | name | sex |
+----+-------+--------+
| 1 | Apple | male |
| 2 | Blue | female |
| 3 | Qian | secret |
| 4 | Apple | male |
| 5 | Lin | female |
| 6 | Qian | secret |
+----+-------+--------+
6 rows in set (0.00 sec)
mysql> replace into test_1 values(2, 'Green', 1);
Query OK, 2 rows affected (0.03 sec)
mysql> select * from test_1;
+----+-------+--------+
| id | name | sex |
+----+-------+--------+
| 1 | Apple | male |
| 2 | Green | male |
| 3 | Qian | secret |
| 4 | Apple | male |
| 5 | Lin | female |
| 6 | Qian | secret |
+----+-------+--------+
6 rows in set (0.00 sec)
replace into的語法和insert into的語法相似,但是如果衝突的話可以替換表中的數據,和inset into on duplicate update相似。2.3 load data infile
語法:
LOAD DATA INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name
[FIELDS [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char' ] ]
[LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ]
[IGNORE number LINES]
應該根據數據格式導入,格式語法,默認爲:
字段:
fields terminated by '\t' enclosed by '' escaped by '\\‘
記錄:lines terminated by '\n' starting by ''
其他常用的是:字段使用逗號分割,而使用引號包裹
獲取數據的字符集,受character_set_database配置的限制。注意,不受客戶端的字符集的影響。
在導入數據時,如果出現主鍵衝突,可選的:忽略 或 替換。
Load data infile ‘file’ Ignore replace
可以選擇在文本文件開始出,忽略若干行再進行導入。
Into table tbl_name ignore N lines;
Load data infile "file" into table tbl_name;
注意:導入時,涉及到數據增加,需要考慮,是否衝突的情況。通常,可以在導出時,將主鍵導出成null。利用自動增長的特性。可以形成新的主鍵:
mysql> select null,name,sex into outfile 'E:/test3.txt'from test_1;
Query OK, 6 rows affected (0.00 sec)
將導出的數據導入到test_1表中:
mysql> load data infile 'E:/test3.txt' into table test_1;
Query OK, 6 rows affected (0.03 sec)
Records: 6 Deleted: 0 Skipped: 0 Warnings: 0
mysql> select * from test_1;
+----+-------+--------+
| id | name | sex |
+----+-------+--------+
| 1 | Apple | male |
| 2 | Green | male |
| 3 | Qian | secret |
| 4 | Apple | male |
| 5 | Lin | female |
| 6 | Qian | secret |
| 7 | Apple | male |
| 8 | Green | male |
| 9 | Qian | secret |
| 10 | Apple | male |
| 11 | Lin | female |
| 12 | Qian | secret |
+----+-------+--------+
12 rows in set (0.00 sec)
mysql>