MySQL插入數據與更新和刪除數據.md

19章 插入數據

     利用MySQL中INSERT語句插入數據

19.1 數據插入

     此前章節一直使用SELECT語句,但還有三個經常使用的SQL語句需要掌握(INSERTUPDATEDELETE)。
插入的幾種形式,
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_idNULL。這是因爲在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_idNULL非必須。所以,縱使與表中列的次序不同,也可以完成插入操作。因此當比給出列名的時候,必須正確的給出每列<所有列>的值。
     如果表的定義允許,可以選擇在INSERT操作時忽略某些列。忽略的列必須滿足如下條件,
1. 該列定義爲允許NULL;
2. 表中給出默認值;

  • 注意,爲避免影響到數據庫瞬時速度,可以將插入操作降低優先級。INSERT LOW_PRIORITY INTO,此操作同樣適用於UPDATEDELETE

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 SELECTcustnew中將所有數據導入customersSELECT語句將檢索信息傳入INSERT
- 注意,此例子中,將cust_id一併導入(cust_id被定義爲非空、自增),因此必須確保導入的cust_id不重複。否則,需要省略此列,有SQL自增。同時檢索列與插入列的名字不需要相同,MySQL只關心對應列順序。

20章 更新和刪除數據

    UPDATEDELETE使用

20.1 更新數據

  • 注意,在使用UPDATE語句時,必須嚴格小心,不要省略WHERE語句,否則會更新表中所有行。

    1. UPDARE更新數據的兩種方式,
      • 更新表中所有行;
      • 更新表中特定行。
    2. 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 更新和刪除的原則

  1. 除非更新和刪除每一行,使用UPDATEDELETE操作都需要使用WHERE
  2. 保證每個表,都有主鍵,以便與使用WHERE語句進行唯一性檢索;
  3. 在使用UPDATEDELETE前,需要進行SELECT測試,保證過濾條件的正確性;
  4. 使用強制實施引用完整的數據庫,保證不會刪除與其他表有關聯的數據的行。

    • MySQL沒有撤銷,沒有撤銷,沒有撤銷。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章