展會(huì)信息港展會(huì)大全

正確使用MySQL INSERT INTO語(yǔ)句
來(lái)源:互聯(lián)網(wǎng)   發(fā)布日期:2015-09-21 21:40:00   瀏覽:9830次  

導(dǎo)讀:MySQL數(shù)據(jù)庫(kù)是一種小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),MySQL數(shù)據(jù)庫(kù)的優(yōu)化是MySQL數(shù)據(jù)庫(kù)操作過(guò)程中非常重要的工作,MySQL數(shù)據(jù)庫(kù)的優(yōu)化能夠?qū)崿F(xiàn)MySQL數(shù)據(jù)庫(kù)操作的簡(jiǎn)便。...

以下的文章主要介紹的是MySQL INSERT INTO語(yǔ)句的實(shí)際用法以及MySQL INSERT INTO語(yǔ)句中的相關(guān)語(yǔ)句的介紹,MySQL INSERT INTO語(yǔ)句在實(shí)際應(yīng)用中是經(jīng)常使用到的語(yǔ)句,所以對(duì)其相關(guān)的內(nèi)容還是多多掌握為好。

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

[INTO] tbl_name [(col_name,...)]

VALUES (expression,...),(...),...

MySQLINSERT INTO SELECT語(yǔ)句:

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

[INTO] tbl_name [(col_name,...)]

SELECT ...

INSERT INTO語(yǔ)句:

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

[INTO] tbl_name

SET col_name=expression, col_name=expression, ...

INSERT把新行插入到一個(gè)存在的表中,INSERTINTO... VALUES形式的語(yǔ)句基于明確指定的值插入行,MySQLINSERT INTO SELECT形式插入從其他表選擇的行,有多個(gè)值表的INSERT INTO... VALUES的形式在MySQL 3.22.5或以后版本中支持,col_name=expression語(yǔ)法在MySQL 3.22.10或以后版本中支持。

tbl_name是行應(yīng)該被插入其中的表。列名表或SET子句指出語(yǔ)句為那一列指定值。

如果你為INSERT ... VALUES或INSERT ... SELECT不指定列表,所有列的值必須在VALUES()表或由SELECT提供。如果你不知道表中列的順序,使用DESCRIBE tbl_name來(lái)找出。

任何沒(méi)有明確地給出值的列被設(shè)置為它的缺省值。例如,如果你指定一個(gè)列表并沒(méi)命名表中所有列,未命名的列被設(shè)置為它們的缺省值。缺省值賦值在7.7 CREATE TABLE句法中描述。

一個(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);

如果你指定關(guān)鍵詞LOW_PRIORITY,INSERT的執(zhí)行被推遲到?jīng)]有其他客戶正在讀取表。在這種情況下,客戶必須等到插入語(yǔ)句完成后,如果表頻繁使用,它可能花很長(zhǎng)時(shí)間。這與INSERT DELAYED讓客馬上繼續(xù)正好相反。

如果你在一個(gè)有許多值行的INSERT中指定關(guān)鍵詞IGNORE,表中任何復(fù)制一個(gè)現(xiàn)有PRIMARY或UNIQUE鍵的行被忽略并且不被插入。如果你不指定IGNORE,插入如果有任何復(fù)制現(xiàn)有關(guān)鍵值的行被放棄。你可用C API函數(shù)MySQL_info()檢查多少行被插入到表中。

如果MySQL用DONT_USE_DEFAULT_FIELDS選項(xiàng)配置,INSERT語(yǔ)句產(chǎn)生一個(gè)錯(cuò)誤,除非你明確對(duì)需要一個(gè)非NULL值的所有列指定值。見4.7.3 典型configure選項(xiàng)。

MySQLINSERT INTO ... SELECT語(yǔ)句滿足下列條件:

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

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

AUTO_INCREMENT列象往常一樣工作。

如果你使用INSERT ... SELECT或INSERT ... VALUES語(yǔ)句有多個(gè)值列表,你可以使用C API函數(shù)MySQL_info()得到查詢的信息。信息字符串的格式如下:

Records: 100 Duplicates: 0 Warnings: 0

Duplicates指出不能被插入的行的數(shù)量,因?yàn)樗麄兣c現(xiàn)有的唯一的索引值重復(fù)。Warnings指出在出現(xiàn)某些問(wèn)題時(shí)嘗試插入列值的次數(shù)。在下列任何條件下都可能發(fā)生錯(cuò)誤:

插入NULL到被聲明了NOT NULL的列,列被設(shè)置為它的缺省值。

將超出列范圍的值設(shè)置給一個(gè)數(shù)字列,值被剪切為范圍內(nèi)適當(dāng)?shù)亩它c(diǎn)值。

將數(shù)字列設(shè)成例如'10.34 a'的值,拖尾的垃圾被剝?nèi)ゲ⑷匀皇菙?shù)字部分被插入。如果值根本不是一個(gè)數(shù)字,列被設(shè)置到0。

把一個(gè)字符串插入到超過(guò)列的最大長(zhǎng)度的一個(gè)CHAR、VARCHAR、TEXT或BLOB列中。值被截?cái)酁榱械淖畲箝L(zhǎng)度。

把一個(gè)對(duì)列類型不合法的值插入到一個(gè)日期或時(shí)間列。列被設(shè)置為該列類型適當(dāng)?shù)?ldquo;零”值。

對(duì)于INSERT語(yǔ)句的DELAYED選項(xiàng)是MySQL專屬的選項(xiàng)-如果你客戶有不能等到INSERT完成,它是很有用的。當(dāng)你為日記登錄使用MySQL時(shí),而且你也周期性地運(yùn)行花很長(zhǎng)時(shí)間完成的SELECT語(yǔ)句,這是一個(gè)常見的問(wèn)題。DELAYED在面MySQL 3.22.15中被引入,它是MySQL對(duì) ANSI SQL92 的一個(gè)擴(kuò)展。

當(dāng)你使用INSERT DELAYED時(shí),客戶將馬上準(zhǔn)備好,并且當(dāng)表不被任何其他的線程使用時(shí),行將被插入。

另一個(gè)使用INSERT DELAYED的主要好處是從很多客戶插入被捆綁在一起并且寫進(jìn)一個(gè)塊。這比做很多單獨(dú)的插入要來(lái)的快。

以上的相關(guān)內(nèi)容就是對(duì)MySQL INSERT INTO語(yǔ)句的介紹,希望對(duì)大家的學(xué)習(xí)有所幫助。


贊助本站

相關(guān)熱詞: MySQL的INSERT語(yǔ)句 MySQL INSERT IN

相關(guān)內(nèi)容
AiLab云推薦
展開

熱門欄目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能實(shí)驗(yàn)室 版權(quán)所有    關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 公司動(dòng)態(tài) | 免責(zé)聲明 | 隱私條款 | 工作機(jī)會(huì) | 展會(huì)港