综合运用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.mzph.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 用户抢购时,就会生成订单并保存到同一…