【MySQL必知必會】學習筆記Day10

【MySQL必知必會】學習筆記Day10&2.13&D19-20章&P131-143頁

17、插入數據

(1)數據插入

  • INSERT
  • 插入可 以用幾種方式使用:
    • 插入完整的行;
    • 插入行的一部分;
    • 插入多行;
    • 插入某些查詢的結果。

(2)插入完整的行

INSERT INTO Customers
VALUES(NULL,
    'Pep E.LaPew',
    '100 Main Street',
    'Los Angeles',
    'CA',
    '90046',
    'USA',
    'NULL',
    'NULL');

上面的這種不安全,高度依賴表中列的定義次序,表結構改變後,會出現問題
於是編寫下面更安全的,即使表結構改變,INSERT語句依然可以正確工作

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');

改變列的次序,依然可以:

INSERT INTO Customers(cust_name,
   cust_contact,
   cust_email,
   cust_address,
   cust_city,
   cust_state,
   cust_zip,
   cust_country)
VALUES('Pep E.LaPew',
    'NULL',
    'NULL',
    '100 Main Street',
    'Los Angeles',
    'CA',
    '90046',
    'USA');

注:

  • 不管使用哪種INSERT語法,都必須給出 VALUES的正確數目;
  • 還可以省略列,這表示可以只給某些列提供值,給 其他列不提供值,省略的列必須滿足以下某個條件:
    • 該列定義爲允許NULL值(無值或空值)。
    • 在表定義中給出默認值。這表示如果不給出值,將使用默認值。
  • 如果數據檢索是最重要的,則可以通過在 INSERT和INTO之間添加關鍵字LOW_PRIORITY,指示MySQL 降低INSERT語句的優先級,如下:
INSERT LOW_PRIORITY INTO

(3)插入多個行

INSERT INTO Customers(cust_name,
   cust_address,
   cust_city,
   cust_state,
   cust_zip,
   cust_country)
VALUES('Pep E.LaPew',
    '100 Main Street',
    'Los Angeles',
    'CA',
    '90046',
    'USA');
INSERT INTO Customers(cust_name,
   cust_address,
   cust_city,
   cust_state,
   cust_zip,
   cust_country)
VALUES('M.Martian',
    '42 Galaxy Street',
    'New York',
    'NY',
    '11213',
    'USA');

只要每條INSERT語句中的列名(和次序)相同,可以如下組合各語句:

INSERT INTO Customers(cust_name,
   cust_address,
   cust_city,
   cust_state,
   cust_zip,
   cust_country)
VALUES(
    'Pep E.LaPew',
    '100 Main Street',
    'Los Angeles',
    'CA',
    '90046',
    'USA'
     ) ,
    (
    'M.Martian',
    '42 Galaxy Street',
    'New York',
    'NY',
    '11213',
    'USA'
    );

注:其中單條INSERT語句有多組值,每組值使用一對圓括號括起來,用逗號分隔

(4)插入檢索出的數據

INSERT還可以利用它將一條SELECT語句的結果插入表中。這就是所 謂的INSERT SELECT

  • eg:假如想從另一表中合併客戶列表到你的customers表。不需要每次讀取一行,然後再將它用INSERT插入,可以如下進行:
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語句從custnew檢索出要插入的值,而不是列出它們。SELECT中列出的每個列對應於customers表名後所跟的列 表中的每個列。這條語句將插入多少行有賴於custnew表中有多少行。 如果這個表爲空,則沒有行被插入。如果這個表確實含有數據,則所有數據將被插入到customers

注:INSERT SELECT中的列名:爲簡單起見,這個例子在INSERT和 SELECT語句中使用了相同的列名。但是,不一定要求列名匹配。 事實上,MySQL甚至不關心SELECT返回的列名。它使用的是 列的位置,因此SELECT中的第一列(不管其列名)將用來填充 表列中指定的第一個列,第二列將用來填充表列中指定的第二 個列,如此等等。這對於從使用不同列名的表中導入數據是非 常有用的。

18、更新和刪除數據

(1)更新數據

  • UPDATE

  • 可採用兩種方式使用UPDATE:

    • 更新表中特定行
    • 更新表中所有行
  • 基本的 UPDATE語句由3部分組成,分別是:

    • 要更新的表
    • 列名和它們的新值
    • 確定要更新行的過濾條件
  • eg:更新一個列

UPDATE customers
SET cust_email = '[email protected]'
WHERE cust_id = 10005;
  • eg:更新多個列
UPDATE customers
SET cust_name='The Fudds',
    cust_email = '[email protected]'
WHERE cust_id = 10005;

注:1)在UPDATE語句中可以使用子查詢;2)IGNORE關鍵字 :如果用UPDATE語句更新多行,並且在更新這些行中的一行或多行時出一個現錯誤,則整個UPDATE操作被取消。爲即使是發生錯誤,也繼續進行更新,可使用IGNORE關鍵字,如下所示: UPDATE IGNORE customers…

  • eg:爲了刪除某個列的值,可設置它爲NULL(假如表定義允許NULL值)。
UPDATE customers
SET cust_email = NULL
WHERE cust_id = 10005;

(2)刪除數據

  • DELETE
  • 可以兩種方式使用DELETE:
    • 從表中刪除特定的行
    • 從表中刪除所有行
  • eg:刪除一行
DELETE FROM customers
WHERE cust_id = 10006;

注:

  • DELETE不需要列名或通配符。DELETE刪除整行而不是刪除列。爲了刪除指定的列,請使用UPDATE語句。
  • 刪除表的內容而不是表 :DELETE語句從表中刪除行,甚至是刪除表中所有行。但是,DELETE不刪除表本身。
  • 更快的刪除: 如果想從表中刪除所有行,不要使用DELETE。 可使用TRUNCATE TABLE語句,它完成相同的工作,但速度更 快(TRUNCATE實際是刪除原來的表並重新創建一個表,而不 是逐行刪除表中的數據)。

(3)更新和刪除的指導原則

  • 除非確實打算更新和刪除每一行,否則絕對不要使用不帶WHERE 子句的UPDATE或DELETE語句
  • 保證每個表都有主鍵,儘可能像WHERE子句那樣使用它(可以指定各主鍵、多個值或值的範圍)。
  • 在對UPDATE或DELETE語句使用WHERE子句前,應該先用SELECT進行測試,保證它過濾的是正確的記錄,以防編寫的WHERE子句不正確。
  • 使用強制實施引用完整性的數據庫,這樣MySQL將不允許刪除具有與其他表相關聯的數據的行

【MySQL必知必會】系列筆記:
【MySQL必知必會1-4章】學習筆記Day1
【MySQL必知必會5-7章】學習筆記Day2
【MySQL必知必會8-9章】學習筆記Day3
【MySQL必知必會10章】學習筆記Day4
【MySQL必知必會11-12章】學習筆記Day5
【MySQL必知必會13章】學習筆記Day6
【MySQL必知必會14-16章】學習筆記Day7
【MySQL必知必會17章】學習筆記Day8
【MySQL必知必會18章】學習筆記Day9

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