- 19章 插入資料
- 1 資料插入
- 2 插入完整的行
- 3 插入多行
- 4 插入檢索出的語句
- 20章 更新和删除資料
- 1 更新資料
- 2 删除資料
- 3 更新和删除的原則
19章 插入資料
利用MySQL中
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, row affected ( 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, row affected ( 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, row affected ( 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 = ;
分析:
UPDARE
總是以要更新的表的名字開始,
SET
為指派指令
例子,使用多列更新時,隻需要一次
SET
指令即可
mysql> UPDATE customers SET cust_name = 'The Fudds', cust_email = '[email protected]' WHERE cust_id = ;
分析:
1. 如果多列更新,并且在一行或多行指派時出現錯誤,則整個
UPDATE
操作都會被取消(更新不會進行)。可以使用
IGNORE
關鍵字。
2. 為了删除每列的值,可以指派為
NULL
。
mysql> UPDATE customers SET cust_email = NULL WHERE cust_id = ;
20.2 删除資料
使用
DELETE
語句,進行删除操作,形式如下
- 從表中删除特定行;
- 從表中删除所有的行。
- 注意,在使用
DELETE
語句時,同樣必須嚴格小心,不要省略
WHERE
語句,否則會更新表中所有行。
-
DELETE
不需要列名或通配符。
DELETE
語句删除整行而不是整列,若删除整列需要使用
UPDATE
操作(在不使用
WHERE
語句前提下,更新資料)。
- 若需要删除所有資料,不需要使用
DELETE
語句,使用速度更快的
TRUNCATE TABLE
。操作原理為,删除原表格,并建立新表。
20.3 更新和删除的原則
- 除非更新和删除每一行,使用
、UPDATE
操作都需要使用DELETE
;WHERE
- 保證每個表,都有主鍵,以便與使用
語句進行唯一性檢索;WHERE
- 在使用
、UPDATE
前,需要進行DELETE
測試,保證過濾條件的正确性;SELECT
- 使用強制實施引用完整的資料庫,保證不會删除與其他表有關聯的資料的行。
- MySQL沒有撤銷,沒有撤銷,沒有撤銷。