mysql導入數據load data infile用法整理

有時候我們需要將大量數據批量寫入數據庫,直接使用程序語言和Sql寫入往往很耗時間,其中有一種方案就是使用MySql Load data infile導入文件的形式導入數據,這樣可大大縮短數據導入時間。

假如是從MySql客戶端調用,將客戶端的文件導入,則需要使用 load local data infile.

LOAD DATA INFILE 語句以很高的速度從一個文本文件中讀取行到一個表中。文件名必須是一個文字字符串。

1,開啟load local data infile.

假如是Linux下編譯安裝,

如果使用源碼編譯的MySQL,在configure的時候,需要添加參數:--enable-local-infile 客戶端和服務器端都需要,否則不能使用local參數。

./configure --prefix=/usr/local/mysql --enable-local-infile

make install

若是其它系統,可在配置文件中配置:

在MySql 配置文件My.ini文件中下面項中加入local-infile=1:

add:

[mysqld]

local-infile=1

[mysql]

local-infile=1

客戶端和服務端度需要開啟,對于客戶端也可以在執行命中加上--local-infile=1 參數:

mysql --local-infile=1 -uroot -pyourpwd yourdbname

如:

如:/usr/local/mysql/bin/mysql -uroot -h192.168.0.2 -proot databaseName --local-infile=1 -e "LOAD DATA LOCAL INFILE 'data.txt' into table test(name,sex) "

2, 編碼格式注意:

若包含中文,請保證導入文件、連接字符串、導入表都是UTF-8編碼。

?

?

?

3,執行

在使用LOAD DATA到MySQL的時候,有2種情況:

(1)在遠程客戶端(需要添加選項:--local-infile=1)導入遠程客戶端文本到MySQL,需指定LOCAL(默認就是ignore),加ignore選項會放棄數據,加replace選項會更新數據,都不會出現唯一性約束問題。

[zhuxu@xentest9-vm1 tmp]$mysql -uzhuxu -pzhuxu test -h10.254.5.151 --local-infile=1--show-warnings -v -v -v \

> -e "LOAD DATA LOCAL INFILE '/tmp/2.txt' INTO TABLE tmp_loaddata FIELDS TERMINATED BY ','";

(2)在本地服務器導入本地服務器文本到MySQL,不指定LOACL,出現唯一性約束沖突,會失敗回滾,數據導入不進去,這個時候就需要加ignore或者replace來導入數據。

mysql>LOAD DATA INFILE '/home/zhuxu/1.txt' INTO TABLE tmp_loaddata FIELDS TERMINATED BY ',';

?

?

4,事務分析

步驟是這樣的:

1,開啟binlog,設置binlog_format=row,執行reset master;

2,load data infile xxxxx;

3,查看binlog。

?

可以看出,總共是一個事務,也通過mysqlbinlog查看了binary log,確認中間是被拆分成了多個insert形式。所以load data infile基本上是這樣執行的:

begin

insert into values(),(),(),()...

insert into values(),(),(),()...

insert into values(),(),(),()...

...

...

commit

當然,由于row格式的binlog的語句并不是很明顯的記錄成多值insert語句,它的格式時

insert into table

set @1=

set @2=

...

set @n=

insert into table

set @1=

set @2=

...

set @n=

insert ...

;注意這里有一個分號‘;’,其實前面這一部分就相當于前面說的多值insert形式

然后接下來就重復上面的那種格式,也就是一個load data infile 拆成了多個多值insert語句。

前面說的是row格式記錄的load data infile,那么對于statement是怎么樣的呢?statement格式的binlog,它是這樣記錄的,binlog中還是同樣的load data語句,但是在記錄load data 語句之前,它會先將你master上這個load data 使用到的csv格式的文件拆分成多個部分,然后傳到slave上(在mysql的tmpdir下),當然傳這些csv格式的文件也會記錄binlog event,然后最后真正的SQL語句形式就是load data local infile '/tmp/SQL_X_Y'這種形式(這里假設mysql的tmpdir是默認的/tmp),實際上這樣很危險,比如tmpdir空間不夠,那就會報錯。不過從效率上來說兩者可能差不多,因為statement格式的binlog也是拆分成了多個語句。

?

附:

(1)load data infile 和 load local data infile 在 innodb和MyISAM 同步方面的區別

對MyISAM引擎:

(1)對master服務器進行 ‘load’ 操作,

