溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何向MySQL數(shù)據(jù)表插入行記錄

發(fā)布時(shí)間:2022-01-19 11:24:37 來源:億速云 閱讀:510 作者:小新 欄目:數(shù)據(jù)庫

這篇文章主要介紹了如何向MySQL數(shù)據(jù)表插入行記錄,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

摘要:為裝載數(shù)據(jù)是管理員的重要職責(zé)之一,正因?yàn)橹匾?,所以MySQL提供的方法也是非常繁多。其中主要使用INSERT和LOAD語句

使用INSERT語句插入新數(shù)據(jù)

語法:INSERT [INTO] tbl_name [(col_name,...)] VALUES (pression,...),…
      INSERT [INTO] tbl_name SET col_name=expression, ...

讓我們開始利用 INSERT 語句來增加記錄,這是一個(gè) SQL 語句,需要為它指定希望插入數(shù)據(jù)行的表或?qū)⒅蛋葱蟹湃氲谋?。INSERT 語句具有幾種形式:

可指定所有列的值:

例如:

shell>  –u root –p
mysql> use mytest;
mysql> insert into worker values(“tom”,”tom@yahoo.com”);


“INTO”一詞自 MySQL 3.22.5 以來是可選的。(這一點(diǎn)對(duì)其他形式的 INSERT 語句也成立。)VALUES 表必須包含表中每列的值,并且按表中列的存放次序給出。(一般,這就是創(chuàng)建表時(shí)列的定義次序。如果不能肯定的話,可使用 DESCRIBE tbl_name 來查看這個(gè)次序。)

使用多個(gè)值表,可以一次提供多行數(shù)據(jù)。

Mysql>insert into worker values(‘tom’,’tom@yahoo.com’),(‘paul’,’paul@yahoo.com’);

有多個(gè)值表的INSERT ... VALUES的形式在MySQL 3.22.5或以后版本中支持。

可以給出要賦值的那個(gè)列,然后再列出值。這對(duì)于希望建立只有幾個(gè)列需要初始設(shè)置的記錄是很有用的。

例如:

mysql>insert into worker (name) values (‘tom’);

自 MySQL 3.22.5 以來,這種形式的 INSERT 也允許多個(gè)值表:

mysql>insert into worker (name) values (‘tom’), (‘paul’);

在列的列表中未給出名稱的列都將賦予缺省值。

自 MySQL 3.22 .10 以來,可以 col_name = value 的形式給出列和值。

例如:

mysql>insert into worker set name=’tom’;

在 SET 子句中未命名的行都賦予一個(gè)缺省值。

使用這種形式的 INSERT 語句不能插入多行。

一個(gè)expression可以引用在一個(gè)值表先前設(shè)置的任何列。例如,你能這樣:

mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);

但不能這樣:

mysql> INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);

使用INSERT…SELECT語句插入從其他表選擇的行

當(dāng)我們?cè)谏弦还?jié)學(xué)習(xí)創(chuàng)建表時(shí),知道可以使用select從其它表來直接創(chuàng)建表,甚至可以同時(shí)復(fù)制數(shù)據(jù)記錄。如果你已經(jīng)擁有了一個(gè)表,你同樣可以從select語句的配合中獲益。

從其它表中錄入數(shù)據(jù),例如:

mysql>insert into tbl_name1(col1,col2) select col3,col4 from tbl_name2;

你也可以略去目的表的列列表,如果你每一列都有數(shù)據(jù)錄入。

mysql>insert into tbl_name1 select col3,col4 from tbl_name2;

INSERT INTO ... SELECT語句滿足下列條件:

查詢不能包含一個(gè)ORDER BY子句。

INSERT語句的目的表不能出現(xiàn)在SELECT查詢部分的FROM子句,因?yàn)檫@在ANSI SQL中被禁止讓從你正在插入的表中SELECT。(問題是SELECT將可能發(fā)現(xiàn)在同一個(gè)運(yùn)行期間內(nèi)先前被插入的記錄。當(dāng)使用子選擇子句時(shí),情況能很容易混淆)

使用replace、replace…select語句插入

REPLACE功能與INSERT完全一樣,除了如果在表中的一個(gè)老記錄具有在一個(gè)唯一索引上的新記錄有相同的值,在新記錄被插入之前,老記錄被刪除。對(duì)于這種情況,insert語句的表現(xiàn)是產(chǎn)生一個(gè)錯(cuò)誤。

