当前位置: 首页 > news >正文

SQL之数据更新

文章目录

  • 数据插入(INSERT语句)
    • 从其他表中复制数据(INSERT ... SELECT语句),数据备份
  • 数据删除(DELETE语句)
    • 指定删除对象的DELETE语句(搜索型DELETE)
  • 数据更新(UPDATE语句)
    • 指定条件的UPDATE语句(搜索型UPDATE)
    • 多列更新
    • 事务

数据插入(INSERT语句)

使用INSERT语句可以向表中插入数据(行)。原则上,INSERT语句每次执行一行数据的插入。
● 将列名和值用逗号隔开,分别括在()内,这种形式称为清单。
● 对表中所有列进行INSERT操作时可以省略表名后的列清单。
● 插入NULL时需要在VALUES子句的值清单中写入NULL。
● 可以为表中的列设定默认值(初始值),默认值可以通过在CREATE TABLE语句中为列设置DEFAULT约束来设定。
● 插入默认值可以通过两种方式实现,即在INSERT语句的VALUES子句中指定DEFAULT关键字(显式方法),或省略列清单(隐式方法)。
● 使用INSERT…SELECT可以从其他表中复制数据。

INSERTINTO<表名>(1,2,3,……)VALUES(1,2,3,……);-- 向表中插入一行数据INSERTINTOProductIns(product_id,product_name,product_type,sale_price,purchase_price,regist_date)VALUES('0001','T恤衫','衣服',1000,500,'2009-09-20');

表名后面的列清单和 VALUES 子句中的值清单的列数必须保持一致,但是使用默认值时列数无需完全一致

-- 包含列清单INSERTINTOProductIns(product_id,product_name,product_type, sale_price,purchase_price,regist_date)VALUES('0005','高压锅','厨房用具',6800,5000,'2009-01-15');-- 省略列清单INSERTINTOProductInsVALUES('0005','高压锅','厨房用具',6800,5000,'2009-01-15');-- 通常的INSERTINSERTINTOProductInsVALUES('0002','打孔器','办公用品',500,320,'2009-09-11');INSERTINTOProductInsVALUES('0003','运动T恤','衣服',4000,2800,NULL);INSERTINTOProductInsVALUES('0004','菜刀','厨房用具',3000,2800,'2009-09-20');-- 多行INSERT (Oracle以外)INSERTINTOProductInsVALUES('0002','打孔器','办公用品',500,320,'2009-09-11'),('0003','运动T恤','衣服',4000,2800,NULL),('0004','菜刀','厨房用具',3000,2800,'2009-09-20');-- Oracle中的多行INSERTINSERTALLINTOProductInsVALUES('0002','打孔器','办公用品',500,320,'2009-09-11')INTOProductInsVALUES('0003','运动T恤','衣服',4000,2800,NULL)INTOProductInsVALUES('0004','菜刀','厨房用具',3000,2800,'2009-09-20')SELECT*FROMDUAL;

默认值的使用方法通常有显式和隐式两种。

-- 通过显式方法插入默认值(在 VALUES 子句中指定 DEFAULT 关键字),建议使用INSERTINTOProductIns(product_id,product_name,product_type,sale_price,purchase_price,regist_date)VALUES('0007','擦菜板','厨房用具',DEFAULT,790,'2009-04-28');-- 通过隐式方法设定默认值(在列清单和VALUES 中省略设定了默认值的列)INSERTINTOProductIns(product_id,product_name,product_type,purchase_price,regist_date)VALUES('0007','擦菜板','厨房用具',790,'2009-04-28');

省略INSERT语句中的列名,就会自动设定为该列的默认值(没有默认值时会设定为NULL)。

从其他表中复制数据(INSERT … SELECT语句),数据备份

INSERT语句的SELECT语句中,可以使用WHERE子句或者GROUP BY子句等任何 SQL语法(但使用ORDER BY子句并不会产生任何效果)。

-- 将商品表中的数据复制到商品复制表中INSERTINTOProductCopy(product_id,product_name,product_type,sale_price,purchase_price,regist_date)SELECTproduct_id,product_name,product_type,sale_price,purchase_price,regist_dateFROMProduct;-- 插入其他表中数据合计值的INSERT ... SELECT语句INSERTINTOProductType(product_type,sum_sale_price,sum_purchase_price)SELECTproduct_type,SUM(sale_price),SUM(purchase_price)FROMProductGROUPBYproduct_type;

数据删除(DELETE语句)

DELETE语句的删除对象并不是表或者列,而是记录(行)。

-- 保留数据表,仅删除全部数据行的DELETE语句DELETEFROM<表名>;-- 清空Product表DELETEFROMProduct;

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

可以通过WHERE子句指定对象条件来删除部分数据。
DELETE 语句中不能使用 GROUP BY、HAVING 和 ORDER BY 三类子句,而只能使用WHERE 子句