(2)在master上所操作的load.txt文件,會同步傳輸到slave上,并在tmp_dir 目錄下生成 load.txt文件

master服務器插入了多少,就傳給slave多少

(3)當master上的load操作完成后,傳給slave的文件也結束時,

即:在slave上生成完整的 load.txt文件

此時,slave才開始從 load.txt 讀取數據,并將數據插入到本地的表中

?

對innodb引擎:

(1)主數據庫進行 ‘Load’ 操作

(2)主數據庫操作完成后,才開始向slave傳輸 load.txt文件,

slave接受文件,并在 tmp_dir 目錄下生成 load.txt 文件

接受并生成完整的load.txt 后,才開始讀取該文件,并將數據插入到本地表中

?

異常情況處理:

1)對MyISAM引擎

當數據庫執行load,此時如果中斷:

Slave端將報錯,例如:

####################################################################

Query partially completed on the master (error on master: 1053) and was aborted.

There is a chance that your master is inconsistent at this point.

If you are sure that your master is ok,

run this query manually on the slave and then restart the slave with SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

START SLAVE; . Query: 'LOAD DATA INFILE '/tmp/SQL_LOAD-2-1-3.data' IGNORE INTO TABLE `test_1`

FIELDS TERMINATED BY ',' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`id`, `name`, `address`)'

###########################################################################################

按照提示,在slave服務器上:

(1) 使用提示的load命令,將主服務器傳輸過來的load文件,在從服務器上執行

(2)讓從服務器跳過錯誤。set global sql_slave_skip_counter=1;

(3)開啟同步

2)對Innodb引擎

由于innodb是事務型的,所以會把load文件的整個操作當作一個事務來處理,

中途中斷load操作,會導致回滾。

與此相關的一些參數:

max_binlog_cache_size----能夠使用的最大cache內存大小。

當執行多語句事務時,max_binlog_cache_size如果不夠大,

系統可能會報出“Multi-statement

transaction required more than 'max_binlog_cache_size' bytes of storage”的錯誤。

備注:以load data 來說,如果load的文件大小為512M,在執行load 的過程中,

所有產生的binlog會先寫入binlog_cache_size,直到load data 的操作結束后,

最后,再由binlog_cache_size 寫入二進制日志,如mysql-bin.0000008等。

所以此參數的大小必須大于所要load 的文件的大小,或者當前所要進行的事務操作的大小。

?

max_binlog_size------------Binlog最大值,一般設置為512M或1GB,但不能超過1GB。

該設置并不能嚴格控制Binlog的大小,尤其是Binlog遇到一根比較大事務時,

為了保證事務的完整性,不可能做切換日志的動作,只能將該事務的所有SQL都記錄進

當前日志,直到事務結束

備注:有時能看到,binlog生成的大小,超過了設定的1G。這就是因為innodb某個事務的操作比較大,

不能做切換日志操作,就全部寫入當前日志,直到事務結束。