REPLACE語句也可以褐SELECT相配合,所以上兩小節(jié)的內(nèi)容完全適合REPALCE.。

應(yīng)該注意的是,由于REPLACE語句可能改變?cè)械挠涗洠虼耸褂脮r(shí)要小心。

使用LOAD語句批量錄入數(shù)據(jù)

本章的前面討論如何使用SQL向一個(gè)表中插入數(shù)據(jù)。但是,如果你需要向一個(gè)表中添加許多條記錄,使用SQL語句輸入數(shù)據(jù)是很不方便的。幸運(yùn)的是,MySQL提供了一些方法用于批量錄入數(shù)據(jù),使得向表中添加數(shù)據(jù)變得容易了。本節(jié)以及下一節(jié),將介紹這些方法。本節(jié)將介紹SQL語言級(jí)的解決方法。

1、基本語法

語法:LOAD DATA [LOCAL] INFILE file_name.txt [REPLACE | IGNORE] INTO TABLE tbl_name LOAD DATA INFILE語句從一個(gè)文本文件中以很高的速度讀入一個(gè)表中。如果指定LOCAL關(guān)鍵詞,從客戶主機(jī)讀文件。如果LOCAL沒指定,文件必須位于服務(wù)器上。(LOCAL在MySQL3.22.6或以后版本中可用。)

為了安全原因,當(dāng)讀取位于服務(wù)器上的文本文件時(shí),文件必須處于數(shù)據(jù)庫目錄或可被所有人讀取。另外,為了對(duì)服務(wù)器上文件使用LOAD DATA INFILE,在服務(wù)器主機(jī)上你必須有file的權(quán)限。見第七章 數(shù)據(jù)庫安全。

REPLACE和IGNORE關(guān)鍵詞控制對(duì)現(xiàn)有的唯一鍵記錄的重復(fù)的處理。如果你指定REPLACE,新行將代替有相同的唯一鍵值的現(xiàn)有行。如果你指定IGNORE,跳過有唯一鍵的現(xiàn)有行的重復(fù)行的輸入。如果你不指定任何一個(gè)選項(xiàng),當(dāng)找到重復(fù)鍵鍵時(shí),出現(xiàn)一個(gè)錯(cuò)誤,并且文本文件的余下部分被忽略時(shí)。

如果你使用LOCAL關(guān)鍵詞從一個(gè)本地文件裝載數(shù)據(jù),服務(wù)器沒有辦法在操作的當(dāng)中停止文件的傳輸,因此缺省的行為好像IGNORE被指定一樣。

2、文件的搜尋原則

當(dāng)在服務(wù)器主機(jī)上尋找文件時(shí),服務(wù)器使用下列規(guī)則:

如果給出一個(gè)絕對(duì)路徑名,服務(wù)器使用該路徑名。

如果給出一個(gè)有一個(gè)或多個(gè)前置部件的相對(duì)路徑名,服務(wù)器相對(duì)服務(wù)器的數(shù)據(jù)目錄搜索文件。

如果給出一個(gè)沒有前置部件的一個(gè)文件名,服務(wù)器在當(dāng)前數(shù)據(jù)庫的數(shù)據(jù)庫目錄尋找文件。

注意這些規(guī)則意味著一個(gè)像“./myfile.txt”給出的文件是從服務(wù)器的數(shù)據(jù)目錄讀取,而作為“myfile.txt”給出的一個(gè)文件是從當(dāng)前數(shù)據(jù)庫的數(shù)據(jù)庫目錄下讀取。也要注意,對(duì)于下列哪些語句,對(duì)db1文件從數(shù)據(jù)庫目錄讀取,而不是db2:

mysql> USE db1;
mysql> LOAD DATA INFILE "./data.txt" INTO TABLE db2.my_table;


3、FIELDS和LINES子句的語法

如果你指定一個(gè)FIELDS子句,它的每一個(gè)子句(TERMINATED BY, [OPTIONALLY] ENCLOSED BY和ESCAPED BY)也是可選的,除了你必須至少指定他們之一。

如果你不指定一個(gè)FIELDS子句,缺省值與如果你這樣寫的相同:

