UPDATE 和 DELETE 語句
在上一章中講到了宪卿,新增、刪除和修改都需要更高的權(quán)限万栅,因?yàn)檫@些操作都涉及到原數(shù)據(jù)的變化佑钾。
-
使用 UPDATE 或 DELETE 時(shí)需要遵循的重要原則
1、除非確實(shí)打算更新和刪除每一行烦粒,否則絕對(duì)不要使用不帶 WHERE 子句 的 UPDATE 或 DELETE 語句次绘。 2、保證每個(gè)表都有主鍵,盡可能 像 WHERE 子句那樣使用它(可以指定各主鍵邮偎、多個(gè)值或值的范圍)管跺。
3、在 UPDATE 或 DELETE 語句使用 WHERE 子句前禾进,應(yīng)該先用 SELECT 進(jìn)行測(cè)試豁跑,保證它過濾的是正確的記錄,以防編寫的 WHERE 子句不正確泻云。
4艇拍、使用強(qiáng)制實(shí)施引用完整性的數(shù)據(jù)庫, 這樣 DBMS將不允許刪除其數(shù)據(jù)與其他表相關(guān)聯(lián)的行宠纯。
(引用完整性表示 DBMS強(qiáng)制實(shí)施數(shù)據(jù)完整性規(guī)則卸夕。這些規(guī)則一般由提供了界 面的 DBMS管理)
5、有的 DBMS 允許數(shù)據(jù)庫管理員施加約束婆瓜,防止執(zhí)行不帶 WHERE 子句 的 UPDATE 或 DELETE 語句快集。如果所采用的 DBMS支持這個(gè)特性,應(yīng)該使用它廉白。
更新數(shù)據(jù)
更新數(shù)據(jù)的時(shí)候个初,要注意的是條件判斷一定要準(zhǔn)確,因?yàn)樯圆蛔⒁夂秕澹蜁?huì)更新表中的不相關(guān)的行甚至是所有行院溺。這在生成環(huán)境將是災(zāi)難性的
SQL格式:
UPDATE 表名
SET “列=值”,“列=值”
WHERE 過濾條件
1磅轻、更新表中的特定行
比如珍逸,我們更新訂單編號(hào)為20180910001訂單的商品單價(jià)和購買商品數(shù)量
update oderlist_new
set quantity = 11, item_price = 9.0
where orderNo = '20180910001'
2、更新表中的所有行
沒有where 條件限制聋溜,比如我們可以把所有商品的單價(jià)都更新為4.0
update oderlist_new
set item_price = 4.0
-
補(bǔ)充:
UPDATE 語句中可以使用子查詢谆膳,使得能用 SELECT 語句檢索出的數(shù)據(jù) 更新列數(shù)據(jù)。
刪除數(shù)據(jù)
同樣的 勤婚,刪除數(shù)據(jù)的時(shí)候摹量,也要注意條件判斷的準(zhǔn)確性涤伐,因?yàn)樯圆蛔⒁饴ǎ蜁?huì)刪除表中的不相關(guān)的行甚至是所有行。這在生成環(huán)境將是災(zāi)難性的凝果,尤其是在哪些沒有撤銷操作的DBMS中祝迂。
SQL格式:
DELETE FROM 表名
WHERE 判斷條件
1、刪除表中的特定行
delete from oderlist_new
where orderNo = '20180910001'
2器净、刪除表中的所有行
一般情況下這種操作是不允許的
delete from oderlist_new
但這種方法在SQLite 中無法將遞增數(shù)歸零型雳,比如自增主鍵id。
在SQLite 中如果要將遞增數(shù)歸零,可以使用以下方法:
DELETE FROM sqlite_sequence WHERE name = 'table_name';
當(dāng) SQLite 數(shù)據(jù)庫中包含自增列時(shí)纠俭,會(huì)自動(dòng)建立一個(gè)名為 sqlite_sequence 的表沿量。這個(gè)表包含兩個(gè)列:name 和 seq。name 記錄自增列所在的表冤荆,seq 記錄當(dāng)前序號(hào)(下一條記錄的編號(hào)就是當(dāng)前序號(hào)加 1)朴则。如果想把某個(gè)自增列的序號(hào)歸零,只需要修改 sqlite_sequence 表就可以了钓简。
UPDATE sqlite_sequence SET seq = 0 WHERE name = 'table_name';