網(wǎng)站建設培訓業(yè)務心得社群運營
目錄
更新數(shù)據(jù)
????????不要省略WHERE 子句
????????在UPDATE 語句中使用子查詢
刪除數(shù)據(jù)
????????不要省略WHERE 子句
????????友好的外鍵
????????刪除表的內(nèi)容而不是表
? ? ? ? 更快的刪除
更新和刪除的指導原則
????????這一課介紹如何利用UPDATE 和DELETE 語句進一步操作表數(shù)據(jù)。
更新數(shù)據(jù)
????????更新(修改)表中的數(shù)據(jù),可以使用UPDATE 語句。有兩種使用UPDATE的方式:
- 更新表中的特定行;
- 更新表中的所有行。
????????不要省略WHERE 子句
????????在使用UPDATE 時一定要細心。因為稍不注意,就會更新表中的所有行。
????????使用UPDATE 語句非常容易,甚至可以說太容易了。基本的UPDATE 語句由三部分組成,分別是:
- 要更新的表;
- 列名和它們的新值;
- 確定要更新哪些行的過濾條件。
UPDATE Customers
SET cust_email = 'kim@thetoystore.com'
WHERE cust_id = '1000000005';
????????UPDATE 語句以WHERE 子句結束,它告訴DBMS 更新哪一行。沒有WHERE子句,DBMS 將會更新表中的所有行,這不是我們希望的。
????????更新多個列的語法稍有不同:
UPDATE Customers
SET cust_contact = 'Sam Roberts',
cust_email = 'sam@toyland.com'
WHERE cust_id = '1000000006';
????????在更新多個列時,只需要使用一條SET 命令,每個“列=值”對之間用逗號分隔(最后一列之后不用逗號)。
????????在UPDATE 語句中使用子查詢
????????UPDATE 語句中可以使用子查詢,使得能用SELECT 語句檢索出的數(shù)據(jù)更新列數(shù)據(jù)。關于子查詢及使用的更多內(nèi)容,請參閱第11 課。
????????要刪除某個列的值,可設置它為NULL(假如表定義允許NULL 值)。如下進行:
UPDATE Customers
SET cust_email = NULL
WHERE cust_id = '1000000005';
????????其中NULL 用來去除cust_email 列中的值。這與保存空字符串很不同(空字符串用''表示,是一個值),而NULL 表示沒有值。
刪除數(shù)據(jù)
????????從一個表中刪除(去掉)數(shù)據(jù),使用DELETE 語句。有兩種使用DELETE的方式:
- 從表中刪除特定的行;
- 從表中刪除所有行。
????????不要省略WHERE 子句
????????在使用DELETE 時一定要細心。因為稍不注意,就會錯誤地刪除表中所有行。在使用這條語句前,請完整地閱讀本節(jié)。
????????前面說過,UPDATE 非常容易使用,而DELETE 更容易使用。
????????下面的語句從Customers 表中刪除一行:
DELETE FROM Customers
WHERE cust_id = '1000000006';
????????這條語句很容易理解。DELETE FROM 要求指定從中刪除數(shù)據(jù)的表名,WHERE 子句過濾要刪除的行。在這個例子中,只刪除顧客1000000006。如果省略WHERE 子句,它將刪除表中每個顧客。
????????友好的外鍵
????????第12 課介紹了聯(lián)結,簡單聯(lián)結兩個表只需要這兩個表中的常用字段。也可以讓DBMS 通過使用外鍵來嚴格實施關系。存在外鍵時,DBMS 使用它們實施引用完整性。例如,要從Products 表中刪除一個產(chǎn)品,而這個產(chǎn)品用在OrderItems 的已有訂單中,那么DELETE 語句將拋出錯誤并中止。這是總要定義外鍵的另一個理由。
????????DELETE 不需要列名或通配符。DELETE 刪除整行而不是刪除列。要刪除指定的列,請使用UPDATE 語句。
????????刪除表的內(nèi)容而不是表
????????DELETE 語句從表中刪除行,甚至是刪除表中所有行。但是,DELETE不刪除表本身。
? ? ? ? 更快的刪除
????????如果想從表中刪除所有行,不要使用DELETE??墒褂肨RUNCATE TABLE語句,它完成相同的工作,而速度更快(因為不記錄數(shù)據(jù)的變動)。
更新和刪除的指導原則
????????下面是許多SQL 程序員使用UPDATE 或DELETE 時所遵循的重要原則。
- 除非確實打算更新和刪除每一行,否則絕對不要使用不帶WHERE 子句的UPDATE 或DELETE 語句。
- 保證每個表都有主鍵(如果忘記這個內(nèi)容,請參閱第12 課),盡可能像WHERE 子句那樣使用它(可以指定各主鍵、多個值或值的范圍)。
- 在UPDATE 或DELETE 語句使用WHERE 子句前,應該先用SELECT 進行測試,保證它過濾的是正確的記錄,以防編寫的WHERE 子句不正確。
- 使用強制實施引用完整性的數(shù)據(jù)庫(關于這個內(nèi)容,請參閱第12 課),這樣DBMS 將不允許刪除其數(shù)據(jù)與其他表相關聯(lián)的行。
- 有的DBMS 允許數(shù)據(jù)庫管理員施加約束,防止執(zhí)行不帶WHERE 子句的UPDATE 或DELETE 語句。如果所采用的DBMS 支持這個特性,應該使用它。
????????若是SQL 沒有撤銷(undo)按鈕,應該非常小心地使用UPDATE 和DELETE,否則你會發(fā)現(xiàn)自己更新或刪除了錯誤的數(shù)據(jù)。