SQL笔记#数据更新

一、数据的插入(INSERT语句的使用方法)

1、什么是INSERT

        首先通过CREATE TABLE语句创建表,但创建的表中没有数据;再通过INSERT语句向表中插入数据。

--创建表ProductIns
CREATE TABLE ProductIns
(product_id      CHAR(4)      NOT NULL,product_name    VARCHAR(100) NOT NULL,product_type    VARCHAR(32)  NOT NULL,sale_price      INTEGER      DEFAULT 0,purchase_price  INTEGER      ,regist_date     DATE         ,PRIMARY KEY (product_id));

2、INSERT语句的基本语法

INSERT INTO <表名> (列1,列2,列3,……) VALUES (值1,值2,值3,……);

INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0001', 'T恤衫' ,'衣服', 1000, 500, '2009-09-20');

列清单为(列1,列2,列3,……);

值清单为(值1,值2,值3,……)。 

        列清单与值清单的列数必须保持一致, 通常执行一次INSERT语句会插入一行数据;但也就二将多条VALUE子句通过都好进行分隔排列。

-- 多行INSERT(Oracle除外)
INSERT INTO ProductIns VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11'),('0003', '运动T恤', '衣服', 4000, 2800, NULL),('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');

3、列清单的省略

-- 包含列清单
INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');-- 省略列清单
INSERT INTO ProductIns VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');

4、插入NULL

INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');

5、插入默认值

\blacksquare 通过显性的方式插入默认值

INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0007', '擦菜板', '厨房用具', DEFAULT, 790, '2009-04-28');
postgres=# SELECT * FROM ProductIns WHERE product_id = '0007';product_id | product_name | product_type | sale_price | purchase_price | regist_date
------------+--------------+--------------+------------+----------------+-------------0007       | 擦菜板       | 厨房用具     |          0 |            790 | 2009-04-28

 \blacksquare 通过隐性的方式插入默认值

-- 可通过对sale_price列和值的省略设定默认值
INSERT INTO ProductIns (product_id, product_name, product_type, purchase_price, regist_date) VALUES ('0007', '擦菜板', '厨房用具', 790, '2009-04-28');

        若未设定默认值,则自动设定为NULL;但遇到该列设定为NOT NULL则会报错。 

6、从其他表中复制数据

