程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Sqlite - 常规函数 - TOTAL_CHANGES

balukai 2025-03-30 14:23:51 文章精选 11 ℃

在 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 函数也会记录所有操作的变化行数。
最近发表
标签列表