【Java 进阶篇】深入理解SQL的数据操作语言(DML)

news2024/11/18 11:39:14

在这里插入图片描述

SQL(Structured Query Language)是一种用于管理和操作关系数据库的强大语言。SQL语言被分为多个子语言,其中之一是DML(Data Manipulation Language),用于执行与数据的操作和管理相关的任务。在本文中,我们将深入探讨DML的各个方面,从基础操作到高级技巧,以帮助初学者更好地理解和使用SQL的DML。

什么是DML?

DML是SQL语言的一部分,用于执行以下数据操作任务:

  • 插入新的数据记录
  • 更新现有的数据记录
  • 删除数据记录
  • 查询和检索数据记录

这些任务是与数据库中的数据操作和管理密切相关的,是SQL的核心功能之一。让我们详细了解每种DML操作。

插入数据

插入数据是向数据库表中添加新记录的操作。为此,我们使用INSERT INTO语句,指定要插入数据的表以及要插入的值。以下是一个基本的插入数据的SQL语句示例:

INSERT INTO customers (customer_name, contact_email, phone_number)
VALUES ('John Doe', 'john.doe@example.com', '+1-123-456-7890');

上述示例中,我们向名为customers的表中插入了一条新记录。我们指定了要插入的列(customer_namecontact_emailphone_number),然后提供了要插入的值。

更新数据

更新数据是修改数据库表中现有记录的操作。我们使用UPDATE语句来执行此操作,指定要更新的表、要更新的列以及新的值。以下是一个更新数据的SQL语句示例:

UPDATE products
SET product_price = 29.99
WHERE product_id = 1001;

上述示例中,我们更新了名为products的表中的一条记录的product_price列的值。我们使用WHERE子句来指定要更新的特定记录。

删除数据

删除数据是从数据库表中删除现有记录的操作。为此,我们使用DELETE FROM语句,指定要删除的表以及要删除的记录的条件。以下是一个删除数据的SQL语句示例:

DELETE FROM customers
WHERE customer_id = 101;

上述示例中,我们从名为customers的表中删除了customer_id为101的记录。

查询和检索数据

查询和检索数据是从数据库表中获取所需信息的操作。我们使用SELECT语句来执行此操作,可以根据条件过滤和排序数据,以获取所需的结果。以下是一个查询数据的SQL语句示例:

SELECT product_name, product_price
FROM products
WHERE product_price < 50
ORDER BY product_price;

上述示例中,我们从名为products的表中检索了product_nameproduct_price列的值,然后使用WHERE子句过滤出价格低于50的产品,并使用ORDER BY子句按价格升序排序结果。

高级DML操作

除了基本的插入、更新、删除和查询操作之外,SQL的DML还支持一些高级技巧和功能,例如:

1. 事务:SQL允许您将一系列DML操作组合成一个事务,以确保它们要么全部成功,要么全部失败。这有助于维护数据的一致性。

事务用于将一系列 DML 操作组合在一起,以确保它们要么全部成功,要么全部失败。以下是一个示例,演示如何使用事务来插入新订单并更新库存:

-- 开始事务
START TRANSACTION;

-- 插入新订单
INSERT INTO orders (order_id, customer_id, order_date)
VALUES (1, 101, '2023-09-10');

-- 更新库存
UPDATE products SET stock_quantity = stock_quantity - 5
WHERE product_id = 123;

-- 提交事务
COMMIT;
-- 或者在出现错误时回滚事务
-- ROLLBACK;

上述 SQL 查询首先开始一个事务,然后插入新订单并更新库存。如果所有操作都成功,将提交事务。如果出现错误,可以使用 ROLLBACK 回滚事务,以确保不会对数据造成不一致性。

2. 批量操作:您可以执行批量插入、更新或删除操作,以提高性能。这通常涉及将多个操作合并成一个,从而减少通信开销。

批量操作可用于插入、更新或删除多个记录,以提高性能。以下是一个批量插入的示例,将多个客户记录插入到 customers 表格:

INSERT INTO customers (customer_id, customer_name, email)
VALUES
  (101, 'Alice', 'alice@example.com'),
  (102, 'Bob', 'bob@example.com'),
  (103, 'Charlie', 'charlie@example.com');

上述 SQL 查询一次性插入了多个客户记录,而不是多次单独插入,以减少通信开销。

