19章 插入數據
INSERT
語句插入數據
19.1 數據插入
SELECT
語句,但還有三個經常使用的SQL語句需要掌握(INSERT
、UPDATE
和DELETE
)。
插入的幾種形式,
1. 插入完整行;
2. 插入行的部分數據;
3. 插入多行;
4. 插入某些查詢的結果;
- 注意,由於MySQL的安全機制,需要注意權限。
19.2 插入完整的行
mysql> INSERT INTO customers VALUES(NULL, 'pep E. LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL);
Query OK, 1 row affected (0.00 sec)
分析:第一列cust_id爲NULL
。這是因爲在customers
表中,該列由MySQL自動增量,所以指定一個NULL
值。
- 注意,雖然此語法簡單,但並非安全。上面語句高度依賴表中列的次序。即使可以得到這些信息,但不能保證下次使用時,表的次序因爲種種原因經過調整,引起輸入錯誤。更保險的輸入方式應該爲,
mysql> INSERT INTO customers (cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country,cust_contact, cust_email) VALUES('pep E. LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL);
Query OK, 1 row affected (0.00 sec)
同時,此方式下,自動增量的cust_id
的NULL
非必須。所以,縱使與表中列的次序不同,也可以完成插入操作。因此當比給出列名的時候,必須正確的給出每列<所有列>的值。
INSERT
操作時忽略某些列。忽略的列必須滿足如下條件,
1. 該列定義爲允許NULL
;
2. 表中給出默認值;
- 注意,爲避免影響到數據庫瞬時速度,可以將插入操作降低優先級。
INSERT LOW_PRIORITY INTO
,此操作同樣適用於UPDATE
和DELETE
。
19.3 插入多行
插入多行,只需要在每組值用圓括號並且逗號隔開即可。
mysql> INSERT INTO customers (cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country,cust_contact, cust_email) VALUES('pep E. LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL), ('pep E. LaPew', '200 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL);
Query OK, 1 row affected (0.00 sec)
- 注意,使用多行插入操作,可以提高
INSERT
的性能。通俗講,儘量少用語句。
19.4 插入檢索出的語句
INSERT
一般用來插入單行,但是與SELECT
結合後,可以使用所謂的INSERT SELECT
,舉例說明
mysql> 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
語句將檢索信息傳入INSERT
。
- 注意,此例子中,將cust_id一併導入(cust_id被定義爲非空、自增),因此必須確保導入的cust_id不重複。否則,需要省略此列,有SQL自增。同時檢索列與插入列的名字不需要相同,MySQL只關心對應列順序。
20章 更新和刪除數據
UPDATE
和DELETE
使用
20.1 更新數據
注意,在使用
UPDATE
語句時,必須嚴格小心,不要省略WHERE
語句,否則會更新表中所有行。UPDARE
更新數據的兩種方式,
- 更新表中所有行;
- 更新表中特定行。
UPDARE
語句由三部分組成,
- 要更新的表;
- 列名和他們的新值;
- 確定要更新行的過濾條件。
例子,更新單列,
mysql> UPDATE customers SET cust_email = '[email protected]' WHERE cust_id = 10005;
分析:UPDARE
總是以要更新的表的名字開始,SET
爲賦值命令
例子,使用多列更新時,只需要一次SET
命令即可
mysql> UPDATE customers SET cust_name = 'The Fudds', cust_email = '[email protected]' WHERE cust_id = 10005;
分析:
1. 如果多列更新,並且在一行或多行賦值時出現錯誤,則整個UPDATE
操作都會被取消(更新不會進行)。可以使用IGNORE
關鍵字。
2. 爲了刪除每列的值,可以賦值爲NULL
。
mysql> UPDATE customers SET cust_email = NULL WHERE cust_id = 10005;
20.2 刪除數據
DELETE
語句,進行刪除操作,形式如下
- 從表中刪除特定行;
- 從表中刪除所有的行。
- 注意,在使用DELETE
語句時,同樣必須嚴格小心,不要省略WHERE
語句,否則會更新表中所有行。
- DELETE
不需要列名或通配符。DELETE
語句刪除整行而不是整列,若刪除整列需要使用UPDATE
操作(在不使用WHERE
語句前提下,更新數據)。
- 若需要刪除所有數據,不需要使用DELETE
語句,使用速度更快的TRUNCATE TABLE
。操作原理爲,刪除原表格,並創建新表。
20.3 更新和刪除的原則
- 除非更新和刪除每一行,使用
UPDATE
、DELETE
操作都需要使用WHERE
; - 保證每個表,都有主鍵,以便與使用
WHERE
語句進行唯一性檢索; - 在使用
UPDATE
、DELETE
前,需要進行SELECT
測試,保證過濾條件的正確性; 使用強制實施引用完整的數據庫,保證不會刪除與其他表有關聯的數據的行。
- MySQL沒有撤銷,沒有撤銷,沒有撤銷。