-- 用来插入数据的商品复制表
CREATE TABLE ProductCopy
(product_id      CHAR(4)      NOT NULL,product_name    VARCHAR(100) NOT NULL,product_type    VARCHAR(32)  NOT NULL,sale_price      INTEGER      ,purchase_price  INTEGER      ,regist_date     DATE         ,PRIMARY KEY (product_id));
-- 将商品表中的数据复制到商品复制表中
INSERT INTO ProductCopy (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
SELECT product_id, product_name, product_type, sale_price, purchase_price, regist_dateFROM Product;-- 打印商品复制表
SELECT * FROM ProductCopy;
 product_id | product_name | product_type | sale_price | purchase_price | regist_date
------------+--------------+--------------+------------+----------------+-------------0001       | T恤          | 衣服         |       1000 |            500 | 2009-09-200002       | 打孔器       | 办公用品     |        500 |            320 | 2009-09-110003       | 运动T恤      | 衣服         |       4000 |           2800 |0004       | 菜刀         | 厨房用具     |       3000 |           2800 | 2009-09-200005       | 高压锅       | 厨房用具     |       6800 |           5000 | 2009-01-150006       | 叉子         | 厨房用具     |        500 |                | 2009-09-200007       | 擦菜板       | 厨房用具     |        880 |            790 | 2008-04-280008       | 圆珠笔       | 办公用品     |        100 |                | 2009-11-11

\blacksquare 多种多样的SELECT语句

-- 根据商品种类进行汇总的表
CREATE TABLE ProductType
(product_type        VARCHAR(32)  NOT NULL,sum_sale_price      INTEGER      ,sum_purchase_price  INTEGER      ,PRIMARY KEY (product_type));
INSERT INTO ProductType (product_type, sum_sale_price, sum_purchase_price)
SELECT product_type, SUM(sale_price), SUM(purchase_price)FROM ProductGROUP BY product_type;-- 确认插入的数据行
SELECT * FROM ProductType;
 product_type | sum_sale_price | sum_purchase_price
--------------+----------------+--------------------衣服         |           5000 |               3300办公用品     |            600 |                320厨房用具     |          11180 |               8590

二、数据的删除(DELETE语句的使用方法)

1、DROP TABLE语句和DELETE语句

        DROP TABLE 语句 可以将表完全删除;

        DELETE 语句 会留下表(容器),而删除表中的全部数据。

 2、DELETE语句的基本语法

DELETE FROM Product;
 product_id | product_name | product_type | sale_price | purchase_price | regist_date
------------+--------------+--------------+------------+----------------+-------------

3、指定删除对象的DELETE语句(搜索型DELETE)

DELETE FROM <表名>

      WHERE <条件>;

DELETE FROM ProductWHERE sale_price >= 4000;-- 确认删除后的结果
SELECT * FROM Product;

        删之前的数据: 

 product_id | product_name | product_type | sale_price | purchase_price | regist_date
------------+--------------+--------------+------------+----------------+-------------0001       | T恤          | 衣服         |       1000 |            500 | 2009-09-200002       | 打孔器       | 办公用品     |        500 |            320 | 2009-09-110003       | 运动T恤      | 衣服         |       4000 |           2800 |0004       | 菜刀         | 厨房用具     |       3000 |           2800 | 2009-09-200005       | 高压锅       | 厨房用具     |       6800 |           5000 | 2009-01-150006       | 叉子         | 厨房用具     |        500 |                | 2009-09-200007       | 擦菜板       | 厨房用具     |        880 |            790 | 2008-04-280008       | 圆珠笔       | 办公用品     |        100 |                | 2009-11-11

        删之后的数据: 

 product_id | product_name | product_type | sale_price | purchase_price | regist_date
------------+--------------+--------------+------------+----------------+-------------0001       | T恤          | 衣服         |       1000 |            500 | 2009-09-200002       | 打孔器       | 办公用品     |        500 |            320 | 2009-09-110004       | 菜刀         | 厨房用具     |       3000 |           2800 | 2009-09-200006       | 叉子         | 厨房用具     |        500 |                | 2009-09-200007       | 擦菜板       | 厨房用具     |        880 |            790 | 2008-04-280008       | 圆珠笔       | 办公用品     |        100 |                | 2009-11-11
(6 行记录)

三、数据的更新(UPDATE语句的使用方法)

1、UPDATE语句的基本语法

UPDATE <表名>

       SET <列名>=<表达式>;

-- 将登记的数据更新为"2009-10-10"
UPDATE ProductSET regist_date = '2009-10-10';-- 确认更新的数据
SELECT * FROM Product ORDER BY product_id;
 product_id | product_name | product_type | sale_price | purchase_price | regist_date
------------+--------------+--------------+------------+----------------+-------------0001       | T恤          | 衣服         |       1000 |            500 | 2009-10-100002       | 打孔器       | 办公用品     |        500 |            320 | 2009-10-100004       | 菜刀         | 厨房用具     |       3000 |           2800 | 2009-10-100006       | 叉子         | 厨房用具     |        500 |                | 2009-10-100007       | 擦菜板       | 厨房用具     |        880 |            790 | 2009-10-100008       | 圆珠笔       | 办公用品     |        100 |                | 2009-10-10

2、指定条件的UPDATE语句(搜索型UPDATE)

UPDATE <表名>

       SET <列名>=<表达式>

 WHERE <条件>;

-- 将商品种类为厨房用具的记录的销售单价更新为原来的10倍
UPDATE ProductSET sale_price = sale_price * 10WHERE product_type = '厨房用具';-- 确认更新内容
SELECT * FROM Product ORDER BY product_id;
 product_id | product_name | product_type | sale_price | purchase_price | regist_date
------------+--------------+--------------+------------+----------------+-------------0001       | T恤          | 衣服         |       1000 |            500 | 2009-10-100002       | 打孔器       | 办公用品     |        500 |            320 | 2009-10-100004       | 菜刀         | 厨房用具     |      30000 |           2800 | 2009-10-100006       | 叉子         | 厨房用具     |       5000 |                | 2009-10-100007       | 擦菜板       | 厨房用具     |       8800 |            790 | 2009-10-100008       | 圆珠笔       | 办公用品     |        100 |                | 2009-10-10

3、使用NULL进行更新

-- 将商品编号为0008的数据(圆珠笔)的登记日期更新为NULL
UPDATE ProductSET regist_date = NULLWHERE product_id = '0008';-- 确认更新的内容
SELECT * FROM Product ORDER BY product_id;
 product_id | product_name | product_type | sale_price | purchase_price | regist_date
------------+--------------+--------------+------------+----------------+-------------0001       | T恤          | 衣服         |       1000 |            500 | 2009-10-100002       | 打孔器       | 办公用品     |        500 |            320 | 2009-10-100004       | 菜刀         | 厨房用具     |      30000 |           2800 | 2009-10-100006       | 叉子         | 厨房用具     |       5000 |                | 2009-10-100007       | 擦菜板       | 厨房用具     |       8800 |            790 | 2009-10-100008       | 圆珠笔       | 办公用品     |        100 |                |

4、多列更新

        下列三种更新方式都可以达到一个目标

-- 能够正确执行的繁琐的UPDATE语句
UPDATE ProductSET sale_price = sale_price * 10WHERE product_type = '厨房用具';UPDATE ProductSET purchase_price = purchase_price / 2WHERE product_type = '厨房用具';-- 确认更新的内容
SELECT * FROM Product ORDER BY product_id;
-- 使用逗号对列进行分隔排列
UPDATE ProductSET sale_price = sale_price * 10,purchase_price = purchase_price / 2WHERE product_type = '厨房用具';-- 确认更新的内容
SELECT * FROM Product ORDER BY product_id;
-- 将引用()括起来
UPDATE ProductSET (sale_price, purchase_price) = (sale_price * 10, purchase_price / 2)WHERE product_type = '厨房用具';-- 确认更新内容
SELECT * FROM Product ORDER BY product_id;
 product_id | product_name | product_type | sale_price | purchase_price | regist_date
------------+--------------+--------------+------------+----------------+-------------0001       | T恤          | 衣服         |       1000 |            500 | 2009-10-100002       | 打孔器       | 办公用品     |        500 |            320 | 2009-10-100004       | 菜刀         | 厨房用具     |     300000 |           1400 | 2009-10-100006       | 叉子         | 厨房用具     |      50000 |                | 2009-10-100007       | 擦菜板       | 厨房用具     |      88000 |            395 | 2009-10-100008       | 圆珠笔       | 办公用品     |        100 |                |

四、事务

1、什么是事务

        事务就是需要再同一个处理单元中执行的一系列更新处理的集合。

2、创建事务

事务开始语句;

        

        DML语句1;

        DML语句2;

        DML语句3;

        ……

事务结束语句(COMMIT或者ROLLBACK);

--SQL Server, PostgreSQL
BEGIN TRANSACTION;-- 将运动T恤的销售单价降低1000日元UPDATE ProductSET sale_price = sale_price - 1000WHERE product_name = 'T恤';-- 将T恤衫的销售单价上浮1000日元UPDATE ProductSET sale_price = sale_price + 1000WHERE product_name = 'T恤';COMMIT;SELECT *FROM ProductORDER BY product_id;

        COMMIT——提交处理

        ROLLBACK——取消处理 

3、ACID特性

1、原子性        包含的事务或全部执行或全部不执行;

2、一致性        事务中处理要满足数据库提前设置的约束;

3、隔离性        确保不同事务之间湖北干扰;

4、持久性        在事务结束后,DBMS能够保证该时间点的数据状态会被保存的特性。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dockerfile构建haproxy

1. 结构目录 [rootlocalhost ~]# tree haproxy/ haproxy/ ├── dockerfile └── files├── haproxy-2.5.0.tar.gz├── haproxy.cfg├── install.sh└── start.sh1 directory, 5 files [rootlocalhost ~]# [rootlocalhost ~]# cd haproxy/ [rootlocalhost haproxy]…

Docker(Nginx)部署Vue

简介&#xff1a;目标使用docker将vue生成的dist文件&#xff0c;结合nginx生成镜像&#xff0c;然后运行&#xff1b; 1、首选确保vue项目正确运行&#xff0c;并能正确打包dist文件&#xff1b; 2、查看已经生成的dist文件 3、将dist文件打包为rar文件或者zip文件&#xf…

C++——模版(二)

前言 我们前面讲过模版的一&#xff0c;不知道大家还有没有所印象&#xff0c;如果大家不太能回忆起来可以再去前面看一下&#xff0c;那通过我们讲解了几个容器之后&#xff0c;相信大家现在应该已经对模版很熟悉了&#xff0c;那模版还剩下一些其他的内容我们就在这里进行讲…

算法与数据结构(旋转链表)

题目 思路 每个节点向右移动k个位置&#xff0c;其实就是从头开始遍历&#xff0c;将n-k个节点顺序插入到链表的尾部。 如上图所示的示例1&#xff0c;先将1插入到5的后面&#xff0c;再将2插入到1的后面&#xff0c;最后将3插入到2的后面即可。 代码详解 定义一个cur变量用…

TOGAF之架构标准规范-信息系统架构 | 应用架构

TOGAF是工业级的企业架构标准规范&#xff0c;信息系统架构阶段是由数据架构阶段以及应用架构阶段构成&#xff0c;本文主要描述信息系统架构阶段中的应用架构阶段。 如上所示&#xff0c;信息系统架构&#xff08;Information Systems Architectures&#xff09;在TOGAF标准规…

智能优化算法:莲花算法(Lotus flower algorithm,LFA)介绍,提供MATLAB代码

一、 莲花算法 1.1 算法原理 莲花算法&#xff08;Lotus flower algorithm&#xff0c;LFA&#xff09;是一种受自然启发的优化算法&#xff0c;其灵感来源于莲花的自清洁特性和授粉过程。莲花的自清洁特性&#xff0c;即所谓的“莲花效应”&#xff0c;是由其叶片表面的微纳…

CSS 媒体查询:从入门到精通,打造跨设备完美体验

在当今移动互联网时代&#xff0c;用户访问网站的设备早已不再局限于桌面电脑&#xff0c;手机、平板等各种屏幕尺寸的设备层出不穷。为了确保用户在不同设备上都能获得良好的浏览体验&#xff0c;响应式网页设计应运而生。而 CSS 媒体查询&#xff0c;正是实现响应式设计的核心…

【Python LeetCode 专题】树

LeetCode 题目104. 二叉树的最大深度(gif 图解)方法一:后序遍历(DFS)方法二:层序遍历(BFS)872. 叶子相似的树(DFS 遍历)1448. 统计二叉树中好节点的数目(DFS 遍历)437. 路径总和 III(前缀和 + DFS 回溯)1372. 二叉树中的最长交错路径(DFS)236. 二叉树的最近公共…

Spring有哪些缺点?

大家好&#xff0c;我是锋哥。今天分享关于【Spring有哪些缺点?】面试题。希望对大家有帮助&#xff1b; Spring有哪些缺点? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring框架是一个广泛使用的企业级Java开发框架&#xff0c;提供了丰富的功能和强大的灵…

MySQL数据库——索引潜规则(回表查询、索引覆盖、索引下推)

大家好&#xff0c;这里是编程Cookbook。本文详细介绍MySQL索引的三个潜规则——回表查询、索引覆盖、索引下推&#xff0c;以提升数据库的性能。 文章目录 索引回顾聚集索引&#xff08;Clustered Index&#xff09;非聚集索引&#xff08;Secondary Index/辅助索引/二级索引&…

VScode运行后出现黑窗口

原文链接&#xff1a;VScode运行出黑窗口 1.安装插件&#xff1a;C/C Compile Run 2.快捷键【CtrlShiftp】,点击【首选项&#xff1a;打开用户设置】

使用大语言模型(Deepseek)构建一个基于 SQL 数据的问答系统

GitHub代码仓库 架构 从高层次来看&#xff0c;这些系统的步骤如下&#xff1a; 将问题转换为SQL查询&#xff1a;模型将用户输入转换为SQL查询。 执行SQL查询&#xff1a;执行查询。 回答问题&#xff1a;模型根据查询结果响应用户输入。 样本数据 下载样本数据&#xf…

【前端小点】vue3项目内根据主题读取不同文件夹下的图片资源(图片文件)

项目要求实现一键换肤的功能&#xff0c;不仅仅是主题颜色上的替换&#xff0c;还有图片素材的替换&#xff0c;主题颜色替换的方案大同小异&#xff0c;下面仅对图片素材的一件替换进行方法描述。 主要思路 使用本地仓库对当前主题进行存储&#xff0c;系统根据主题去加载不同…

vxe-table实现动态列

vxe-table实现动态列 1.动态列解释2.解决步骤2.1将后端返回的动态列表头&#xff0c;按照格式拼接在固定列表头上2.2将后端返回的列表数据按照键值对格式组装 1.动态列解释 正常列表是有固定的列&#xff1b;我的需求是&#xff0c;最初只知道表格的固定两列&#xff0c;查询数…

Windows 11 使用容器(Docker Podman)

文章目录 背景1、相关网站1.1、WSL1.2、Docker1.3、Podman 2、环境3、安装部署3.1、安装 WSL3.2、Docker3.2.1、Docker Desktop3.2.1.1、安装3.2.1.2、拉取镜像3.2.1.3、启动容器 3.3、Podman3.3.1、安装3.3.2、使用3.3.3、异常处理 总结 背景 Windows 系统中使用容器&#xf…

UE_C++ —— Gameplay Modules

目录 一&#xff0c;Module Creation INI File Setup 二&#xff0c;Multiple Gameplay Modules 三&#xff0c;Limitations 编译成 DLL 的游戏相关类的集合&#xff1b;正如引擎本身由一组模块构成一样&#xff0c;每个游戏也是由一个或多个游戏模块构成的&#xff1b;这些…

蓝桥杯定时器实现led闪烁

step1.配置定时器&#xff0c;TIM1时高级定时&#xff0c;TIM2是通用定时器&#xff0c;用TIM2就行&#xff0c;用内部时钟源&#xff0c;记住相关公式&#xff0c;定时器中断配置时要使能&#xff0c;且生成代码后也要在mian中写使能函数 step2.写代码 配置生成代码后多出的…

二:前端发送POST请求,后端获取数据

接着一&#xff1a;可以通过端口访问公网IP之后 二需要实现&#xff1a;点击飞书多维表格中的按钮&#xff0c;向服务器发送HTTP请求&#xff0c;并执行脚本程序 向服务器发送HTTP请求&#xff1a; 发送请求需要明确一下几个点 请求方法&#xff1a; 由于是向服务器端发送值…

内外网文件传输 安全、可控、便捷的跨网数据传输方案

一、背景与痛点 在内外网隔离的企业网络环境中&#xff0c;员工与外部协作伙伴&#xff08;如钉钉用户&#xff09;的文件传输面临以下挑战&#xff1a; 安全性风险&#xff1a;内外网直连可能导致病毒传播、数据泄露。 操作繁琐&#xff1a;传统方式需频繁切换网络环境&…

elasticsearch在windows上的配置

写在最前面&#xff1a; 上资源 第一步 解压&#xff1a; 第二步 配置两个环境变量 第三步 如果是其他资源需要将标蓝的文件中的内容加一句 xpack.security.enabled: false 不同版本的yaml文件可能配置不同&#xff0c;末尾加这个 xpack.security.enabled: true打开bin目…