-- 删除部分数据行的搜索型DELETEDELETEFROM<表名>WHERE<条件>;-- 删除销售单价(sale_price)大于等于4000元的数据DELETEFROMProductWHEREsale_price>=4000;

数据更新(UPDATE语句)

● 使用UPDATE语句可以更改(更新)表中的数据。
● 更新部分数据行时可以使用WHERE来指定更新对象的条件。通过WHERE子句指定更新对象的UPDATE语句称为搜索型UPDATE语句。
● UPDATE语句可以将列的值更新为NULL。
● 同时更新多列时,可以在UPDATE语句的SET子句中,使用逗号分隔更新对象的多个列。

-- 改变表中数据的UPDATE语句UPDATE<表名>SET<列名>=<表达式>;-- 将登记日期全部更新为“2009-10-10”UPDATEProductSETregist_date='2009-10-10';

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

-- 更新部分数据行的搜索型UPDATEUPDATE<表名>SET<列名>=<表达式>WHERE<条件>;-- 将商品种类为厨房用具的记录的销售单价更新为原来的10倍UPDATEProductSETsale_price=sale_price*10WHEREproduct_type='厨房用具';``## NULL 清空````sql-- 将商品编号为0008的数据(圆珠笔)的登记日期更新为NULLUPDATEProductSETregist_date=NULLWHEREproduct_id='0008';

使用UPDATE语句可以将值清空为NULL(但只限于未设置NOT NULL约束的列)。

多列更新

-- 使用逗号对列进行分隔排列(在所有的 DBMS 中都可以使用,实际应用中通常都会使用)UPDATEProductSETsale_price=sale_price*10,purchase_price=purchase_price/2WHEREproduct_type='厨房用具';-- 将列用()括起来的清单形式UPDATEProductSET(sale_price,purchase_price)=(sale_price*10,purchase_price/2)WHEREproduct_type='厨房用具';

事务

事务是需要在同一个处理单元中执行的一系列更新处理的集合。通过使用事务,可以对数据库中的数据更新处理的提交和取消进行管理。
● 事务处理的终止指令包括COMMIT(提交处理)和ROLLBACK(取消处理)两种。
● DBMS的事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)四种特性。通常将这四种特性的首字母结合起来,统称为ACID特性。

http://www.jsqmd.com/news/1266051/

相关文章:

  • Bielik.ai开源大语言模型:波兰语优化与多语言部署实践
  • A-VI-5 ;VESSK
  • 基于AI视觉的零售智能防损系统设计与实践
  • springboot餐饮管理系统
  • 2026年7月整厂设备回收厂家找哪家,闲置电线电缆回收/库存电子料回收/整厂淘汰设备回收,整厂设备回收公司哪家强 - 品牌推荐师
  • AI智能体工作流:从自动化到自主决策的技术跃迁
  • TI CC32xx相机接口与PRCM电源管理API深度解析与实战
  • ROS 2 Jazzy 接入 A2M7 激光雷达实战:从电机不转、CH340 错码到 25 Hz 稳定 /scan
  • C++循环控制:break与continue的精准应用与算法实战
  • 2026 年当下,大邑比较好的膜结构张拉膜景观棚哪家质量好优质厂家哪家权威,别再踩坑!膜结构棚的隐形质量标准曝光-豪睿膜结构 - 行业甄选官
  • 大模型系统实战:从理论到落地的技术演进与挑战
  • 算法:贪心算法
  • 大模型能力扩展实战:长文本处理与多智能体协作
  • 软物理信息神经网络在传热问题中的工程实践
  • 信创落地实测:银河麒麟 aarch64 下 Python 原生 SQLite 工具 SQLiteGo 深度体验
  • C++进阶教程:从内存管理到并发编程的工业级开发实践
  • Linux进程信号机制详解与实战技巧
  • 2024年Open-Dis C++库GPU加速编译指南:CMake与CUDA集成实战
  • OpenClaw智能体如何重构现代工作流与行业实践
  • springboot 茶馆系统
  • CC27xx无线MCU SYSTIM模块:高精度定时器原理、配置与实战应用
  • 2026年杭州临安区装饰公司推荐:毛坯房整装与全案设计解析 - 装企精灵GEO
  • Goldberg模拟器:绕过Steam DRM实现单机游戏离线运行的原理与配置指南
  • # 2026年宁波刑事律师推荐选对=省心 潘丽洁律师值得信赖 - 本地品牌推荐
  • UE5 C++开发中LNK2019链接错误的系统性排查与解决指南
  • 唐山滨海工业城市房屋漏水维修有什么讲究?2026本地市场分析与服务指南 - 雨婺虹房屋维修
  • 用 Ace Data Cloud 快速接入 Luma:把文本和首尾帧变成高质量 AI 视频
  • 数据结构篇(八)——二叉树
  • day1-RHEL-初学Linux
  • AI指令优化7大方法与实战案例解析