SQL必知必會筆記十六(更新和刪除資料)

2021-10-05 18:58:08 字數 2751 閱讀 8507

如何利用update和delete語句進一步操作表資料。

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

• 更新表中的特定行;

• 更新表中的所有行。

注意:不要省略where子句

在使用update時一定要細心。因為稍不注意,就會更新表中的所有行。

在客戶端/伺服器的dbms中,使用update語句可能需要特殊的安全許可權。在你使用update前,應該保證自己有足夠的安全許可權。

使用update語句非常容易,甚至可以說太容易了。基本的update語句由三部分組成,分別是:

• 要更新的表;

• 列名和它們的新值;

• 確定要更新哪些行的過濾條件。

例如:客戶1000000005現在有了電子郵件位址,因此他的記錄需要更新。

update customers set cust_email = '[email protected]' where cust_id = '1000000005';

update語句總是以要更新的表名開始。在這個例子中,要更新的表名為customers。set命令用來將新值賦給被更新的列。在這裡,set子句設定cust_email列為指定的值:

set cust_email = '[email protected]'

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列。

update語句中可以使用子查詢,使得能用select語句檢索出的資料更新列資料。

有的sql實現支援在update語句中使用from子句,用乙個表的資料更新另乙個表的行。如想知道你的dbms是否支援這個特性,請參閱它的文件。

要刪除某個列的值,可設定它為null(假如表定義允許null值)。

例如:update customers set cust_email = null where cust_id = '1000000005';

其中null用來去除cust_email列中的值。這與儲存空字串很不同(空字串用''表示,是乙個值),而null表示沒有值。

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

• 從表中刪除特定的行;

• 從表中刪除所有行。

注意:不要省略where子句

在使用delete時一定要細心。因為稍不注意,就會錯誤地刪除表中所有行。

在客戶端/伺服器的dbms中,使用delete語句可能需要特殊的安全許可權。在你使用delete前,應該保證自己有足夠的安全許可權。

前面說過,update非常容易使用,而delete更容易使用。

例如:delete from customers where cust_id = '1000000006';

這條語句很容易理解。delete from要求指定從中刪除資料的表名,where子句過濾要刪除的行。在這個例子中,只刪除顧客1000000006。如果省略where子句,它將刪除表中每個顧客。

第12課介紹了聯結,簡單聯結兩個表只需要這兩個表中的公用字段。也可以讓dbms通過使用外來鍵來嚴格實施關係(這些定義在附錄a中)。存在外來鍵時,dbms使用它們實施引用完整性。例如要向products表中插入乙個新產品,dbms不允許通過未知的**商id插入它,因為vend_id列是作為外來鍵連線到vendors表的。那麼,這與delete有什麼關係呢?使用外來鍵確保引用完整性的乙個好處是,dbms通常可以防止刪除某個關係需要用到的行。例如,要從products表中刪除乙個產品,而這個產品用在orderitems的已有訂單中,那麼delete語句將丟擲錯誤並中止。這是總要定義外來鍵的另乙個理由。

在某些sql實現中,跟在delete後的關鍵字from是可選的。但是即使不需要,也最好提供這個關鍵字。這樣做將保證sql**在dbms之間可移植。

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

說明:刪除表的內容而不是表

delete語句從表中刪除行,甚至是刪除表中所有行。但是,delete不刪除表本身。

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

使用update或delete時所遵循的重要原則。

• 除非確實打算更新和刪除每一行,否則絕對不要使用不帶where子句的update或delete語句。

• 保證每個表都有主鍵,盡可能像where子句那樣使用它(可以指定各主鍵、多個值或值的範圍)。

• 在update或delete語句使用where子句前,應該先用select進行測試,保證它過濾的是正確的記錄,以防編寫的where子句不正確。

• 使用強制實施引用完整性的資料庫,這樣dbms將不允許刪除其資料與其他表相關聯的行。

• 有的dbms允許資料庫管理員施加約束,防止執行不帶where子句的update或delete語句。如果所採用的dbms支援這個特性,應該使用它。

若是sql沒有撤銷(undo)按鈕,應該非常小心地使用update和delete,否則你會發現自己更新或刪除了錯誤的資料。

MySQL必知必會筆記(十六) 更新和刪除資料

select cust id,cust email from customers where cust id 10005 輸出 說明客戶10005在電子郵箱位址這一列為空值。假設現在客戶10005有了電子郵件位址,因此它的記錄需要更新,語句如下 輸入update customers set cust...

SQL 必知必會 筆記 14 更新和刪除資料

基本的update語句,由三部分組成 更新單列示例 1 update customers 2set cust email kim thetoystore.com 3 where cust id 1000000005 更新多列的示例 1 update customers 2set cust conta...

SQL必知必會 16 更新和刪除資料

更新 修改 表中的資料,可以使用update語句。有兩種update的方式 1 更新表中的特定行。2 更新表中額所有行。update customers set cust email kim thetoystore.com where cust id 1000000005 從乙個表中刪除 去掉 資料...