一、插入數據
1、插入
本章節介紹如何利用SQL地INSERT語句將數據插入表中。
插入可以用幾種方式使用:
- 插入完整的行
- 插入行的一部分
- 插入多行
- 插入某些查詢的結果
2、插入完整的行
INSERT語句要求指定表名和被插入到新行中的值。
MariaDB [course]> INSERT INTO customers
-> VALUES(NULL,
'Kobe Bryant',
'Staples Center',
'Los Angeles',
'California',
'90046',
'USA',
'Mamba',
NULL);
Query OK, 1 row affected, 1 warning (0.00 sec)
存儲到表列中的數據在VALUES子句中給出,對每個列必須提供一個值,沒有則使用NULL。每個列必須以它們在表定義中出現的次填充。
上面的語法應儘量避免使用,因爲其高度依賴於表中列的定義次序。編寫依賴於特定列次序的SQL語句是很不安全的。
MariaDB [course]> INSERT INTO customers(cust_name,
-> cust_address,
-> cust_city,
-> cust_state,
-> cust_zip,
-> cust_country,
-> cust_contact,
-> cust_email)
-> VALUES('Lebron Jame','Staples Center','Los Angeles','California','90046','USA','KING','NULL');
Query OK, 1 row affected, 1 warning (0.01 sec)
此例在表後的括號裏明確的給出了列名,在插入行時,將利用VALUES列表中的相應值填入列表中的對應項。即使表的結構改變,該INSERT語句仍然能正常工作。
使用明確列插入的語法,還可以省略列(cust_id),可以只給某些列提供值,給省略的列不用提供值。
省略列必須滿足以下的條件其一:
- 該列 定義爲允許NULL值
- 在表定義中給出默認值,如果不給出值則使用默認的值。
3、插入多個行
INSERT可以插入一行到一個表中,可以使用多條INSERT語句去插入多個行。甚至一次提交,每條語句用一個分號結束。
INSERT INTO customers(cust_name,
-> cust_address,
-> cust_city,
-> cust_state,
-> cust_zip,
-> cust_country,
-> cust_contact,
-> cust_email)
-> VALUES('Lebron Jame','Staples Center','Los Angeles','California','90046','USA','KING',NULL),
('Kobe Bryant','Staples Center','Los Angeles','California','90046','USA','Mamba',NULL);
其中單條INSERT語句有多組值,每組值用一對圓括號括起來,用括號分隔。
MySQL用單條INSERT語句處理多個插入比使用多條INSERT語句快。
4、插入檢索出的數據
INSERT還可以將一條SELECT語句的結果插入表中,即INSERT SELECT
假如需要從另一張表中合併客戶列表到你的customers表,這兩個表的結構應該是一樣的,以確保對應值插入時不會報錯。
INSERT INTO customers(cust_name,
-> cust_address,
-> cust_city,
-> cust_state,
-> cust_zip,
-> cust_country,
-> cust_contact,
-> cust_email)
SELECT cust_name,
-> cust_address,
-> cust_city,
-> cust_state,
-> cust_zip,
-> cust_country,
-> cust_contact,
-> cust_email
FROM custnew;
SELECT語句從custnew檢索出要插入的值,而不是列出它們,SELECT中列出的每個列對應於customers表後所跟的列表中的每個列。
INSERT SELECT
中SELECT語句
可包含WHERE子句
以過濾插入的數據。
二、更新和刪除數據
本章節介紹利用UPDATE和DELETE語句進一步操作表數據。
1、更新數據
爲了更新表中的數據,可使用UPDATE語句,可採用兩種方式:
- 更新表中的特定行
- 更新表中的所有行
在使用UPDATE時不要省略WHERE子句,如果不適用就會更新表中的所有行。
UPDATE語句由3部分組成,要更新的表,列名和它們的新值,確定要更新行的過濾條件。
MariaDB [course]> UPDATE customers
-> SET cust_email = '[email protected]'
-> WHERE cust_id = 10005;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
UPDATE語句總是要更新的表的名字開始,SET命令來將新值賦予被更新的列。
UPDATE語句以WHERE子句結束 ,它告訴MySQL更新哪一行,沒有WHERE子句,將會更新customers表中的所有行,這一點需要牢牢記住。
更新多個列:
MariaDB [course]> UPDATE customers
-> SET cust_name = 'The Fudds',
-> cust_email='[email protected]'
-> WHERE cust_id = 10005;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
在更新多個列時,只需要使用單個SET命令,每個列值對之間用逗號分隔。
IGNORE關鍵字,如果使用UPDATE語句更新多行,並且在更新這些行中的一行或多行時出現一個錯誤,則整個UPDATE操作被取消。即使是發生錯誤,也要繼續進行更新可使用IGNORE 關鍵字。 UPDATE IGNORE customers …
2、刪除數據
爲了從一個表中刪除數據,使用DELETE語句,可以使用兩種方法:
- 從表中刪除特定的行
- 從表中刪除所有行
不要省略WHERE子句:在使用DELETE一定要注意細心,如果忘記使用WHERE則會刪除整張表的所有數據。
下面的語句刪除custoemrs表的一行:
DELETE FROM customers
WHERE cust_id = 10006;
DELETE不需要列名或通配符,DELETE刪除整行而不是刪除列,爲了刪除指定的列,請使用UPDATE語句。
DELETE語句刪除表的內容而不是表,其從表中刪除行但是不刪除表本身。
如果項從表中刪除所有行,可使用TRUNCATE TABLE語句,它完成相同的工作,但是速度更快。
3、更新和刪除的指導原則
- 除非確實打算更新和刪除每一行,否則絕對不要使用不帶WHERE子句的UPDATE或DELETE語句。
- 保證每個表都有主鍵,儘可能像WHERE子句那樣用它。
- 在對UPDATE或DELETE語句使用WHERE子句前,應該先用SELECT進行測試,保證它過濾的是正確的記錄,以防止編寫的WHERE子句不正確。
- 使用強制實施引用完整性的數據庫,這樣MySQL將不允許刪除具有其他表相關聯的數據的行。