FIELDS TERMINATED BY ENCLOSED BY  ESCAPED BY \

如果你不指定一個(gè)LINES子句,缺省值與如果你這樣寫的相同:

LINES TERMINATED BY

換句話說,缺省值導(dǎo)致讀取輸入時(shí),LOAD DATA INFILE表現(xiàn)如下:

在換行符處尋找行邊界

在定位符處將行分進(jìn)字段

不要期望字段由任何引號(hào)字符封裝

將由“”開頭的定位符、換行符或“\”解釋是字段值的部分字面字符

LOAD DATA INFILE能被用來讀取從外部來源獲得的文件。例如,以dBASE格式的文件將有由逗號(hào)分隔并用雙引號(hào)包圍的字段。如果文件中的行由換行符終止,下面顯示的命令說明你將用來裝載文件的字段和行處理選項(xiàng):

mysql> LOAD DATA INFILE data.txt INTO TABLE tbl_name

FIELDS TERMINATED BY , ENCLOSED BY "

LINES TERMINATED BY
;


任何字段或行處理選項(xiàng)可以指定一個(gè)空字符串()。如果不是空,F(xiàn)IELDS [OPTIONALLY] ENCLOSED BY和FIELDS ESCAPED BY值必須是一個(gè)單個(gè)字符。FIELDS TERMINATED BY和LINES TERMINATED BY值可以是超過一個(gè)字符。例如,寫入由回車換行符對(duì)(CR+LF)終止的行,或讀取包含這樣行的一個(gè)文件,指定一個(gè)LINES TERMINATED BY
子句。

FIELDS [OPTIONALLY] ENCLOSED BY控制字段的包圍字符。對(duì)于輸出(SELECT ... INTO OUTFILE),如果你省略O(shè)PTIONALLY,所有的字段由ENCLOSED BY字符包圍。對(duì)于這樣的輸出的一個(gè)例子(使用一個(gè)逗號(hào)作為字段分隔符)顯示在下面:

"1","a string","100.20"

"2","a string containing a , comma","102.20"

"3","a string containing a " quote","102.20"

"4","a string containing a ", quote and comma","102.20"

如果你指定OPTIONALLY,ENCLOSED BY字符僅被用于包圍CHAR和VARCHAR字段:

1,"a string",100.20

2,"a string containing a , comma",102.20

3,"a string containing a " quote",102.20

4,"a string containing a ", quote and comma",102.20

注意,一個(gè)字段值中的ENCLOSED BY字符的出現(xiàn)通過用ESCAPED BY字符作為其前綴來轉(zhuǎn)義。也要注意,如果你指定一個(gè)空ESCAPED BY值,可能產(chǎn)生不能被LOAD DATA INFILE正確讀出的輸出。例如,如果轉(zhuǎn)義字符為空,上面顯示的輸出顯示如下。注意到在第四行的第二個(gè)字段包含跟隨引號(hào)的一個(gè)逗號(hào),它(錯(cuò)誤地)好象要終止字段:

1,"a string",100.20

2,"a string containing a , comma",102.20

3,"a string containing a " quote",102.20

4,"a string containing a ", quote and comma",102.20

FIELDS ESCAPED BY控制如何寫入或讀出特殊字符。如果FIELDS ESCAPED BY字符不是空的,它被用于前綴在輸出上的下列字符:

FIELDS ESCAPED BY字符

FIELDS [OPTIONALLY] ENCLOSED BY字符

FIELDS TERMINATED BY和LINES TERMINATED BY值的第一個(gè)字符

ASCII 0(實(shí)際上將后續(xù)轉(zhuǎn)義字符寫成 ASCII0,而不是一個(gè)零值字節(jié))

如果FIELDS ESCAPED BY字符是空的,沒有字符被轉(zhuǎn)義。指定一個(gè)空轉(zhuǎn)義字符可能不是一個(gè)好主意,特別是如果在你數(shù)據(jù)中的字段值包含剛才給出的表中的任何字符。

對(duì)于輸入,如果FIELDS ESCAPED BY字符不是空的,該字符的出現(xiàn)被剝?nèi)ゲ⑶液罄m(xù)字符在字面上作為字

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何向MySQL數(shù)據(jù)表插入行記錄”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI