零基礎入門 SQL 系列之(八)插入 更新 刪除

2021-10-17 19:09:45 字數 4661 閱讀 6289

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

insert

into customers values

('1000000006'

,'toy land'

,'123 any street'

,'new york'

,'ny'

,'11111'

,'usa'

,'jordan'

,'[email protected]'

);

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

insert

into customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)

values

('1000000006'

,'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'

);

注意事項:

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

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_contactcust_email這兩列。

如果表的定義允許,則可以在insert操作中省略某些列。省略的列必須滿足以下某個條件:

insert還可以用來將查詢出的資料插入到表中。就是所謂的 insertselect。它由一條insert語句和一條select語句組成。例如,我們從 customersnew 表中查詢資料插入到 customers 表中。

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 customersnew;

在這個例子中,insertselect語句中使用了相同的列名。但是,不一定要求列名匹配。事實上,dbms 一點兒也不關心select返回的列名。它使用的是列的位置,因此select中的第一列(不管其列名)將用來填充表列中指定的第一列,第二列將用來填充表列中指定的第二列,如此等等。

insert selectselect語句可以包含 where 子句,以過濾插入的資料。

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

create

table custcopy as

select

*from customers;

下面我們來講下如何更新資料:

更新表中的資料可以使用update語句,有兩種使用update的方式:

使用update語句非常容易,基本的update語句由三部分組成:

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]'

where cust_id =

'1000000006'

;

在更新多個列時,只需要使用一條 set 命令,每個「列=值」對之間用逗號分隔(最後一列之後不用逗號)。在此例子中,更新顧客 1000000006 的 cust_contact 和 cust_email 列。

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

update customers 

set cust_email =

null

where cust_id =

'1000000005'

;

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

下面來講下如何刪除資料:

從乙個表中刪除資料,使用delete語句。有兩種使用delete的方式:

delete

from customers

where cust_id =

'1000000006'

;

delete不需要列名或萬用字元。delete刪除整行而不是刪除列。要刪除指定的列,請使用update語句。

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

使用updatedelete時所遵循的重要原則:

本系列目錄:

零基礎入門 sql 系列之(一)查詢資料

零基礎入門 sql 系列之(二)排序

零基礎入門 sql 系列之(三)過濾資料

零基礎入門 sql 系列之(四)內建函式

零基礎入門 sql 系列之(五)資料彙總

零基礎入門 sql 系列之(六)表連線

零基礎入門 sql 系列之(七)組合

零基礎入門 sql 系列之(八)插入、更新、刪除

零基礎入門 sql 系列之(九)建立和操作表

零基礎入門 sql 系列之(十)檢視

零基礎入門 SQL 系列之(七)組合

前面講到的 sql 查詢只包含從乙個或多個表中返回資料的單條select語句。sql 也允許執行多個查詢 多條select語句 並將結果作為乙個查詢結果集返回,這些組合查詢通常稱為復合查詢。主要有兩種情況需要使用組合查詢 1.對乙個表執行多個查詢,按乙個查詢返回資料。2.從不同的表返回資料。組合查詢...

零基礎入門 SQL 系列之(九)建立和操作表

sql 不僅可以用來操縱表中的資料,還可以對錶本身進行操縱,包括表的建立 更改和刪除。一般有兩種建立表的方法 我們以 customers 表的建立為例,建立語句如下 create table customers cust id char 10 not null cust name char 50 n...

iptables零基礎快速入門系列

最近發現一博主 朱雙印,他的關於iptables的系列部落格,講解的非常棒,遂記錄下來,以便查閱。iptables詳解 1 iptables概念 iptables詳解 2 iptables實際操作之規則查詢 iptables詳解 3 iptables規則管理 iptables詳解 4 iptable...