天天看點

如何向表中插入資料以及如何更新、删除表中的資料

1. 插入

INSERT 用來将行插入到資料庫表中。插入有幾種方式:

  • 插入完整的行。
  • 插入行的一部分。
  • 插入某些查詢的結果。

INSERT 文法要求指定表名和插入到新表中的值。例如,我們将一個新顧客插入到 customers 表中。

插入前:

如何向表中插入資料以及如何更新、删除表中的資料

運作結果如下:

如何向表中插入資料以及如何更新、删除表中的資料

插入到新表中的值由 VALUES 子句給出,以這種方式插入資料時,我們必須為每一列提供一個值。而且各列必須以他們在表定義中出現的次序填充。雖然這種插入資料的文法很簡單,但并不安全,應該盡量避免使用。因為上面的 SQL 語句高度依賴于表中列的定義次序。比較安全的寫法,如下:

INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, 
    cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES( 'Toy Land', '123 Any Street', 'New York', 
    'NY', '11111', 'USA', 'Jordan', '[email protected]');      

運作結果如下:

如何向表中插入資料以及如何更新、删除表中的資料

在上述寫法中,我們在表名後的括号裡明确指定了列名,VALUES 中的第一個值對應于第一個指定列名,第二個值對應于第二個列名,如此等等。因為提供了列名,隻要 VALUES 中的值和指定的列名能比對上就行,不一定按照各列出現在表中的實際次序。這樣做的好處是,即使表結構發生改變,這條 INSERT 語句仍然能正确工作。由于明确指定了列名,是以我們可以随意指定列的順序。

例如,我們也可以如下插入資料:

INSERT INTO Customers(cust_id, cust_contact, cust_email, cust_name, 
    cust_address, cust_city, cust_state, cust_zip, cust_country)
VALUES('1000000006', 'Jordan', '[email protected]', 'Toy Land', 
    '123 Any Street', 'New York', 'NY', '11111','USA');      

運作結果如下:

如何向表中插入資料以及如何更新、删除表中的資料

注意事項:1.不要使用沒有明确給出列的 INSERT 語句。給出列能使 SQL 代碼繼續發揮作用,即使表結構發生了變化。2.不管使用哪種 INSERT 文法,VALUES 的數目都必須正确。如果不提供列名,則必須給每個表列提供一個值;如果提供列名,則必須給列出的每個列一個值。否則,就會産生一條錯誤消息,相應的行不能成功插入。

由于明确列出了列名,我們在進行插入資料時,可以省略某些列,這表示可以隻給某些列提供值,給其他列不提供值。例如,我們可以如下插入資料:

INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country)
VALUES('1000000006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA');      

運作結果如下:

如何向表中插入資料以及如何更新、删除表中的資料

在這個例子中,我們省略了 cust_contact 和 cust_email 這兩列。如果表的定義允許,則可以在 INSERT 操作中省略某些列。省略的列必須滿足以下某個條件:1.該列定義為允許 NULL 值。2.在表定義中給出預設值。這表示如果不給出值,将使用預設值。如果表中不允許有 NULL 值或者預設值,這時卻省略了表中的值, DBMS 就會産生錯誤消息,相應的行不能成功插入。

INSERT 還可以用來将查詢出的資料插入到表中。就是所謂的 INSERT SELECT。它由一條 INSERT 語句和一條 SELECT 語句組成。

例如,未進行操作前, customersnew 表中的内容是空的:

如何向表中插入資料以及如何更新、删除表中的資料

我們從 customers 表中查詢資料插入到 customersnew 表中。

INSERT INTO customersnew(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 customers;      

運作結果如下:

如何向表中插入資料以及如何更新、删除表中的資料

可以發現已經執行完成。

然後我們打開 customersnew 表, 可以發現資料已經插入成功:

如何向表中插入資料以及如何更新、删除表中的資料

在這個例子中,INSERT 和 SELECT 語句中使用了相同的列名。但是,不一定要求列名比對。事實上,DBMS 一點兒也不關心 SELECT 傳回的列名。它使用的是列的位置,是以 SELECT 中的第一列(不管其列名)将用來填充表列中指定的第一列,第二列将用來填充表列中指定的第二列,如此等等。

INSERT SELECT 中 SELECT 語句可以包含 WHERE 子句,以過濾插入的資料。

另外,有時候,我們需要把一個表的内容複制到另外一張表。這時候我們可以使用:

CREATE TABLE custcopy AS 
SELECT * FROM customers;      

運作結果如下:

如何向表中插入資料以及如何更新、删除表中的資料
如何向表中插入資料以及如何更新、删除表中的資料

可以發現sql語句的執行與表内容的複制都已完成,其内容與 customers 中的内容一緻

2. 更新

下面我們來講下如何更新資料:更新表中的資料可以使用 UPDATE 語句,有兩種使用 UPDATE 的方式:1.更新表中的特定行。2.更新表中的所有行。

使用 UPDATE 語句非常容易,基本的 UPDATE 語句由三部分組成:1.要更新的表。2.列名和它們的新值。3.确定要更新哪些行的過濾條件。

舉個簡單的例子,例如我們要更新客戶 1000000005 的電子郵箱位址,語句如下:

UPDATE customers 
SET cust_email = '[email protected]' 
WHERE cust_id = '1000000005';      

執行結果如下:

如何向表中插入資料以及如何更新、删除表中的資料

UPDATE 語句以 WHERE 子句結束,它告訴 DBMS 更新哪一行。沒有 WHERE 子句,DBMS 将會用這個電子郵件位址更新 Customers 表中的所有行, 這不是我們希望的。

更新多列的文法稍微不同,例如:

UPDATE Customers 
SET cust_contact = 'Sam Roberts',
    cust_email = '[email protected]'       

執行結果如下:

如何向表中插入資料以及如何更新、删除表中的資料

在更新多個列時,隻需要使用一條 SET 指令,每個“列=值”對之間用逗号分隔(最後一列之後不用逗号)。在此例子中,更新顧客 1000000006 的 cust_contact 和 cust_email 列。

要删除某個列的值,可設定它為 NULL。例如:

UPDATE Customers 
SET cust_email = NULL 
WHERE cust_id = '1000000005';      

執行結果如下:

如何向表中插入資料以及如何更新、删除表中的資料

在使用 UPDATE 語句時,不要省略 WHERE 子句,因為稍不注意,就會更新表中所有的行。

3. 删除

下面來講下如何删除資料:從一個表中删除資料,使用 DELETE 語句。有兩種使用 DELETE 的方式:1.從表中删除特定的行;2.從表中删除所有行。例如:從Customers 表中删除一行:

DELETE FROM Customers 
WHERE cust_id = '1000000006';      

執行結果如下:

如何向表中插入資料以及如何更新、删除表中的資料

DELETE 不需要列名或通配符。DELETE 删除整行而不是删除列。要删除指定的列,請使用 UPDATE 語句。

如果想從表中删除所有行,不要使用 DELETE。可使用 TRUNCATE TABLE 語句,它完成相同的工作,而速度更快(因為不記錄資料的變動)。

繼續閱讀