1. 程式人生 > >PLSQL 基礎教程 二 增刪改(DML)

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)
);