綜合運用DML、DDL、DCL、TCL語句與事務管理

文章目錄

      • 一、介紹
      • 二、DML:數據操縱語言
      • 三、DDL:數據定義語言
      • 四、DCL:數據控制語言
      • 五、TCL:事務控制語言
      • 六、SELECT 查詢時鎖定

一、介紹

在Oracle數據庫中,掌握和運用DML、DDL、DCL和TCL語句是必不可少的技能。
這些語句在數據庫的增刪改查、結構設計、權限控制和事務管理中發揮著重要作用。
通過實際例子,我們將更深入地理解這些語句的應用。

二、DML:數據操縱語言

DML(Data Manipulation Language)用于對數據庫中的數據進行增刪改查操作。主要包括以下幾種語句:

INSERT:用于向表中插入新數據。
UPDATE:用于修改表中現有數據。
DELETE:用于刪除表中的數據。
SELECT:用于查詢表中的數據。

注意
在Oracle數據庫中,當你插入數據后,需要使用COMMIT語句來提交修改,以使更改永久生效。
如果你在插入數據后發現有問題或錯誤,可以在未發生COMMIT之前使用ROLLBACK語句來回滾剛才的插入操作。

通過使用ROLLBACK語句,你可以撤銷最近的未提交更改,將數據庫恢復到插入操作之前的狀態。這為你提供了在數據插入出現問題時糾正錯誤的機會。

但請注意,如果你在插入數據后已經執行了COMMIT語句,那么你就無法使用ROLLBACK語句撤銷該插入操作。這是因為COMMIT語句將更改永久保存到數據庫中,無法回滾。

INSERT案例
假設我們有一個"employees"表,包含員工信息。我們可以使用DML語句進行數據的增刪改查操作:

1.INSERT語句:向"employees"表中插入一條新記錄,如:

INSERT INTO employees (id, name, age) VALUES (1, 'John Doe', 30);

或者

INSERT INTO employees  VALUES (1, 'John Doe', 30);

ROLLBACK;–撤銷剛才的插入
COMMIT;插入生效

2.UPDATE語句:修改"employees"表中現有記錄的年齡,如:

UPDATE employees SET age = 31 WHERE id = 1;

ROLLBACK;–撤銷剛才的插入
COMMIT;插入生效

3.DELETE語句:刪除"employees"表中的某條記錄,如:

DELETE FROM employees WHERE id = 1;

ROLLBACK;–撤銷剛才的插入
COMMIT;插入生效

4.TRUNCATE語句,刪除"employees"表中的所有記錄,如:

TRUNCATE  TABLE employees;

注意
TRUNCATE語句不能回滾,一旦執行,表中的數據將永久刪除。
TRUNCATE語句將重置表的計數器,所以在執行TRUNCATE后,表中的自增字段將從起始值重新開始計數。
TRUNCATE語句是一種高效的清空表數據的方法,特別適用于需要清空整個表而不需要逐行刪除數據的場景。

5.SELECT語句:查詢"employees"表中的數據,如:

SELECT * FROM employees WHERE age > 25;

三、DDL:數據定義語言

DDL(Data Definition Language)是數據庫管理系統中用于定義和管理數據庫對象的語言。它包括創建、修改和刪除數據庫、表、索引、視圖等對象。

CREATE:用于創建數據庫對象,如表、視圖、索引等。
ALTER:用于修改數據庫對象的結構。
DROP:用于刪除數據庫對象。

1.CREATE TABLE: 創建表

CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),age INT,salary DECIMAL(10,2)
);

2.ALTER TABLE: 修改表結構

ALTER TABLE employeesADD COLUMN email VARCHAR(100);

3.DROP TABLE: 刪除表

DROP TABLE employees;

4.CREATE INDEX: 創建索引

CREATE INDEX idx_employees_name ON employees (name);

5.ALTER INDEX: 修改索引

ALTER INDEX idx_employees_name RENAME TO idx_employees_last_name;
  1. DROP INDEX: 刪除索引
DROP INDEX idx_employees_last_name;

7.CREATE VIEW: 創建視圖

CREATE VIEW employee_view ASSELECT id, name, age FROM employees WHERE age > 30;

8.ALTER VIEW: 修改視圖

ALTER VIEW employee_view ASSELECT id, name, age, salary FROM employees WHERE age > 25;

9.DROP VIEW: 刪除視圖

DROP VIEW employee_view;

四、DCL:數據控制語言

DCL(Data Control Language)是數據庫管理系統中用于控制數據庫訪問權限和事務操作的語言。它包括授權、回收權限以及管理事務等操作。

GRANT:用于授予用戶或角色訪問數據庫的權限。
REVOKE:用于收回用戶或角色的訪問權限。

GRANT:授權用戶或用戶組訪問權限

GRANT SELECT, INSERT ON employees TO user1;

