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语句)

相关推荐
小白勇闯网安圈3 小时前
Django 响应对象、文件上传与类视图
数据库·django·sqlite
努力的小雨4 小时前
同一份 SQL 跑多套环境:Ksql 变量怎么用才安全
数据库
科技绘图5 小时前
快鲸GEO vs 传统AI搜索优化:全链路自动化与高效内容生产在转化闭环上的对比
数据库·人工智能·自动化
ltl5 小时前
数据库作为 LLM 记忆体:语义缓存、RAG 与一致性
数据库
ltl5 小时前
WAL 与崩溃恢复:ARIES 协议怎么跑通
数据库
ltl5 小时前
TEE 数据库:EnclaveDB、Oblivious 原语与机密 SQL
数据库
麻瓜code6 小时前
【Mysql】重新学一遍 SQL 执行顺序
数据库·sql
这个DBA有点耶7 小时前
数据库一体机架构演进:从硬件堆叠到软硬深度耦合
服务器·网络·数据库·硬件架构·运维开发·database·数据库架构
安_8 小时前
RAG的向量数据库:为LLM提供语义搜索能力
数据库
喜欢的名字被抢了8 小时前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库