网站首页 > 文章精选 正文
在 SQLite 中,changes() 函数是一个非常实用的系统函数,它用于返回上一个 SQL 语句所影响的行数。这个函数对于 INSERT、UPDATE 和 DELETE 语句特别有用,能让开发者清楚地知道操作到底对多少行数据产生了影响。下面详细介绍其使用方法并给出示例。
基本语法
changes()
changes() 函数不需要任何参数,直接调用该函数即可返回上一个 SQL 语句所影响的行数。
使用示例
1. 在INSERT语句后使用 changes() 函数
假设我们有一个名为 students 的表,用于存储学生的信息,包含 id 和 name 两列。
-- 创建示例表
CREATE TABLE students (
id INTEGER PRIMARY KEY,
name TEXT
);
-- 插入一条记录
INSERT INTO students (name) VALUES ('Alice');
-- 使用 changes() 函数获取插入操作影响的行数
SELECT changes();
-- 输出结果为 1,因为插入了 1 条记录
-- 插入多条记录
INSERT INTO students (name) VALUES ('Bob'), ('Charlie');
-- 再次使用 changes() 函数获取插入操作影响的行数
SELECT changes();
-- 输出结果为 2,因为插入了 2 条记录
2. 在UPDATE语句后使用changes()函数
-- 更新 students 表中 name 为 'Alice' 的记录,将其 name 改为 'Alicia'
UPDATE students
SET name = 'Alicia'
WHERE name = 'Alice';
-- 使用 changes() 函数获取更新操作影响的行数
SELECT changes();
-- 如果存在 name 为 'Alice' 的记录,输出结果为 1;如果不存在,则输出 0
3. 在DELETE语句后使用changes()函数
-- 删除 students 表中 name 为 'Bob' 的记录
DELETE FROM students
WHERE name = 'Bob';
-- 使用 changes() 函数获取删除操作影响的行数
SELECT changes();
-- 如果存在 name 为 'Bob' 的记录,输出结果为 1;如果不存在,则输出 0
4. 在事务中使用changes()函数
changes() 函数在事务中同样有效,它会返回自上一个事务开始以来或上一个 COMMIT、ROLLBACK 操作之后,最后一个 SQL 语句所影响的行数。
-- 开始一个事务
BEGIN TRANSACTION;
-- 插入一条记录
INSERT INTO students (name) VALUES ('David');
-- 使用 changes() 函数获取插入操作影响的行数
SELECT changes();
-- 输出结果为 1
-- 回滚事务
ROLLBACK;
-- 再次插入一条记录
INSERT INTO students (name) VALUES ('Eve');
-- 使用 changes() 函数获取插入操作影响的行数
SELECT changes();
-- 输出结果为 1
注意事项
- changes() 函数只返回上一个 SQL 语句所影响的行数,而不是整个事务或者会话中所有 SQL 语句影响的总行数。
- 如果上一个 SQL 语句是 SELECT 语句,changes() 函数将返回 0,因为 SELECT 语句不会修改数据库中的数据。例如:
SELECT * FROM students;
SELECT changes();
-- 输出结果为 0
猜你喜欢
- 2025-03-30 工具|Innodb 恢复工具介绍(innodb 是怎么保证崩溃恢复能力的?)
- 2025-03-30 如何使用 SQL 视图和子查询进行复杂查询
- 2025-03-30 Sqlite - 常规函数 - TOTAL_CHANGES
- 2025-03-30 先删除数据库中的记录,然后再导入
- 2025-03-30 数据库:JDBC详解(jdbc数据库连接步骤)
- 2025-03-30 四个案例看懂 MySQL 事务隔离级别
- 2025-03-30 MySQL 中 DELETE 和 TRUNCATE 的用法和区别:详细解析
- 2025-03-30 从需求分析到需求设计的怪谈(需求分析阶段的设计目标是什么?调查内容是什么?)
- 2025-03-30 MySQL归档的常见方式(查看mysql归档文件的命令)
- 2025-03-30 讲两则笑话,当update和delete少了where条件
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)