insert
用來將行插入到資料庫表中。插入有幾種方式:
insert
into customers values
('1000000006'
,'toy land'
,'123 any street'
,'new york'
,'ny'
,'11111'
,'usa'
,'jordan'
);
插入到新行中的值由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'
);
在上述寫法中,我們在表名後的括號裡明確指定了列名,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'
,'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_contact
和cust_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;
在這個例子中,insert
和select
語句中使用了相同的列名。但是,不一定要求列名匹配。事實上,dbms 一點兒也不關心select
返回的列名。它使用的是列的位置,因此select
中的第一列(不管其列名)將用來填充表列中指定的第一列,第二列將用來填充表列中指定的第二列,如此等等。
insert select
中select
語句可以包含 where 子句,以過濾插入的資料。
另外,有時候,我們需要把乙個表的內容複製到另外一張表。這時候我們可以使用:
create
table custcopy as
select
*from customers;
下面我們來講下如何更新資料:
更新表中的資料可以使用update
語句,有兩種使用update
的方式:
使用update
語句非常容易,基本的update
語句由三部分組成:
update customers
set cust_email =
where cust_id =
'1000000005'
;
update
語句以where
子句結束,它告訴 dbms 更新哪一行。沒有where
子句,dbms 將會用這個電子郵件位址更新 customers 表中的所有行, 這不是我們希望的。
更新多列的語法稍微不同,例如:
update customers
set cust_contact =
'sam roberts'
, cust_email =
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
語句,它完成相同的工作,而速度更快(因為不記錄資料的變動)。
使用update
和delete
時所遵循的重要原則:
本系列目錄:
零基礎入門 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...