SQL之数据更新

文章目录

数据插入(INSERT语句)

使用INSERT语句可以向表中插入数据(行)。原则上,INSERT语句每次执行一行数据的插入。

● 将列名和值用逗号隔开,分别括在()内,这种形式称为清单。

● 对表中所有列进行INSERT操作时可以省略表名后的列清单。

● 插入NULL时需要在VALUES子句的值清单中写入NULL。

● 可以为表中的列设定默认值(初始值),默认值可以通过在CREATE TABLE语句中为列设置DEFAULT约束来设定。

● 插入默认值可以通过两种方式实现,即在INSERT语句的VALUES子句中指定DEFAULT关键字(显式方法),或省略列清单(隐式方法)。

● 使用INSERT...SELECT可以从其他表中复制数据。

sql 复制代码
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');

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

sql 复制代码
-- 包含列清单
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');

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

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

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

sql 复制代码
-- 通过显式方法插入默认值(在 VALUES 子句中指定 DEFAULT 关键字),建议使用
INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0007', '擦菜板', '厨房用具', DEFAULT, 790, '2009-04-28');

-- 通过隐式方法设定默认值(在列清单和VALUES 中省略设定了默认值的列)
INSERT INTO ProductIns (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子句并不会产生任何效果)。

sql 复制代码
-- 将商品表中的数据复制到商品复制表中
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_date
 FROM Product;

--  插入其他表中数据合计值的INSERT ... SELECT语句
INSERT INTO ProductType (product_type, sum_sale_price, sum_purchase_price)
SELECT product_type, SUM(sale_price), SUM(purchase_price)
 FROM Product
 GROUP BY product_type;

数据删除(DELETE语句)

数据更新(UPDATE语句)

相关推荐
白帽攻防录10 分钟前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
꯭自꯭闭꯭37 分钟前
达梦SQL优化相关
linux·运维·数据库·sql
对空六课1 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
南京码讯光电技术有限公司1 小时前
How to Design an Antenna System for an Industrial WiFi Module
数据库·人工智能
lusklusklusk2 小时前
Oracle数据库基础之2_体系结构
数据库·oracle
可乐ea3 小时前
从第一性原理构建 AI Agent:提示词、工具、技能与记忆全解剖
数据库·人工智能·工具调用·ai智能体·提示词工程·agent开发·智能体记忆
东方护航数据恢复(深圳)3 小时前
医疗案例:HIS/PACS 数据库页损坏修复,医院不停诊完成恢复【东方护航数据恢复深圳店】
数据库·数据恢复·医疗·二次开盘
lusklusklusk4 小时前
Oracle数据库基础之11_Duplicate和Dataguard和RAC
数据库·oracle
PHP实战开发录5 小时前
MySQL字段加索引为什么没变快
数据库·mysql·php·开发
红红谈说6 小时前
标签化推送与已读统计怎么做?一次通知链路的工程复盘
数据库·消息推送·数字乡村·集合运算·已读回执·标签体系·写入放大