网站首页 > 文章精选 正文
在 SQLite 中,total_changes 函数是一个非常实用的内置函数,它主要用于返回自 SQLite 数据库连接打开以来,所有 SQL 语句所导致的数据库表中发生变化的总行数。这些变化包括插入(INSERT)、更新(UPDATE)和删除(DELETE)操作。下面详细介绍其使用方法并给出示例。
基本语法
total_changes()
该函数不需要任何参数,直接调用即可返回自数据库连接建立后,所有 SQL 操作对数据库表造成的总行数变化。
工作原理
当你打开一个 SQLite 数据库连接后,SQLite 会在内部维护一个计数器,用于记录所有 INSERT、UPDATE 和 DELETE 操作所影响的行数。每次执行这些操作时,计数器会相应地增加。调用 total_changes 函数时,它会返回这个计数器的值。
示例
1. 简单的操作及total_changes函数调用
-- 连接到数据库(在命令行或程序中完成)
-- 创建一个示例表
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT
);
-- 插入一条记录
INSERT INTO users (name) VALUES ('Alice');
-- 获取自连接以来的总变化行数
SELECT total_changes();
-- 插入两条记录
INSERT INTO users (name) VALUES ('Bob'), ('Charlie');
-- 再次获取总变化行数
SELECT total_changes();
-- 更新一条记录
UPDATE users SET name = 'David' WHERE id = 1;
-- 又一次获取总变化行数
SELECT total_changes();
-- 删除一条记录
DELETE FROM users WHERE id = 2;
-- 最后获取总变化行数
SELECT total_changes();
解释:
- 首先创建了一个名为 users 的表。
- 第一次插入一条记录后,调用 total_changes 函数,此时返回值为 1,因为插入了一行数据。
- 接着插入两条记录,再次调用 total_changes 函数,返回值变为 3(之前的 1 加上新插入的 2)。
- 执行更新操作,将 id 为 1 的记录的 name 更新为 'David',调用 total_changes 函数,返回值为 4(之前的 3 加上更新的 1 行)。
- 最后删除 id 为 2 的记录,调用 total_changes 函数,返回值为 5(之前的 4 加上删除的 1 行)。
2. 在应用程序中使用total_changes函数
以下是一个使用 Python 的 sqlite3 模块的示例:
import sqlite3
# 连接到数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY,
name TEXT,
price REAL
)
''')
# 插入一条记录
cursor.execute("INSERT INTO products (name, price) VALUES ('Apple', 1.5)")
# 获取总变化行数
total_changes = conn.total_changes
print(f"插入操作后总变化行数: {total_changes}")
# 插入两条记录
cursor.execute("INSERT INTO products (name, price) VALUES ('Banana', 0.5), ('Cherry', 2.0)")
# 再次获取总变化行数
total_changes = conn.total_changes
print(f"再次插入操作后总变化行数: {total_changes}")
# 更新一条记录
cursor.execute("UPDATE products SET price = 1.8 WHERE name = 'Apple'")
# 又一次获取总变化行数
total_changes = conn.total_changes
print(f"更新操作后总变化行数: {total_changes}")
# 删除一条记录
cursor.execute("DELETE FROM products WHERE name = 'Banana'")
# 最后获取总变化行数
total_changes = conn.total_changes
print(f"删除操作后总变化行数: {total_changes}")
# 提交更改并关闭连接
conn.commit()
conn.close()
解释:
- 首先使用 sqlite3.connect 连接到数据库,并创建一个 products 表。
- 每次执行 INSERT、UPDATE 或 DELETE 操作后,通过 conn.total_changes 获取自连接以来的总变化行数,并打印输出。
- 最后提交更改并关闭数据库连接。
注意事项
- total_changes 函数返回的是自数据库连接打开以来的总变化行数,而不是某一个特定 SQL 语句的影响行数。如果需要获取单个 SQL 语句的影响行数,可以使用 changes() 函数。
- 该函数不受事务的影响,即使事务还未提交,total_changes 函数也会记录所有操作的变化行数。
- 上一篇: 数据库:JDBC详解(jdbc数据库连接步骤)
- 下一篇: 如何使用 SQL 视图和子查询进行复杂查询
猜你喜欢
- 2025-03-30 工具|Innodb 恢复工具介绍(innodb 是怎么保证崩溃恢复能力的?)
- 2025-03-30 如何使用 SQL 视图和子查询进行复杂查询
- 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条件
- 2025-03-30 SQL Server 中处理重复数据:保留最新记录的两种方案
- 最近发表
- 标签列表
-
- 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)