REVOKE:回收用戶或用戶組的訪問權限

REVOKE INSERT ON employees FROM user1;

五、TCL:事務控制語言

TCL(Transaction Control Language)用于管理數據庫中的事務,確保數據的完整性和一致性。它允許用戶對數據庫中的操作進行邏輯分組,并在需要時進行提交或回滾。

COMMIT:用于提交事務,將修改永久保存到數據庫中。
ROLLBACK:用于回滾事務,撤銷對數據庫的修改。
SAVEPOINT:用于在事務中設置保存點,以便在必要時回滾到特定狀態。

1.COMMIT:將事務中的所有修改保存到數據庫,成功提交事務。

BEGIN TRANSACTION;
UPDATE customer SET balance = balance - 100 WHERE id = 1;
INSERT INTO transaction (customer_id, amount) VALUES (1, -100);
COMMIT;

2.ROLLBACK:撤銷事務中的所有修改,回滾到事務開始前的狀態。

BEGIN TRANSACTION;
UPDATE customer SET balance = balance - 100 WHERE id = 1;
INSERT INTO transaction (customer_id, amount) VALUES (1, -100);
ROLLBACK;

3.SAVEPOINT 和 ROLLBACK TO SAVEPOINT:設置和回滾到保存點(一個特定時間點的事務狀態)。

BEGIN TRANSACTION;
UPDATE customer SET balance = balance - 100 WHERE id = 1;
SAVEPOINT savepoint1;
UPDATE customer SET balance = balance + 100 WHERE id = 2;
ROLLBACK TO SAVEPOINT savepoint1;
COMMIT;

六、SELECT 查詢時鎖定

FOR UPDATE這個語句常常用于防止并發時多個事務同時修改或讀取同一條記錄,
以保證數據的安全性和一致性,它將鎖定所選行,直到事務結束時才會釋放該行的鎖定。

FOR UPDATE 語句鎖定所選行的示例:

BEGIN TRANSACTION;-- 選取行并加鎖
SELECT * FROM my_table WHERE id = 1 FOR UPDATE;-- 在事務中修改所選行
UPDATE my_table SET value = 'new value' WHERE id = 1;COMMIT;

在以上示例中,SELECT * FROM my_table WHERE id = 1 FOR UPDATE 會選中 ID 為 1 的行并把它們所在的行鎖定,以避免其他事務同時修改該行。在事務結束時,這個鎖定會被釋放。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165892.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165892.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165892.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【算法】經典算法題

文章目錄 專題一:雙指針1. 移動零2. 復寫零3. 快樂數4. 盛最多水的容器5. 有效三角形的個數6. 查找總價格為目標值的兩個商品7. 三數之和8. 四數之和 專題二:滑動窗口1. 長度最小的子數組2. 無重復字符的最長字串3. 最大連續1的個數 III4. 將 x 減到 0 的…

云原生技術演進之路-(云技術如何一步步演進的,云原生解決了什么問題?)

云技術如何一步步演進的? 云原生解決了什么問題? 物理設備 電腦剛被發明的時候,還沒有網絡,每個電腦(PC),就是一個單機。 這臺單機,包括CPU、內存、硬盤、顯卡等硬件。用戶在單機…

電線電纜、漆包線工廠開源MES/生產管理系統/云MES

萬界星空科技專業的漆包線MES系統功能介紹: 從原材料出入庫-拉絲機等設備管理-漆包線稱重打印系統自動入庫(支持多臺秤同時稱重)-建立銷售報價、銷售訂單-生產訂單-支持掃碼出庫及自動揀貨出庫-應收應付賬款-對接各種其他系統及財務系統。 …

便攜式水污染物監測設備的招標參數有哪些

便攜式多參數水質檢測儀參數特點: 便攜式多參數水質檢測儀參數特點: 便攜式多參數水質快速測定儀,根據國家檢測標準(G B ) 及環境部檢測標準(H J )研發生產,本儀器具有檢測快速、操作簡單、測試…

python3實現類似expect shell的交互式與SFTP的腳本

前面寫過一篇關于python實現類似expect shell的交互式能力的文章,現在補全一下加上sftp的能力腳本。 例子在代碼中__example()方法。 依賴paramiko庫,所以需要執行pip install paramiko來安裝。 import os import queue import re import threading im…

綜合實力盤點高性價比還優質的云服務器:亞馬遜云科技仍然領跑市場

如果說云計算是一條流向數字化未來的河流,那亞馬遜云科技毫無疑問是航行在最前面的帆船;如果說云計算是一條通往數字化未來的鐵軌,那亞馬遜云科技就是行駛在最前面的高鐵。接下來回首往昔,以史為鏡,得出云服務器哪家便…

毛里塔尼亞市場開發攻略,收藏一篇就夠了

