1數據插入
INSERT是用來插入(或添加)行到數據庫表的。插入可以用幾種方式使用:
- 插入完整的行;
- 插入行的一部分;
- 插入多行;
- 插入某些查詢的結果。
2插入完整行
把數據插入表中的最簡單的方法是使用基本的INSERT語法,要求指定表名和被插入到新行中的值。
輸入
INSERT INTO Customers
VALUES('1000000006',
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
NULL,
NULL);
分析:此例子插入一個新客戶到customers表。存儲到每個表列中的數據在VALUES子句中給出,對每個列必須提供一個值。如果某個列沒有值(如上面的cust_contact和cust_email列),應該使用NULL值(假定表允許對該列指定空值)。各個列必須以它們在表定義中出現的次序填充。第一列cust_id也爲NULL。這是因爲每次插入一個新行時,該列由MySQL自動增量。你不想給出一個值(這是MySQL的工作),又不能省略此列(如前所述,必須給出每個列),所以指定一個NULL值(它被MySQL忽略,MySQL在這裏插入下一個可用的cust_id值)。
編寫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);
分析:此例子完成與前一個INSERT語句完全相同的工作,但在表名後的括號裏明確地給出了列名。在插入行時,MySQL將用VALUES列表中的相應值填入列表中的對應項。VALUES中的第一個值對應於第一個指定的列名。第二個值對應於第二個列名,如此等等。
因爲提供了列名,VALUES必須以其指定的次序匹配指定的列名,不一定按各個列出現在實際表中的次序。其優點是,即使表的結構改變,此INSERT語句仍然能正確工作。你會發現cust_id的NULL值是不必要的,cust_id列並沒有出現在列表中,所以不需要任何值。
下面的INSERT語句填充所有列(與前面的一樣),但以一種不同的次
序填充。因爲給出了列名,所以插入結果仍然正確:
INSERT INTO customers(cust_name,
cust_contact,
cust_address,
cust_email,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES('Pep E. LaPew',
NULL,
NULL,
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA');
3插入多個行
INSERT可以插入一行到一個表中。但如果你想插入多個行怎麼辦?可以使用多條INSERT語句,甚至一次提交它們,每條語句用一個分號結束,如下所示:
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(
'Pep E. LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA'),
VALUES(
'M. MaRtian',
'42 Galaxy Way',
'New York',
'NY',
'11123',
'USA');
分析:其中單條INSERT語句有多組值,每組值用一對圓括號括起來,用逗號分隔。
4插入檢索出的數據
INSERT一般用來給表插入一個指定列值的行。但是,INSERT還存在另一種形式,可以利用它將一條SELECT語句的結果插入表中。這就是所謂的INSERT SELECT,顧名思義,它是由一條INSERT語句和一條SELECT語句組成的。
假如你想從另一表中合併客戶列表到你的customers表。不需要每次讀取一行,然後再將它用INSERT插入,可以如下進行:
輸入
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;
分析:這個例子使用INSERT SELECT從custnew中將所有數據導入
customers。SELECT語句從custnew檢索出要插入的值,而不是列出它們。SELECT中列出的每個列對應於customers表名後所跟的列表中的每個列。這條語句將插入多少行有賴於custnew表中有多少行。如果這個表爲空,則沒有行被插入(也不產生錯誤,因爲操作仍然是合法的)。如果這個表確實含有數據,則所有數據將被插入到customers。
這個例子導入了cust_id(假設你能夠確保cust_id的值不重複)。你也可以簡單地省略這列(從INSERT和SELECT中),這樣MySQL就會生成新值。