天天看點

MySQL插入資料與更新和删除資料.md19章 插入資料20章 更新和删除資料

  • 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

    語句,否則會更新表中所有行。
    1. UPDARE

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

  1. 除非更新和删除每一行,使用

    UPDATE

    DELETE

    操作都需要使用

    WHERE

  2. 保證每個表,都有主鍵,以便與使用

    WHERE

    語句進行唯一性檢索;
  3. 在使用

    UPDATE

    DELETE

    前,需要進行

    SELECT

    測試,保證過濾條件的正确性;
  4. 使用強制實施引用完整的資料庫,保證不會删除與其他表有關聯的資料的行。
    • MySQL沒有撤銷,沒有撤銷,沒有撤銷。