准確應用MySQL INSERT INTO語句。本站提示廣大學習愛好者:(准確應用MySQL INSERT INTO語句)文章只能為提供參考,不一定能成為您想要的結果。以下是准確應用MySQL INSERT INTO語句正文
以下的文章重要引見的是MySQL INSERT INTO語句的現實用法和MySQL INSERT INTO語句中的相干語句的引見,MySQL INSERT INTO語句在現實運用中是常常應用到的語句,所以對其相干的內容照樣多多控制為好。
INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),...
MySQLINSERT INTO SELECT語句:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ...
INSERT INTO語句:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name SET col_name=expression, col_name=expression, ...
INSERT把新行拔出到一個存在的表中,INSERTINTO... VALUES情勢的語句基於明白指定的值拔出行,MySQLINSERT INTO SELECT情勢拔出從其他表選擇的行,有多個值表的INSERT INTO... VALUES的情勢在MySQL 3.22.5或今後版本中支撐,col_name=expression語法在MySQL 3.22.10或今後版本中支撐。
tbl_name是行應當被拔出個中的表。列名表或SET子句指出語句為那一列指定值。
假如你為INSERT ... VALUES或INSERT ... SELECT不指定列表,一切列的值必需在VALUES()表或由SELECT供給。假如你不曉得表中列的次序,應用DESCRIBE tbl_name來找出。
任何沒有明白地給出值的列被設置為它的缺省值。例如,假如你指定一個列表並沒定名表中一切列,未定名的列被設置為它們的缺省值。缺省值賦值在7.7 CREATE TABLE句法中描寫。
一個expression可以援用在一個值表先前設置的任何列。例如,你能如許:
MySQL> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
但不克不及如許:
MySQL> INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
假如你指定症結詞LOW_PRIORITY,INSERT的履行被推延到沒有其他客戶正在讀取表。在這類情形下,客戶必需比及拔出語句完成後,假如表頻仍應用,它能夠花很長時光。這與INSERT DELAYED讓客立時持續正好相反。
假如你在一個有很多值行的INSERT中指定症結詞IGNORE,表中任何復制一個現有PRIMARY或UNIQUE鍵的行被疏忽而且不被拔出。假如你不指定IGNORE,拔出假如有任何復制現有症結值的行被廢棄。你可用C API函數MySQL_info()檢討若干行被拔出到表中。
假如MySQL用DONT_USE_DEFAULT_FIELDS選項設置裝備擺設,INSERT語句發生一個毛病,除非你明白對須要一個非NULL值的一切列指定值。見4.7.3 典范configure選項。
MySQLINSERT INTO ... SELECT語句知足以下前提:
查詢不克不及包括一個ORDER BY子句。
INSERT語句的目標表不克不及湧現在SELECT查詢部門的FROM子句,由於這在ANSI SQL中被制止讓從你正在拔出的表中SELECT。(成績是SELECT將能夠發明在統一個運轉時代內先前被拔出的記載。當應用子選擇子句時,情形能很輕易混雜)
AUTO_INCREMENT列象平常一樣任務。
假如你應用INSERT ... SELECT或INSERT ... VALUES語句有多個值列表,你可使用C API函數MySQL_info()獲得查詢的信息。信息字符串的格局以下:
Records: 100 Duplicates: 0 Warnings: 0
Duplicates指出不克不及被拔出的行的數目,由於他們與現有的獨一的索引值反復。Warnings指出在湧現某些成績時測驗考試拔出列值的次數。鄙人列任何前提下都能夠產生毛病:
拔出NULL到被聲清楚明了NOT NULL的列,列被設置為它的缺省值。
將超越列規模的值設置給一個數字列,值被剪切為規模內恰當的端點值。
將數字列設成例如'10.34 a'的值,拖尾的渣滓被剝去並依然是數字部門被拔出。假如值基本不是一個數字,列被設置到0。
把一個字符串拔出到跨越列的最年夜長度的一個CHAR、VARCHAR、TEXT或BLOB列中。值被截斷為列的最年夜長度。
把一個對列類型不正當的值拔出到一個日期或時光列。列被設置為該列類型恰當的“零”值。
關於INSERT語句的DELAYED選項是MySQL專屬的選項-假如你客戶有不克不及比及INSERT完成,它是很有效的。當你為日志登錄應用MySQL時,並且你也周期性地運轉花很長時光完成的SELECT語句,這是一個罕見的成績。DELAYED在面MySQL 3.22.15中被引入,它是MySQL對 ANSI SQL92 的一個擴大。
當你應用INSERT DELAYED時,客戶將立時預備好,而且當表不被任何其他的線程應用時,即將被拔出。
另外一個應用INSERT DELAYED的重要利益是從許多客戶拔出被綁縛在一路而且寫進一個塊。這比做許多零丁的拔出要來的快。
以上的相干內容就是對MySQL INSERT INTO語句的引見,願望對年夜家的進修有所贊助。