【數據庫】SQL更新數據之增刪改

數據庫中的數據變更,主要有三種:插入數據inset、修改數據update、刪除數據delete。這幾種操作都是開發人員常用的操作,本文將對這幾種操作進行簡要講解。

insert操作及注意事項;

update操作及注意事項;

delete操作及注意事項;

1、insert操作

insert操作用於向表中插入新的數據,insert操作既可以單條插入,也可以與子查詢結合使用實現批量插入。

1.1單條插入

對於insert操作來說,單條插入是最常用的方式,其語法形式如下所示。

insert into 表名(列名1, 列名2,列名3.....列名n)

values(值1,值2,值3.....值n)

在insert操作中,列名列表中的各列需要以逗號分隔;而值列表指定各列的值,列名與值需要一一對應。

insert into students(stuent_id, student_name,student_age,status)

values(12,'張三',12,'act')

其中,insert into students 用於向表students中插入新的數據;student_id,student_name, student_age,status指定列名列表;values(12,'張三',12,'act')則爲各列指定要插入的值。

當然,如果insert語句所指定的列名列表包含了表中的所有列,那麼可以列名列表省略,如下:

insert into  values(12,'張三',12,'act');


1.2批量插入

子查詢中,可以在插入語句中使用子查詢,以實現批量插入,接下來還有另外一個例子:

表c_students的數據結構及內容如下所示:

select * from c_students;

student_id    student_name

可以利用如下SQL語句向其中插入新的數據,新數據來自表students中student_id處於前10的學生信息。

insert into c_students(student_id,student_name)

select student_id, student_name

from students

where student_id <=10;

說明:insert into c_students用於向表c_students中插入數據;select student_id, student_name from students where student_id <=10則指定要插入的數據。在這裏,新插入的數據來自select語句選定的結果集合,注意,此處沒有values關鍵字,這也是單條插入與批量插入的區別所在。

此時,表c_students中已成功插入了10條記錄。


1.3注意事項與技巧
insert操作語法簡單,也是開發人員掌握的最熟練的SQL語句之一,在實際開發過程中,有以下問題和技巧需要注意。

A. 應該養成使用列名列表的習慣

在一條插入語句中,即使爲表中所有列都賦值,也不應該省略列名列表。在一個應用系統中,很難保證數據表結構不發生改變。


報錯:insert語句執行時,缺少足夠的值。

B. 快速獲得列名列表

對於表結構比較簡單的數據表,例如c_students,一一羅列其列名並不困難,但是當數據結構複雜,列的數目較大時,一一羅列所有的列名耗時耗力且極易出錯,此時,我們應該使用工具獲得列名列表。以PL/SQL Devloper爲例,相應的步驟如下所示。

(1)在PL/SQL Develpoler右側的對象列表中找到對應的表。以表tmp_user_objects爲例,在對象列表中的位置下圖:

(2)右擊tmp_user_objects下的columns分支,將彈出快捷菜單,如下圖:


(3)選擇快捷菜單中的Copy comma separated選項,可以將列名列表以字符串的形式複製到黏貼板中。各列之間使用comma(逗號)進行分割。


(4)打開任意的文本編輯器,將列名列表黏貼到文本編輯器中,即可。


2.update操作

update操作用於更新已有數據。

2.1 update更新單列

update操作的語法形式如下:

update 表名 set 列 = 新值

其中,update命令用於更新表中數據,其後緊跟表名;set命令用於重新設置列值,其後緊跟列名,並用等號指定新值。

例子:在表students中,列status的值均爲小寫形式。可以利用update語句將其轉換爲大寫形式。

update students set status = upper(status);

其中,set status = upper(status)用於爲表students中的status列賦予新值,新值爲原列值的大寫形式。


2.2 update更新多列

使用update語句,同樣可以更新多列,其語法如下所示。

update 表名 set 列1 = 新值1, 列2=新值2,....

在set命令之後,可以爲多列同時賦值,而這些列之間使用逗號進行分隔。

例子:對於表students中的學生信息,可以在修改列status的同時,修改列student_age的值。例如:除了將status進行大寫轉換之外,還需要將學生年齡student_age增加1,相應的SQL語句如下所示。

update students set student_age = student_age +1, status = upper(status);

set student_age = student_age +1, status = upper(status)用於設置表students中列student_age與列status的新值。當兩個列都被成功更新之後,可以查詢表中實際數據進行驗證。


2.3注意事項

對於update操作,最容易被用戶忽視的就是添加where 條件,在上面的例子中,所進行的操作實際是非常危險的。因爲沒有添加任何限制條件,因此oracle將更新表中的所有數據。而實際應用中,往往只需更新部分數據,因此,對於重要數據的update操作,首先添加where關鍵字是一個好的習慣,儘管有時並不需要過濾條件。

當然,如果要修改的數據表非常重要,首先進行備份是最爲穩妥的方式,接着遵守如下步驟,將極大的減少用戶出錯的機率。

(1)首先搜尋表中的記錄,並確認這些記錄是預期進行修改的數據。

select * from students where student_id = 1;

當我們預期修改student_id爲1的記錄時,可以首先利用where student_id=1的條件獲得記錄,以確認預期修改的數據。

(2)利用update語句,並結合where條件修改數據。

update students set status = 'CXL' where student_id = 1;

where student_id =1所指定的條件與步驟(1)中經過確認的where 條件相同。

(3)查看修改後的數據,確認無誤之後,再提交修改;否則,回滾操作。

SQL>select * from students where student_id = 1;

SQL>commit;   commit命令用於修改確認之後提交數據。提交之後,不可回滾。


3、delete操作

delete操作用於刪除表中數據。除了delete語句之外,truncate命令同樣可以刪除表中數據。本段落將說明delete操作及delete操作與truncate操作的區別。

3.1 delete操作

delete操作用於刪除表中的數據,其使用語法如下所示。

delete from 表名

delete from 指定從哪個表中刪除數據,因爲刪除動作的作用對象爲記錄級別。因此,無須定列名信息。

例子:我們可以利用delete命令刪除students中employee_id大於10的記錄,相應的SQL語句如下:

delete from students where student_id > 10:

如同update 語句,在使用delete語句時,添加where 子句是一個好的習慣。這樣可以避免刪除表中的所有數據。


3.2 delete 操作與truncate table 操作

除了delete命令,oracle還可以利用truncate table命令刪除表中的數據,但是truncate table語句與delete語句是有本質區別的:

delete語句與insert、update語句同屬於DML-數據操作語言的範疇,當數據修改之後,可以通過回滾操作,忽略所做的數據修改。

而truncate table語句則是數據DDL---數據定義語言的範疇,當數據被刪除之後,無法回滾。

例子:通過truncate table 命令刪除表students的數據。

truncate table students;

分析查詢結果可知,當執行了truncate table 命令之後,表students中的數據將被完全刪除。

delete操作與truncate table操作具有不同的應用場合,當刪除部分數據時,應該使用delete語句,並添加where條件;刪除全部數據時,應該使用truncate table語句。同時,truncate table 刪除全表數據時,效率也要高於delete語句。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章