PLSQL 基礎教程 二 增刪改(DML)
1. DML簡介
DML含義
DML,全稱為Data Manipulation Language,即資料操作語言,主要用於檢索或者操作資料庫中的資料。
與前一節文章中介紹的DDL不同,DDL是用於建立或者刪除資料庫物件的,而DML並不是對資料物件做的操作,只是對資料庫中的記錄進行相關的操作而已,操作的物件是資料。
DML範圍
DML主要是對資料庫中的表中的資料進行的相關操作,主要包含以下幾個方面的操作:。
SELECT:用於檢索資料;
INSERT:用於增加資料到資料庫;
UPDATE:用於從資料庫中修改現存的資料
DELETE:用於從資料庫中刪除資料。
其中,INSERT、UODATE和DELETE操作都是事務相關的,即這些操作之後是必須提交事務的,提交事務之後相關的修改才可以生效;而SELECT只是用於檢索資料,並不涉及事務處理。
本文中主要介紹INSERT、UODATE和DELETE這幾種操作,SELECT操作後續繼續介紹。
2. 增刪改
資料庫的基本物件是表,表是儲存資料的基本單元,對錶的操作主要包括增、刪、改、查這幾個部分。本節主要介紹增刪改這三部分的內容,後續將繼續介紹查詢相關的知識。
SQL中的增、刪、改均是涉及到事務處理的,因此相關操作之後,要想使記錄修改生效,就必須提交事務處理,SQL中提交事務使用COMMIT語句,後邊也會較少提交事務的兩種方式。
如何向資料庫中的表新增記錄?SQL中主要是通過INSERT語句來完成的,常用的INSERT方式有一下兩種:
a. 直接使用INSERT VALUES指令碼,具體語法格式如下:
INSERTINTO <TABLE_NAME>
(<COLUMN_LIST>)
VALUES
(<VALUE_LIST>);
其中,TABLE_NAME需要插入資料的資料表的表名;COLUMN_LIST是資料庫表中的列;VALUE_LIST是對應的需要插入的資料資訊,與資料庫列資訊一一對應。
此處列舉一個新增的示例:
INSERTINTO CUX_SQL_LEARN
(ID,CLASS_NAME)
VALUES
(1,'測試1');
上述指令碼的執行之後變回向表 CUX_SQL_LEARN中新增一條ID為“1”,CALSS_NAME為“測試1”的記錄,但是沒有提交事務處理,並不會永久的儲存在資料庫中。要想使記錄修改生效,則必須提交事務處理,可以使用一下指令碼:
INSERTINTO CUX_SQL_LEARN
(ID,CLASS_NAME)
VALUES
(1,'測試1');
COMMIT;
b. 使用INSERT SELECT 的形式來新增記錄,具體的語法格式如下:
INSERTINTO < A_TABLE_NAME >
(< COLUMN_LIST >)
SELECT < ITEM_LIST > FROM < B_TABLE_NAME >
WHERE < WHERE_CLAUSE >;
A_TABLE_NAME:需要插入資料的表語法說明:
COLUMN_LIST:需要插入的資料列
B_TABLE_NAME:選取資料的資料表
ITEM_LIST:從B_TABLE_NAME中選取的與COLUMN_LIST對應的資料資訊
WHERE_CLAUSE:需要篩選資料的資料表B的過濾條件,可根據實際需要新增或修改
實際使用示例為:
INSERTINTO CUX_SQL_LEARN
(ID, CLASS_NAME)
SELECT1, '測試2'FROM DUAL;
COMMIT;
INSERT SELECT和INSERT VALUES指令碼的區別:
INSERT VALUES:一次新增一條記錄,插入多條記錄的時候需要執行多次;
INSERT SELECT:一次可以新增一條或者多條記錄,使用比較靈活。
如果要對錶中的資料進行刪除操作,則需要使用DELETE語句。具體的語法格式為:
DELETE <TABLE_NAME>
WHERE <WHERE_CLAUSE>;
COMMIT;--執行COMMIT之後才能使刪除指令碼生效
WHERE_CLAUSE:需要刪除的資料的過濾條件,不新增條件的話整個表的資料都會被刪除,因此操作的時候需要注意,避免刪除不必要的資料,造成業務資料的丟失。TABLE_NAME:需要刪除資料的資料表
對資料庫中的資料進行修改,則需要使用UPDATE語句。常用的UPDATE語句也有兩種形式,具體如下:
a. UPDATE語句
UPDATE <TABLE_NAME>
SET <COLUMN_ASSIGNMENT>
WHERE <WHERE_CLAUSE>;
COLUMN_ASSIGNMENT:修改修改的列資訊,多個列之間用“,”隔開TABLE_NAME:需要修改的表名
WHERE_CLAUSE:需要修改的資料的過濾條件,不新增條件則整個表中的記錄都會被修改
實際示例:
UPDATE CUX_SQL_LEARN N
SET N.CLASS_NAME = '測試修改'
WHERE N.ID = 1;
COMMIT;
指令碼修改說明:將CUX_SQL_LEARN中的Id為“1”的記錄的CLASS_NAME修改為“測試修改”,修改後直接COMMIT使修改生效。
b. SELECTFOR UPDATE形式
該種形式的修改指令碼主要在PSQL視窗中使用較多,其他SQL客戶端中可根據實際情況考慮使用。
增刪改的相關知識到此基本結束,本文只是介紹了簡單的語法知識和簡單的示例資訊,具體如何使用還需要在日後的學習和工作中逐漸積累,才能不斷的提高和深入瞭解。
3. 附錄
附錄
a. 本系列教程為個人原創,基於實際工作中的使用情況及個人理解,僅供學習交流之用,有不足之處還望批評指正,希望共同提高
b. 本節示例中的CUX_SQL_LEARN的建表指令碼如下:
-- Create table
createtable CUX_SQL_LEARN
(
ID NUMBERnotnull,
CLASS_NAME VARCHAR2(1000)
);