3. 子查询:子查询是嵌套在其他查询内部的查询,可用于根据其他查询的结果来执行DML操作。

子查询嵌套在其他查询内部,可用于根据其他查询的结果执行 DML 操作。以下是一个示例,演示如何使用子查询删除订单项中的过期记录:

DELETE FROM order_items
WHERE order_id IN (
  SELECT order_id
  FROM orders
  WHERE order_date < '2023-09-01'
);

上述 SQL 查询使用子查询选择要删除的订单项,这些订单项的订单日期早于指定日期。

4. 连接:连接允许您将多个表的数据组合在一起,以执行复杂的DML操作。

连接允许您将多个表的数据组合在一起,以执行复杂的 DML 操作。以下是一个示例,演示如何使用连接更新员工的部门信息:

UPDATE employees AS e
INNER JOIN departments AS d ON e.department_id = d.department_id
SET e.department_name = d.department_name
WHERE e.department_name IS NULL;

上述 SQL 查询使用连接将 employees 表格和 departments 表格组合在一起,然后将部门名称更新到员工表格中。

5. 触发器:触发器是一种自动执行的DML操作,它们在满足特定条件时触发。

触发器是一种自动执行的 DML 操作,它们在满足特定条件时触发。以下是一个示例,演示如何创建一个触发器,在插入新订单时自动更新总销售额:

-- 创建触发器
CREATE TRIGGER update_total_sales
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
  UPDATE customers
  SET total_sales = total_sales + NEW.order_amount
  WHERE customer_id = NEW.customer_id;
END;

上述 SQL 查询创建了一个触发器,每当插入新订单时,它都会自动更新相应客户的总销售额。

6. 异常处理:SQL允许您编写异常处理程序来处理DML操作中的错误和异常。

SQL 允许您编写异常处理程序来处理 DML 操作中的错误和异常。以下是一个示例,演示如何使用异常处理来处理除零错误:

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
  ROLLBACK;
  SELECT 'An error occurred: ' || SQLSTATE || ' - ' || SQLERRM;
END;

-- 开始事务
START TRANSACTION;

-- 尝试除零操作
SET @result = 10 / 0;

-- 提交事务
COMMIT;

上述 SQL 查询首先定义了一个异常处理程序,以处理 SQLEXCEPTION 异常。然后,它开始一个事务,并尝试执行除零操作。如果出现错误,异常处理程序将回滚事务并显示错误消息。

SQL语句的构成

在DML操作中,SQL语句通常由以下几部分构成:

  • 关键字:SQL语句以关键字开头,表示要执行的操作类型,如INSERTUPDATEDELETESELECT等。

  • 目标表:指定要执行操作的目标表,例如customersproducts等。

  • 列和值:对于插入和更新操作,需要指定要操作的列和对应的值。例如,INSERT INTO customers (customer_name, contact_email) VALUES ('John Doe', 'john.doe@example.com');中的(customer_name, contact_email)('John Doe', 'john.doe@example.com')

  • 条件:对于更新、删除和查询操作,通常需要指定条件,以确定要操作的记录。条件使用WHERE子句定义,例如WHERE product_price < 50

  • 排序和限制:对于查询操作,可以使用ORDER BY子句对结果进行排序,以及使用LIMITOFFSET子句限制返回的记录数量。

  • 其他选项:SQL语句还可以包括其他选项,如GROUP BY用于分组、HAVING用于筛选分组后的结果等。

数据库表的关系

在DML操作中,数据库表之间的关系非常重要。数据库表通常分为以下几种类型:

  • 主表(父表):包含主要数据的表,通常具有唯一标识符(如产品ID、顾客ID等)。

  • 从表(子表):包含与主表相关的数据,通常通过外键与主表关联。

  • 关联表:用于建立多对多关系的中间表,通常包含两个或多个外键,连接两个主表。

DML操作通常涉及多个表之间的数据操作,因此了解表之间的关系对于编写复杂的SQL语句非常重要。

完整性约束

数据库通常定义了一些完整性约束,以确保数据的一致性和有效性。在DML操作中,您需要考虑以下几种完整性约束:

  • 主键约束:确保每条记录都具有唯一的标识符,通常用于主表。

  • 外键约束:定义了表之间的关系,确保从表中的外键引用了主表中存在的值。

  • 唯一约束:确保某一列的值在表中是唯一的。

  • 检查约束:定义了对列中数据值的条件,以确保它们满足特定要求。

  • 默认值约束:定义了在插入新记录时,如果未提供某一列的值,则使用默认值。

