MySQL必知必會——插入、更新和刪除數據

一、插入數據

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 SELECTSELECT語句可包含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將不允許刪除具有其他表相關聯的數據的行。
發佈了115 篇原創文章 · 獲贊 30 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章