數(shù)據(jù)庫學(xué)習(xí)筆記——15 插入數(shù)據(jù)

1 數(shù)據(jù)插入

顧名思義,INSERT用來將行插入(或添加)到數(shù)據(jù)庫表。插入有幾種方式:

  • 插入完整的行;
  • 插入行的一部分;
  • 插入某些查詢結(jié)果。

1.1 插入完整的行

INSERT INTO customers VALUES('1000000006','Toy Land','123 Any Street','New York','NY','11111','USA',NULL,NULL);
存儲到表中每一列的數(shù)據(jù)在VALUES子句中給出,必須給每一列提供一個值。
雖然這種語法很簡單,但并不安全。
編寫INSERT語句更安全(不過更繁瑣)的方法如下:
INSERT INTO customers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email) VALUES('1000000006','Toy Land','123 Any Street','New York','NY','11111','USA',NULL,NULL);
因為提供了列名,VALUES必須以其指定的次序匹配指定的列名,不一定按各列名出現(xiàn)在表中實際次序。其優(yōu)點是,即使表的結(jié)構(gòu)改變,這條INSERT語句仍然能正確工作。
下面的INSERT語句填充所有的列(與前面的一樣),但以一種不同的次序填充。因為給出了列名,所以插入結(jié)構(gòu)任然正確:
INSERT INTO customers(cust_id,cust_contact,cust_email,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country) VALUES('1000000006',NULL,NULL,'Toy Land','123 Any Street','New York','NY','11111','USA');

1.2 插入部分行

只給某些列提供值。
INSERT INTO customers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country) VALUES('1000000007','張三','舜華路2000號','濟南','JN','25000','CN');

注意:省略列
省略的列必須滿足以下某個條件。

  • 該列定義為允許NULL值(無值或空值)
  • 在表定義中給出默認值。這表示如果不給出值,將使用默認值。

1.3 插入檢索出的數(shù)據(jù)

INSERT SELECT是有一條INSERT語句和一條SELECT語句組成的。
INSERT INTO customers(cust_id,cust_contact,cust_email,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country) SELECT cust_id,cust_contact,cust_email,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country FROM custnew;
這個例子從一個名為custnew 的表中讀出數(shù)據(jù)并插入customers表。在填充custnew時,不應(yīng)該使用已經(jīng)在customers中用過的cust_id值。

提示:INSERT SELECT中的列
事實上,DBMS已點也不關(guān)心SELECT返回的列名,它使用的是列的位置。

INSERT SELECT中SELECT語句可以包含WHERE子句,以過濾插入的數(shù)據(jù)。

2 從一個表復(fù)制到另一個表

要將一個表的內(nèi)容復(fù)制到一個全新的表(運行中創(chuàng)建的表),可以使用SELECT INTO語句。
與INSERT SELECT將數(shù)據(jù)添加到一個已經(jīng)存在的表不同,SELECT INTO將數(shù)據(jù)賦值到一個新表。

說明:INSERT SELECT與SELECT INTO
它們之間的一個重要差別是前者插入數(shù)據(jù),而后者導(dǎo)出數(shù)據(jù)。

SELECT * INTO custcopy FROM customers
但是MySQL使用的語法稍有不同:
CREATE TABLE custcopy AS SELECT * FROM customers;
在使用SELECT INTO時,需要知道:

  • 任何SELECT選項和子句都可以使用,包括WHERE和GROUP BY;
  • 可利用聯(lián)結(jié)從多個表插入數(shù)據(jù);
  • 不管從多少個表檢索數(shù)據(jù),數(shù)據(jù)都只能插入到一個表中。

例子:
CREATE TABLE tempmi AS SELECT c.cust_id,o.order_num FROM customers AS c RIGHT OUTER JOIN orders AS o ON c.cust_id = o.cust_id;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容