毛里塔尼亞是非洲西北部的一個國家,也是中國長期援建的一個國家,也是一帶一路上的國家。毛里塔尼亞生產生活資料依賴進口,長期依賴跟我們國家的貿易關系也是比較緊密的,今天就來給大家介紹一下毛里塔尼亞的市場開發公路。文章略長…

Python監控服務進程及自啟動服務方法與實踐

1. 需求概述 當我們在Windows Server環境中部署XX系統的實際應用中,往往會遇到一些運維管理的挑戰。為了確保系統的持續穩定運行,特別是在服務程序因各種原因突然關閉的情況下,我們可以借助Python的強大生態系統來構建一個監控與自動重啟的管…

分布式鏈路追蹤入門篇-基礎原理與快速應用

為什么需要鏈路追蹤? 我們程序員在日常工作中,最常做事情之一就是修bug了。如果程序只是運行在單機上,我們最常用的方式就是在程序上打日志,然后程序運行的過程中將日志輸出到文件上,然后我們根據日志去推斷程序是哪一…

Comsol Multiphysics 6.2 for Mac建模仿真軟件

COMSOL Multiphysics是一款多物理場仿真軟件,旨在幫助工程師、科學家和研究人員解決各種復雜的工程和科學問題。該軟件使用有限元分析方法,可以模擬和分析多個物理場的相互作用,包括結構力學、熱傳導、電磁場、流體力學和化學反應等。 COMSOL…

一些好用的前端小插件(轉自知乎)

一些好用的前端小插件(2) 1. cropper.js Cropper.js 2.0 是一系列用于圖像裁剪的 Web 組件。 官網地址:https://fengyuanchen.github.io/cropperjs/v2/zh/ 2. Vditor Vditor是一款瀏覽器端的 Markdown 編輯器,支持所見即所得、…

2024年度投資策略:AI大模型和半導體國產化加速

今天分享的是AI系列深度研究報告:《2024年度投資策略:AI大模型和半導體國產化加速》。 (報告出品方:東方證券) 報告共計:48頁 前言: 行情回顧與未來展望 電子板塊漲幅轉正,信心逐漸回歸。截至…

人人都會Blazor —— 3.3 參數

參數最常見的使用,目的是使組件可以接收動態數據。 聲明參數 參數使用 [Parameter] 特性的公共 C# 屬性進行定義。 在下面的示例中,內置引用類型 (System.String) 和用戶定義的引用類型 (PanelBody) 作為組件參數進行傳遞。 PanelBody.cs: public class PanelBody {publ…

SQL注入漏洞發現和利用,以及SQL注入的防護

一、背景 SQL注入漏洞是一種常見的軟件安全問題,它發生在應用程序的數據庫層中。其核心原理是將用戶輸入的數據當做代碼來執行,違反了“數據與代碼分離”的原則。具體來說,攻擊者通過構造惡意的SQL查詢語句,使得應用程序在執行SQ…

Android NFC手機上實現卡模擬

1, 問:能否在AndroidNFC手機上實現卡模擬? 答:在技術上可行,但是,對一般開發人員來講,目前看來僅僅是技術上可行。 2, 問:具體如何實現呢? 答&#xff1…

git的使用記錄

GitHub是公有的遠程倉庫,Gitlab是私有的遠程倉庫。 git add file git commit -m "add file" git mv filea fileb git log 顯示提交記錄 git log --oneline 一行的簡略信息顯示 git log --oneline --decorate 顯示當前指針 git reset --ha…

矩陣知識補充

正交矩陣 定義: 正交矩陣是一種滿足 A T A E A^{T}AE ATAE的方陣 正交矩陣具有以下幾個重要性質: A的逆等于A的轉置,即 A ? 1 A T A^{-1}A^{T} A?1AT**A的行列式的絕對值等于1,即 ∣ d e t ( A ) ∣ 1 |det(A)|1 ∣det(A)∣…

通用功能——git 攻略

摘要 本文主要介紹git常用命令的使用方法,同時介紹一些常見問題的處理方法,持續更新中… git命令通用選項 大多數git命令都適用的選項列表如下: -v, --verbose show hash and subject, give twice for upstream branch -q, --quie…

Vim 一下日志文件,Java 進程沒了?

一次端口告警,發現 java 進程被異常殺掉,而根因竟然是因為在問題機器上 vim 查看了 nginx 日志。下面我將從時間維度詳細回顧這次排查,希望讀者在遇到相似問題時有些許啟發。 時間線 15:19 收到端口異常 odin 告警。 狀態:P1故障 名稱:應用端…

黑馬點評筆記 redis實現優惠卷秒殺

文章目錄 難題全局唯一IDRedis實現全局唯一Id 超賣問題問題解決方案樂觀鎖問題 一人一單 難題 要解決優惠卷秒殺的問題我們要考慮到三個個問題,全局唯一ID,超賣問題,一人一單。 全局唯一ID 用戶搶購時,就會生成訂單并保存到同一…