安全性考虑

在执行DML操作时,安全性是一个重要的考虑因素。遵循最佳安全实践,以防止SQL注入攻击和未经授权的访问是至关重要的。使用参数化查询、授予权限、定期备份等方法来提高数据的安全性。

总结

DML是SQL语言的核心部分,用于执行与数据的操作和管理相关的任务。了解如何插入、更新、删除和查询数据,以及高级DML操作和数据库表之间的关系,将帮助您更好地理解和使用SQL。在编写SQL语句时,请考虑完整性约束和安全性,以确保数据库的一致性和安全性。随着不断的学习和实践,您将变得更加熟练和自信,能够处理各种数据操作任务。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1047025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ci2451-2.4g无线MCU收发芯片

Ci2451 是一款集成无线收发器和8位RISC(精简指令集)MCU的SOC芯片。 无线MCU解决方案,集成丰富的MCU资源、更小尺寸,来满足设计中的各种内存、功率、尺寸要求,充分缩短2.4GHz无线产品设计周期并优化产品成本。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff…

聚观早报 | 智界S7正式亮相;ChatGPT重磅更新

【聚观365】9月27日消息 智界S7正式亮相 ChatGPT重磅更新 PICO应用数量已超530款 泡泡玛特上半年海外营收大增 亚马逊投资Anthropic40亿美元 智界S7正式亮相 在日前举行的华为秋季全场景新品发布会上&#xff0c;华为智选车业务首款轿车智界S7正式亮相&#xff0c;定位高…

华为云云耀云服务器L实例评测|使用华为云耀云服务器L实例的CentOS部署Docker并运行Tomcat应用

目录 前言 步骤1&#xff1a;登录到华为云耀云服务器L实例 步骤2&#xff1a;安装Docker 并验证Docker安装 步骤3&#xff1a;拉取Tomcat镜像并运行Tomcat容器 步骤4&#xff1a;放行8080端口 步骤5&#xff1a;访问tomcat 步骤6&#xff1a;管理Tomcat容器 小结 前言 …

干洗店收银系统、上门洗鞋小程序,干洗店会员管理系统

干洗店收银系统、上门洗鞋小程序&#xff0c;干洗店会员管理系统可以增加洗衣店的优势&#xff0c;让干洗店回本快&#xff0c;通过发行会员卡卡促销回收资金带来效益&#xff0c;减少投资压力。 干洗店管理软件功能介绍 预约上门收衣 智能提醒&#xff0b;员工手机APP抢单AP…

ORACLE 在内存管理机制上的演变和进化

截止目前&#xff0c;计算机内存仍然被认为是我们可以获得的最快速度的物理存储设备。 将频繁访问的数据尽可能地置于内存中&#xff0c;已成为当前各种软件和应用程序提高数据访问性能&#xff0c;减少访问延迟的最为有效的途径。 然而&#xff0c;内存作为关键的计算资源&am…

uni-app:showModal消息提示(确认、取消)

