標籤:style http color 使用 strong 資料
第2部分 資料庫SQL語言
資料操縱語言(DML)
資料操縱語言(Data Manipulation Language,DML)包括insert、delete和update語句,用於增、刪、改資料。
本文用以下的表tb_employeeinfo作為例子加以說明:
create table tb_employeeinfo
(
employeeno varchar(20) not null, -- 員工工號
employeename varchar(20) not null, -- 員工姓名
employeeage int null -- 員工年齡
);
在實際的軟體開發項目中,DML的使用規則如下:
1. insert語句必須列出欄位名
許多開發人員為了省事,在需要向一個表中所有欄位都插入資料的時候,就直接列出表名即可,如下所示:
反例:
insert into tb_employeeinfo vaues(‘10000’,’Jim’, 30)
這樣,如果tb_employeeinfo表結構發生了修改,以前的SQL語句就不能寫入資料了。正確的做法是不管向表中多少個欄位插入資料,都需要列出欄位名。如下所示:
正例:
insert into tb_employeeinfo(employeeno, employeename, employeeage) vaues(‘10000’,’Jim’, 30)
同樣,不要使用“select * from”語句,必須列出欄位名,即使是返回所有欄位的值。
2. delete,update語句必須帶where條件
這樣做是為了防止將整個表的資料修改和清空,導致系統癱瘓。對於全表處理,則使用“where 1=1”。
正例:
delete from tb_employeeinfo where employeeage=30
update tb_employeeinfo set employeeage=32 where 1=1
3. SQL語句塊或預存程序中需要對DML語句的執行結果進行檢查
這是資料庫的錯誤/異常處理機制,需要對SQL語句執行成功或失敗進行檢查,以便根據執行結果決定後續的操作。
(1) SQLServer/Sybase資料庫的處理
在SQLServer/Sybase資料庫中,可以通過系統變數“@@error”來檢查,並根據結果進行處理,如果已經開始了事務(資料庫的修改是以事務為單位進行的。一個事務就是一個操作序列,這些操作要麼全做,要麼全不做,它是一個不可分割的工作單位),則需要進行復原。
正例:
begin tran -- 事務開始
insert into ……
if @@error <> 0
begin
rollback tran -- 交易回復
return
end
update ……
if @@error <> 0
begin
rollback tran -- 交易回復
return
end
commit tran -- 事務提交
(2) Oracle資料庫的處理
在Oracle中,錯誤是通過異常機制進行處理的。如果沒有異常處理部分,它會立即中止當前的SQL語句塊,並自動進行回退。如果需要根據情況進行處理,就應該使用異常處理部分,否則使用Oracle預設的行為中止當前的SQL塊,並自動回退。
正例1:
begin
insert into …
update …
insert into…
exception
when others then
begin
…… -- 錯誤處理
rollback;
end;
end;
正例2:
begin
insert into …
update …
insert into… -- 沒有異常處理部分
end;
此外,在SQL語句塊和預存程序中使用事務,必須保證事務的開始與結束匹配,即必須保證在SQL語句塊的任何分支和異常情況下“begin tran”都有正確的“commit”或“rollback”與之對應。
在實際的軟體項目中,資料操縱語言(DML)使用的非常的廣泛,正確地使用該語言是對一個軟體開發人員的基本要求。
(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,號:245924426,歡迎關注!)