(2)C# 批量插入Mysql
public void loadData(Connection connection)
{
long starTime = System.currentTimeMillis();
String sqlString = "load data local infile ? into table test";
PreparedStatement pstmt;
try {
pstmt = connection.prepareStatement(sqlString);
pstmt.setString(1, "tfacts_result");
pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("program runs " + (endTime - starTime) + "ms");
}
public static void mysql_batch(string sqlStr,int point)
{
string sql = "insert into test(node1, node2, weight) values(?, ?, ?)";
Connection conn = getConn("mysql");
conn.setAutoCommit(false);
//clear(conn);
try
{
PreparedStatement prest = conn.prepareStatement(sql);
//long a = System.currentTimeMillis();
for (int x = 1; x <= count; x++)
{
prest.setInt(1, x);
prest.setString(2, "張三");
prest.addBatch();
if (x % point == 0)
{
prest.executeBatch();
conn.commit();
}
}
prest.close();
//long b = System.currentTimeMillis();
//print("MySql批量插入10萬條記錄", a, b, point);
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
close(conn);
}

使用into outfile 和 load data infile導入導出備份數據

如果要導出一個表中的部分字段或者部分符合條件的記錄,需要用到了mysql的into outfile?和?load data infile
例如下面的mysql命令是把select的mytable表中的數據導出到/home/db_bak2012文件。

?

select * from mytable where status!=0 and name!='' into outfile '/home/db_bak2012' fields terminated by '|' enclosed by '"' lines terminated by '\r\n' ;

假如要導入剛才備份的數據,可以使用load file方法,例如下面的mysql命令,把導出的數據導入了mytable_bak的表中:

?

load data infile  '/home/db_bak2012' into table mytable_bak fields terminated by '|' enclosed by '"' lines terminated by '\r\n' ;

這種方法的好處是,導出的數據可以自己規定格式,并且導出的是純數據,不存在建表信息,你可以直接導入另外一個同數據庫的不同表中,相對于mysqldump比較靈活機動。

#基本語法:
load data  [low_priority] [local] infile 'file_name txt' [replace | ignore]
into table tbl_name
[fields
[terminated by't']
[OPTIONALLY] enclosed by '']
[escaped by'\' ]]
[lines terminated by'n']
[ignore number lines]
[(col_name,   )]

?

load data infile語句從一個文本文件中以很高的速度讀入一個表中。使用這個命令之前,mysqld進程(服務)必須已經在運行。為了安全原因,當讀取位于服務器上的文本文件時,文件必須處于數據庫目錄或可被所有人讀取。另外,為了對服務器上文件使用load data infile,在服務器主機上你必須有file的權限。
1 ?如果你指定關鍵詞low_priority,那么MySQL將會等到沒有其他人讀這個表的時候,才把插入數據。可以使用如下的命令:
load data ?low_priority infile "/home/mark/data sql" into table Orders;
?
2 ?如果指定local關鍵詞,則表明從客戶主機讀文件。如果local沒指定,文件必須位于服務器上。
?
3 ?replace和ignore關鍵詞控制對現有的唯一鍵記錄的重復的處理。如果你指定replace,新行將代替有相同的唯一鍵值的現有行。如果你指定ignore,跳過有唯一鍵的現有行的重復行的輸入。如果你不指定任何一個選項,當找到重復鍵時,出現一個錯誤,并且文本文件的余下部分被忽略。例如:
load data ?low_priority infile "/home/mark/data sql" replace into table Orders;
?
4?分隔符
(1) fields關鍵字指定了文件記段的分割格式,如果用到這個關鍵字,MySQL剖析器希望看到至少有下面的一個選項:
terminated by分隔符:意思是以什么字符作為分隔符
enclosed by字段括起字符
escaped by轉義字符
terminated by描述字段的分隔符,默認情況下是tab字符(\t)
enclosed by描述的是字段的括起字符。
escaped by描述的轉義字符。默認的是反斜杠(backslash:\ ) ?
例如:load data infile "/home/mark/Orders txt" replace into table Orders fields terminated by',' enclosed by '"';
(2)lines 關鍵字指定了每條記錄的分隔符默認為'\n'即為換行符
如果兩個字段都指定了那fields必須在lines之前。如果不指定fields關鍵字缺省值與如果你這樣寫的相同:?fields terminated by'\t' enclosed by ’ '' ‘ escaped by'\\'
如果你不指定一個lines子句,缺省值與如果你這樣寫的相同:?lines terminated by'\n'
例如:load data infile "/jiaoben/load.txt" replace into table test fields terminated by ',' lines terminated by '/n';
5?load data infile?可以按指定的列把文件導入到數據庫中。 當我們要把數據的一部分內容導入的時候,,需要加入一些欄目(列/字段/field)到MySQL數據庫中,以適應一些額外的需要。比方說,我們要從Access數據庫升級到MySQL數據庫的時候
下面的例子顯示了如何向指定的欄目(field)中導入數據:
load data infile "/home/Order txt" into table Orders(Order_Number, Order_Date, Customer_ID);
6?當在服務器主機上尋找文件時,服務器使用下列規則:
(1)如果給出一個絕對路徑名,服務器使用該路徑名。
(2)如果給出一個有一個或多個前置部件的相對路徑名,服務器相對服務器的數據目錄搜索文件。
(3)如果給出一個沒有前置部件的一個文件名,服務器在當前數據庫的數據庫目錄尋找文件。
例如:?/myfile txt”給出的文件是從服務器的數據目錄讀取,而作為“myfile txt”給出的一個文件是從當前數據庫的數據庫目錄下讀取。
?
?
注意:字段中的空值用\N表示


我的文章一般淺顯易懂,不會搞那么深入讓大家很難理解。(其實我水平也不咋樣)

LOAD DATA INFILE 一直被認為是MySQL很強大的一個數據導入工具,因為他速度非常的快。
不過有幾個問題一定要注意
1、編碼。
2、靈活導入導出。

我來舉兩個例子說明一下。
一、關于編碼
我們的示例文本文件:
"我愛你","20","相貌平常,經常耍流氓!哈哈"
"李奎","21","相貌平常,經常耍流氓!哈哈"
"王二米","20","相貌平常,經常耍流氓!哈哈"
"老三","24","很強"
"老四","34","XXXXX"
"老五","52","***%*¥*¥*¥*¥"
"小貓","45","中間省略。。。"
"小狗","12","就會叫"
"小妹","21","PP的很"
"小壞蛋","52","表里不一"
"上帝他爺","96","非常英俊"
"MM來了","10","。。。"
"歌頌黨","20","社會主義好"
"人民好","20","的確是好"
"老高","10","學習很好"
"斜三","60","眼睛斜了"
"中華之子","100","威武的不行了"
"大米","63","我愛吃"
"蘋果","15","好吃"
我們的示例表結構:


+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t0 ? ?| CREATE TABLE `t0` (
?`id` bigint(20) unsigned NOT NULL auto_increment,
?`name` char(20) NOT NULL,
?`age` tinyint(3) unsigned NOT NULL,
?`description` text NOT NULL,
?PRIMARY KEY ?(`id`),
?UNIQUE KEY `idx_name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |?
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


我們把這個文本文件從WINDOWS 下COPY到LINUX下看看


mysql> load data infile '/tmp/t0.txt' ignore into table t0 character set gbk fields terminated by ',' enclosed by '"' lines terminated by '\n' (`name`,`age`,`description`);
Query OK, 19 rows affected (0.01 sec)
Records: 19 ?Deleted: 0 ?Skipped: 0 ?Warnings: 0

mysql> select * from t0;
+----+----------+-----+----------------------------+
| id | name ? ? | age | description ? ? ? ? ? ? ? ?|
+----+----------+-----+----------------------------+
| ?1 | 我愛你 ? | ?20 | 相貌平常,經常耍流氓!哈哈 |?
| ?2 | 李奎 ? ? | ?21 | 相貌平常,經常耍流氓!哈哈 |?
| ?3 | 王二米 ? | ?20 | 相貌平常,經常耍流氓!哈哈 |?
| ?4 | 老三 ? ? | ?24 | 很強 ? ? ? ? ? ? ? ? ? ? ? |?
| ?5 | 老四 ? ? | ?34 | XXXXX ? ? ? ? ? ? ? ? ? ? ?|?
| ?6 | 老五 ? ? | ?52 | ***%*¥*¥*¥*¥ ? ? ? ? ? |?
| ?7 | 小貓 ? ? | ?45 | 中間省略。。。 ? ? ? ? ? ? |?
| ?8 | 小狗 ? ? | ?12 | 就會叫 ? ? ? ? ? ? ? ? ? ? |?
| ?9 | 小妹 ? ? | ?21 | PP的很 ? ? ? ? ? ? ? ? ? ? |?
| 10 | 小壞蛋 ? | ?52 | 表里不一 ? ? ? ? ? ? ? ? ? |?
| 11 | 上帝他爺 | ?96 | 非常英俊 ? ? ? ? ? ? ? ? ? |?
| 12 | MM來了 ? | ?10 | 。。。 ? ? ? ? ? ? ? ? ? ? |?
| 13 | 歌頌黨 ? | ?20 | 社會主義好 ? ? ? ? ? ? ? ? |?
| 14 | 人民好 ? | ?20 | 的確是好 ? ? ? ? ? ? ? ? ? |?
| 15 | 老高 ? ? | ?10 | 學習很好 ? ? ? ? ? ? ? ? ? |?
| 16 | 斜三 ? ? | ?60 | 眼睛斜了 ? ? ? ? ? ? ? ? ? |?
| 17 | 中華之子 | 100 | 威武的不行了 ? ? ? ? ? ? ? |?
| 18 | 大米 ? ? | ?63 | 我愛吃 ? ? ? ? ? ? ? ? ? ? |?
| 19 | 蘋果 ? ? | ?15 | 好吃 ? ? ? ? ? ? ? ? ? ? ? |?
+----+----------+-----+----------------------------+
19 rows in set (0.00 sec)

我來說明一下相關的參數
關于我的導入語句,我現在直說兩個,其他的參考手冊。
character set gbk;

這個字符集一定要寫,要不然就會亂碼或者只導入一部分數據。


ignore into table?


因為name 列加了唯一索引,加這個是為了避免重復數據插入報錯。

加入我們再次運行這個導入語句就會發現
Query OK, 0 rows affected (0.00 sec)
Records: 19 ?Deleted: 0 ?Skipped: 19 ?Warnings: 0
沒有任何值導入,因為里面已經有了相同的值。

這里也可以用replace into table
MySQL會把相同的先干掉,再插入新的值。
mysql> load data infile '/tmp/t0.txt' replace into table t0 character set gbk fields terminated by ',' enclosed by '"' lines terminated by '\n' (`name`,`age`,`description`);
Query OK, 38 rows affected (0.00 sec)
Records: 19 ?Deleted: 19 ?Skipped: 0 ?Warnings: 0

mysql> select * from t0;
+----+----------+-----+----------------------------+
| id | name ? ? | age | description ? ? ? ? ? ? ? ?|
+----+----------+-----+----------------------------+
| 20 | 我愛你 ? | ?20 | 相貌平常,經常耍流氓!哈哈 |?
| 21 | 李奎 ? ? | ?21 | 相貌平常,經常耍流氓!哈哈 |?
| 22 | 王二米 ? | ?20 | 相貌平常,經常耍流氓!哈哈 |?
| 23 | 老三 ? ? | ?24 | 很強 ? ? ? ? ? ? ? ? ? ? ? |?
| 24 | 老四 ? ? | ?34 | XXXXX ? ? ? ? ? ? ? ? ? ? ?|?
| 25 | 老五 ? ? | ?52 | ***%*¥*¥*¥*¥ ? ? ? ? ? |?
| 26 | 小貓 ? ? | ?45 | 中間省略。。。 ? ? ? ? ? ? |?
| 27 | 小狗 ? ? | ?12 | 就會叫 ? ? ? ? ? ? ? ? ? ? |?
| 28 | 小妹 ? ? | ?21 | PP的很 ? ? ? ? ? ? ? ? ? ? |?
| 29 | 小壞蛋 ? | ?52 | 表里不一 ? ? ? ? ? ? ? ? ? |?
| 30 | 上帝他爺 | ?96 | 非常英俊 ? ? ? ? ? ? ? ? ? |?
| 31 | MM來了 ? | ?10 | 。。。 ? ? ? ? ? ? ? ? ? ? |?
| 32 | 歌頌黨 ? | ?20 | 社會主義好 ? ? ? ? ? ? ? ? |?
| 33 | 人民好 ? | ?20 | 的確是好 ? ? ? ? ? ? ? ? ? |?
| 34 | 老高 ? ? | ?10 | 學習很好 ? ? ? ? ? ? ? ? ? |?
| 35 | 斜三 ? ? | ?60 | 眼睛斜了 ? ? ? ? ? ? ? ? ? |?
| 36 | 中華之子 | 100 | 威武的不行了 ? ? ? ? ? ? ? |?
| 37 | 大米 ? ? | ?63 | 我愛吃 ? ? ? ? ? ? ? ? ? ? |?
| 38 | 蘋果 ? ? | ?15 | 好吃 ? ? ? ? ? ? ? ? ? ? ? |?
+----+----------+-----+----------------------------+
19 rows in set (0.00 sec)


(`name`,`age`,`description`);

這些也就是具體的表屬性了,指明這個就可以導入想要的數據。
2、關于靈活性,其實也就是一個記錄功能
如果想在導入的時候記錄一下導入的具體時間怎么辦?
我們來看看
先加一個時間屬性記錄導入時間。
mysql> alter table t0 add update_time timestamp not null;
Query OK, 19 rows affected (0.00 sec)
Records: 19 ?Duplicates: 0 ?Warnings: 0
干掉唯一索引
mysql> alter table t0 drop index idx_name;
Query OK, 19 rows affected (0.00 sec)
Records: 19 ?Duplicates: 0 ?Warnings: 0


mysql> load data infile '/tmp/t0.txt' into table t0 character set gbk fields terminated by ',' enclosed by '"' lines terminated by '\n' (`name`,`age`,`description`) set update_time=current_timestamp;
Query OK, 19 rows affected (0.00 sec)
Records: 19 ?Deleted: 0 ?Skipped: 0 ?Warnings: 0

mysql> select * from t0;
+----+----------+-----+----------------------------+---------------------+
| id | name ? ? | age | description ? ? ? ? ? ? ? ?| update_time ? ? ? ? |
+----+----------+-----+----------------------------+---------------------+
| 20 | 我愛你 ? | ?20 | 相貌平常,經常耍流氓!哈哈 | 0000-00-00 00:00:00 |?
…………
| 24 | 老四 ? ? | ?34 | XXXXX ? ? ? ? ? ? ? ? ? ? ?| 0000-00-00 00:00:00 |?
| 25 | 老五 ? ? | ?52 | ***%*¥*¥*¥*¥ ? ? ? ? ? | 0000-00-00 00:00:00 |?
…………
| 35 | 斜三 ? ? | ?60 | 眼睛斜了 ? ? ? ? ? ? ? ? ? | 0000-00-00 00:00:00 |?
| 36 | 中華之子 | 100 | 威武的不行了 ? ? ? ? ? ? ? | 0000-00-00 00:00:00 |?
…………
| 60 | 王二米 ? | ?20 | 相貌平常,經常耍流氓!哈哈 | 2008-06-30 14:58:37 |?
…………
| 68 | 上帝他爺 | ?96 | 非常英俊 ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 69 | MM來了 ? | ?10 | 。。。 ? ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
…………
| 75 | 大米 ? ? | ?63 | 我愛吃 ? ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 76 | 蘋果 ? ? | ?15 | 好吃 ? ? ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
+----+----------+-----+----------------------------+---------------------+
38 rows in set (0.00 sec)


新導入的19條記錄時間被記錄了下來。
只是之前的數據庫沒有記錄,不過現在不需要這些重復數據了。

干掉他就可以了


mysql> alter table t0 order by id desc;
Query OK, 38 rows affected (0.01 sec)
Records: 38 ?Duplicates: 0 ?Warnings: 0

mysql> alter ignore table t0 add unique index idx_name (`name`);
Query OK, 38 rows affected (0.00 sec)
Records: 38 ?Duplicates: 19 ?Warnings: 0

mysql> alter table t0 order by id asc;
Query OK, 19 rows affected (0.01 sec)
Records: 19 ?Duplicates: 0 ?Warnings: 0

mysql> select * from t0;
+----+----------+-----+----------------------------+---------------------+
| id | name ? ? | age | description ? ? ? ? ? ? ? ?| update_time ? ? ? ? |
+----+----------+-----+----------------------------+---------------------+
| 58 | 我愛你 ? | ?20 | 相貌平常,經常耍流氓!哈哈 | 2008-06-30 14:58:37 |?
| 59 | 李奎 ? ? | ?21 | 相貌平常,經常耍流氓!哈哈 | 2008-06-30 14:58:37 |?
| 60 | 王二米 ? | ?20 | 相貌平常,經常耍流氓!哈哈 | 2008-06-30 14:58:37 |?
| 61 | 老三 ? ? | ?24 | 很強 ? ? ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 62 | 老四 ? ? | ?34 | XXXXX ? ? ? ? ? ? ? ? ? ? ?| 2008-06-30 14:58:37 |?
| 63 | 老五 ? ? | ?52 | ***%*¥*¥*¥*¥ ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 64 | 小貓 ? ? | ?45 | 中間省略。。。 ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 65 | 小狗 ? ? | ?12 | 就會叫 ? ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 66 | 小妹 ? ? | ?21 | PP的很 ? ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 67 | 小壞蛋 ? | ?52 | 表里不一 ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 68 | 上帝他爺 | ?96 | 非常英俊 ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 69 | MM來了 ? | ?10 | 。。。 ? ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 70 | 歌頌黨 ? | ?20 | 社會主義好 ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 71 | 人民好 ? | ?20 | 的確是好 ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 72 | 老高 ? ? | ?10 | 學習很好 ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 73 | 斜三 ? ? | ?60 | 眼睛斜了 ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 74 | 中華之子 | 100 | 威武的不行了 ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 75 | 大米 ? ? | ?63 | 我愛吃 ? ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
| 76 | 蘋果 ? ? | ?15 | 好吃 ? ? ? ? ? ? ? ? ? ? ? | 2008-06-30 14:58:37 |?
+----+----------+-----+----------------------------+---------------------+
19 rows in set (0.00 sec)

現在是達到了目的了,為啥中途要干掉唯一索引呢?因為set 語法 再有IGNORE 的時候會忽略掉。


mysql load data 導出、導入 csv

#用mysql導出時,如果文件目錄沒有權限,可以將文件導出到 mysql 庫所在的服務器上的 /tmp/ 目錄下(推薦<span></span>)
select * from s_reviews  where stars >0 limit 10 into outfile '/tmp/reviews.csv' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\n';
#從csv文件導入數據,導入的時候<span></span><span></span>,可以將要導入的文件先復制到 mysql 庫所在的服務器上的 /tmp/ 目錄下(推薦<span></span>)。
要將csv文件的字段和mysql表中的字段對應起來,以免出錯,同時也可以提醒自己導入的是哪些數據
&nbsp;LOAD DATA LOCAL INFILE '/tmp/reviews.csv' INTO TABLE s_reviews fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\n' (`id`, `user_id`, `user_name`, `shop_id`, `shop_name`, `arv_price`, `environment`, `taste_or_product`, `service`, `comment_type`, `comment`, `stars`, `review_time`, `fetch_time`);

?

轉載于:https://www.cnblogs.com/conanwang/p/5890753.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260529.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260529.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260529.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python3循環一直到一個值結束_一步一步學Python3(小學生也適用) 第十七篇:循環語句for in循環...

一、Python for in循環Python for in 循環&#xff0c;是用來遍歷任何數據序列&#xff0c;如一個列表&#xff0c;一個字符串&#xff0c;一個字典&#xff0c;一個元組等。for in 循環的一般語法如下&#xff1a;for item in 序列:語句塊else:語句塊for in 字符串&#xff1…

設置Jupyter notebook 默認工作路徑,修改Jupyter notebook 默認瀏覽器為Chrome

這里寫目錄標題一 設置Jupyter notebook 默認工作路徑二 修改Jupyter notebook 默認瀏覽器為Chrome一 設置Jupyter notebook 默認工作路徑 安裝好anaconda 后&#xff0c;jupyter notebook默認是有安裝好的。在windows的菜單欄找到anaconda目錄&#xff0c;如下圖 鼠標右鍵點…

python調用c#注意事項_Python調用C#編寫的DLL

起因是工作中需要用的開發編寫的DLL&#xff0c;但是它是使用C#編寫的&#xff0c;本人不想使用C#去寫測試代碼&#xff0c;所以需要使用Python來掉這個DLL內的方法 就用這個就很好&#xff0c;不要問為啥不用微軟的Ironpython和別的啥&#xff0c;好用就行了&#xff0c;解決問…

jquery實戰--定寬

大家有沒有遇到過一個問題&#xff0c;就是一個列表&#xff0c;或是一段文字過多時&#xff0c;截取多余的部分用省略號&#xff0c;好吧&#xff0c;證明你實力的時候到了&#xff0c;我下面先分解一下方法&#xff0c;再用插件寫出來,首先我們說的是&#xff0c;用到的第一個…

struts2 Action獲取表單數據

1.通過屬性驅動式 1.首先設置 表單中的數據的name值 如&#xff1a;<input type"text" name"username" value""> 2.你用的是struts2&#xff0c;那么就在java類中寫一個變量&#xff1a;變量名和頁面上的name值一致 并有這個變量的get 和…

python 計算器 eval ctf_CTF逆向--.NET與Python篇

題目(來源&#xff1a;Jarvis-OJ)&#xff1a;Classical CrackmeClassical CrackMe2FindKeyLoginClassical Crackme首先查殼沒有殼&#xff0c;不過發現這是一個.net的程序&#xff0c;將其拖進dnSpy中&#xff0c;找到主程序&#xff0c;同時發現關鍵代碼&#xff0c;如下所示…

2016年秋季個人閱讀計劃

閱讀書目&#xff1a;《軟件需求十步走》 讀后感發表日期&#xff1a;閱讀書目&#xff1a;《用戶故事與敏捷方法》 讀后感發表日期&#xff1a;第一篇&#xff1a;10月1日 第二篇&#xff1a;10月3日 第三篇&#xff1a;10月7日 第四篇&#xff1a;10月15日 第五篇&#xff1a…

第10章 Python 數字圖像處理(DIP) - 圖像分割 基礎知識 標準差分割法

This Chapter is all about image segmentation. I still not finished whole chapter, but here try to publish some for reference. 這里寫目錄標題基礎知識import sys import numpy as np import cv2 import matplotlib import matplotlib.pyplot as plt import PIL from …

OFBiz的探索進階

主要參照https://cwiki.apache.org/OFBIZ/ofbiz-tutorial-a-beginners-development-guide.html這個教程&#xff0c;實現的過程教程上很詳細&#xff0c;故這里不多說 還參考了下http://www.hotwaxmedia.com/apache-ofbiz-blog/ofbiz/ofbiz-tutorials/ofbiz-tutorial-building-…

python3語法都相同嗎_python2 與 python3 語法區別--轉

原文地址&#xff1a;http://old.sebug.net/paper/books/dive-into-python3/porting-code-to-python-3-with-2to3.html 使用2to3將代碼移植到Python 3 ? Life is pleasant. Death is peaceful. It’s the transition that’s troublesome. ? — Isaac Asimov (attributed) 概…

對GCD的一些理解和實踐

對GCD的一些理解和實踐GCD GCD&#xff0c;全程Grand Central Dispatch&#xff0c;是蘋果為了多核并行提出的解決方案。它是使用C語言實現&#xff0c;但是由于用了block來處理回調&#xff0c;所以使用起來十分方便。并且GCD會自動管理線程的生命周期&#xff0c;不需要我們去…

python scrapy爬蟲遇見301_在Pycharm中運行Scrapy爬蟲項目的基本操作

目標在Win7上建立一個Scrapy爬蟲項目&#xff0c;以及對其進行基本操作。運行環境&#xff1a;電腦上已經安裝了python(環境變量path已經設置好)&#xff0c;以及scrapy模塊&#xff0c;IDE為Pycharm 。操作如下&#xff1a;一、建立Scrapy模板。進入自己的工作目錄&#xff0c…

[Buzz Today]2012.08.08

# Dark Reign 2 源代碼現身Google Code Pandemic工作室開發的即時戰略游戲《Dark Reign 2》源代碼被泄露到了Google Code http://code.google.com/p/darkreign2/ # Warsow 1.0發布 Set in a futuristic cartoonish world, Warsow is a completely free fast-paced first-person…

PyTorch訓練中Dataset多線程加載數據,比Dataloader里設置多個workers還要快

PyTorch訓練中Dataset多線程加載數據&#xff0c;而不是在DataLoader 背景與需求 現在做深度學習的越來越多人都有用PyTorch&#xff0c;他容易上手&#xff0c;而且API相對TF友好的不要太多。今天就給大家帶來最近PyTorch訓練的一些小小的心得。 大家做機器學習、深度學習都…

Trading

http://v.youku.com/v_show/id_XMTA0OTcxMjgw.html?fromy1.2-1-87.3.8-1.1-1-1-7 轉載于:https://www.cnblogs.com/wangjianping/p/3705524.html

算法9---二叉樹的遍歷不用棧和遞歸

二叉樹的遍歷不用棧和遞歸 轉自&#xff1a;ACM之家 http://www.acmerblog.com/inorder-tree-traversal-without-recursion-and-without-stack-5988.html我們知道&#xff0c;在深度搜索遍歷的過程中&#xff0c;之所以要用遞歸或者是用非遞歸的棧方式&#xff0c;參考二叉樹非…

python調用攝像頭人臉識別代碼_利用face_recognition,dlib與OpenCV調用攝像頭進行人臉識別...

用已經搭建好 face_recognition&#xff0c;dlib 環境來進行人臉識別 未搭建好環境請參考&#xff1a; 使用opencv 調用攝像頭 import face_recognition import cv2 video_capture cv2.videocapture(0) # videocapture打開攝像頭&#xff0c;0為筆記本內置攝像頭&#xff0c;1…

python列表批量 修改_python實現多進程按序號批量修改文件名的方法示例

本文實例講述了python實現多進程按序號批量修改文件名的方法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;說明文件名命名方式如圖&#xff0c;是數字序號開頭&#xff0c;但是中間有些文件刪掉了&#xff0c;序號不連續&#xff0c;這里將序號連續起來&#xff0c;…

Struts1 tag

標簽庫&#xff1a; a) struts框架下的struts標簽庫 b) sun jstl c標簽庫 作用: 1) jsp 和 java代碼分離 -- 自定義標簽 用標簽來替代Java的代碼 2) struts標簽 能夠和struts-config.xml actionForm等特有的對象進行交互 stru…

“multiprocessing\spawn.py”, line 105, in spawn_main錯誤與解決方法

記錄一個不知名的錯誤錯誤解決方法OS&#xff1a; Windows 10 錯誤非常的長&#xff0c;以至于&#xff0c;我也沒有什么耐心去看&#xff0c;看了前面幾行&#xff0c;應該是多線程引起的。下面太長&#xff0c;可以選擇不看。 錯誤 Traceback (most recent call last): Trac…