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;