效果 代码 <template><view><button longpress"handleLongPress">点我出现删除消息</button></view> </template><script>export default {data() {return {};},methods: {handleLongPress(e) {//删除设备uni.showModal(…

小白vite+vue3搭建项目整个流程

第一步 查看npm 版本npm -v&#xff0c;npm版本是7&#xff0c;创建项目命令&#xff1a; npm create vitelatest threejsVue -- --template vue第二步 // 进入项目名为threejsVue的项目命令 cd threejsVue // 安装路由 npm install vue-router4 // 安装css npm install -D s…

uni-app实现图片预览

uni.previewImage预览图片 使用方法&#xff1a; <image class"poster" :src"imageUrl" mode"" click"previewImg(imageUrl)"></image>const previewImg (e) > {uni.previewImage({current: e,urls: image}); } 官…

Java+Vue 实现消息通知示例

前端代码部分&#xff1a; 右上方小铃铛组件 <template><div><el-popover placement"bottom" :width"280" trigger"click"><template #reference><el-badge :is-dot"isDot" class"item" style&…

【React】组件实例三大属性state、props、refs

state React 把组件看成是一个状态机&#xff08;State Machines&#xff09;。通过与用户的交互&#xff0c;实现不同状态&#xff0c;然后渲染 UI&#xff0c;让用户界面和数据保持一致。 React 里&#xff0c;只需更新组件的 state&#xff0c;然后根据新的 state 重新渲染用…

深信服应用交付 AD 存在远程命令执行漏洞 附POC

文章目录 深信服应用交付 AD 存在远程命令执行漏洞 附POC1. 深信服应用交付 AD 简介2.漏洞描述3.影响版本4.fofa查询语句5.漏洞复现6.POC&EXP7.整改意见8.往期回顾 深信服应用交付 AD 存在远程命令执行漏洞 附POC 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测…

命运2中文wiki搭建记录——MediaWiki安装与初设置

命运2中文wiki搭建记录 本文转自我的博客&#xff0c;原文地址——>命运2中文wiki搭建记录——MediaWiki安装与初设置 可能是出于闲的发霉&#xff0c;想自己搭建一个命运2wiki。 因为bilibili上的命运2Bwiki也全是自己搭的。指路——>命运2Bwiki 但是当自己实际上手Me…

USB 2.0 10/100M Ethernet Adaptor 有线网卡驱动

USB 2.0 10/100M Ethernet Adaptor有线网卡驱动&#xff0c;天蓝透明色和带线的USB网卡都适用卡&#xff0c;支持WIN7 32位。外接网卡&#xff0c;外置USB网卡驱动 平板电脑网卡驱动 以太网驱动亲测可用 USB2.0 Ethernet Adapter是USB2.0接口的以太网适配器即网卡。 把USB有线…

记录一个 GUI 库的对比测试结果

1&#xff0c;Java 的 JavaFX 2&#xff0c;golang 的 Fyne 1, Java 测试的是一个俄罗斯方块的 GUI 程序。一切正常。 2&#xff0c;Golang github 的原仓库网络问题&#xff0c;没能测试上&#xff0c;使用以下库 https://gitee.com/mirrors/Fyne 下载代码后提示“编译失…

【力扣2057】值相等的最小索引

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述二、题目分析 一、题目描述 题目链接&#xff1a;值相等的最小索引 给你一个下标从 0 开始的整数数组 nums …

基于springboot实现二手交易平台管理系统演示【项目源码】分享

基于springboot实现二手交易平台管理系统演示 java简介 Java语言是在二十世纪末由Sun公司发布的&#xff0c;而且公开源代码&#xff0c;这一优点吸引了许多世界各地优秀的编程爱好者&#xff0c;也使得他们开发出当时一款又一款经典好玩的小游戏。Java语言是纯面向对象语言之…

中国沿海水产养殖空间分布数据集(1990-2022)

4年间隔的遥感信息提取中国沿海水产养殖空间分布数据集&#xff08;1990-2022&#xff09; 人口增长引起水产品需求快速增加&#xff0c;而野生捕捞产量受环境承载力的限制趋于饱和&#xff0c;这使得水产养殖业在过去数十年间迅速发展。水产养殖能够有效保障人类粮食安全和营养…

使用elementUI的form表单和Steps步骤条如何让rules分步骤校验

使用rules如何分步骤校验 一般如果我们使用form表单的时候都会用到rules来进行校验,那么如果加上步骤的应该如何校验呢? 我使用的方式是通过active 我们步骤1的时候 active是0, 步骤2的时候active是1 那我们在进行校验步骤1可以这样子写: :prop"active 0 ? title : …

主从复制是怎么实现的?

单机模式的缺点 Redis虽然有持久化技术保证Redis奔溃后重启可以恢复数据&#xff0c;但是&#xff0c;单机模式下还是存在两方面问题。一方面Redis一旦宕机&#xff0c;数据恢复需要一定的时间&#xff0c;这段时间内&#xff0c;都不能接收和处理请求&#xff1b;另一方面&am…

《IIS系列》IIS日志文件管理

我们在使用IIS部署网站的时候&#xff0c;随着时间推移&#xff0c;IIS 生成的日志文件可能会消耗大量磁盘空间。 日志可能会填满整个硬盘驱动器&#xff0c;为了缓解此问题&#xff0c;许多用户完全关闭日志记录&#xff0c;但关了记录又会导致出现问题无从排查&#xff0c;故…