工具库的使用:步伐编写时#include <库名.h>即可调用库中的函数 编译时链接工具库;
留意:数据库中不区分字母大小写;
SQLite 中的事务是数据库操作中非常紧张的一个概念,它用于确保数据库操作的完备性和同等性。以下是关于 SQLite 中事务的具体介绍:
1. 事务的基本概念
事务是一组数据库操作的集合,这些操作要么全部成功,要么全部失败。在事务执行过程中,假如任何一个操作失败,那么整个事务都会被打消,数据库会恢复到事务开始之前的状态。事务具有以下四个特性(ACID):
- 原子性(Atomicity):事务中的全部操作要么全部执行,要么全部不执行。
- 同等性(Consistency):事务执行前后,数据库的状态都必须满意完备性束缚。
- 隔离性(Isolation):多个事务并发执行时,一个事务的执行不会被其他事务干扰。
- 持久性(Durability):一旦事务提交,其对数据库的更改就会被永世保存。
2. 事务的使用
在 SQLite 中,事务的使用重要通过 SQL 语句来控制。以下是事务的基本操作:
(1)开始事务
使用 BEGIN TRANSACTION 或 BEGIN 语句来开始一个事务。例如:
大概
这两个语句的结果是雷同的,都表现开始一个新的事务。
(2)提交事务
假如事务中的全部操作都成功执行,可以使用 COMMIT 语句来提交事务,将事务中的更改永世保存到数据库中。例如:
提交事务后,事务中的全部更改都会被写入数据库。
(3)回滚事务
假如事务中的某个操作失败,可以使用 ROLLBACK 语句来回滚事务,打消事务中的全部更改,使数据库恢复到事务开始之前的状态。例如:
回滚事务后,事务中的全部操作都不会对数据库产生影响。
3. 事务的隔离级别
SQLite 支持以下几种事务隔离级别:
- READ UNCOMMITTED(读未提交):允许一个事务读取另一个事务未提交的数据。这种隔离级别下,可能会出现脏读、不可重复读和幻读的题目。
- READ COMMITTED(读已提交):一个事务只能读取另一个事务已经提交的数据。这种隔离级别下,不会出现脏读,但可能会出现不可重复读和幻读。
- REPEATABLE READ(可重复读):一个事务在读取数据时,其他事务不能对这些数据举行修改,直到当前事务完成。这种隔离级别下,不会出现脏读和不可重复读,但可能会出现幻读。
- SERIALIZABLE(可串行化):这是最高的隔离级别,事务之间完全隔离,不会出现任何并发题目。但这种隔离级别下的性能开销最大。
SQLite 默认的隔离级别是 SERIALIZABLE,但可以通过设置 PRAGMA read_uncommitted 来改变隔离级别。例如:
- PRAGMA read_uncommitted = 1; -- 设置为 READ UNCOMMITTED
复制代码 4. 自动提交模式
SQLite 默认是自动提交模式(autocommit mode)。在这种模式下,每条单独的 SQL 语句都会自动开启一个事务,并在执行完成后自动提交事务。例如:
- INSERT INTO table_name (column1, column2) VALUES (value1, value2);
复制代码 在自动提交模式下,这条 INSERT 语句会自动开启一个事务,执行完成后自动提交。
假如需要手动控制事务,可以通过执行 BEGIN TRANSACTION 或 BEGIN 语句来关闭自动提交模式。关闭自动提交模式后,需要手动提交或回滚事务。例如:
- BEGIN TRANSACTION;
- INSERT INTO table_name (column1, column2) VALUES (value1, value2);
- COMMIT;
复制代码 5. 事务的留意事项
- 事务的嵌套:SQLite 不支持嵌套事务。假如在事务中再执行 BEGIN TRANSACTION,会报错。
- 锁机制:在事务执行过程中,SQLite 会使用锁机制来包管数据的同等性。锁的类型包括共享锁(shared lock)和排他锁(exclusive lock)。共享锁允许多个事务同时读取数据,但不允许修改;排他锁则允许一个事务独占数据,其他事务不能读取或修改。
- 性能影响:事务的使用会对数据库性能产生肯定的影响。频繁地开启和提交事务会增长系统的开销,因此在现实应用中需要合理控制事务的使用。
6. 示例
以下是一个使用事务的完备示例:
- -- 开始事务BEGIN TRANSACTION;
- -- 插入数据INSERT INTO students (name, age) VALUES ('Alice', 20);INSERT INTO students (name, age) VALUES ('Bob', 22);-- 更新数据UPDATE students SET age = 21 WHERE name = 'Alice';-- 提交事务COMMIT;
复制代码 假如在事务执行过程中出现任何错误,可以使用 ROLLBACK 来回滚事务,打消全部更改。
通过合理使用事务,可以确保数据库操作的完备性和同等性,提高数据库系统的可靠性。
主键:
- 唯一的标识一行(一张表中只能有一个主键)
- 主键应该说对用户没故意义的(常用于索引)
- 永世不要更新主键,否则违背用户没故意义原则
- 主键不应包罗动态厘革的数据,如时间戳、创建时间列、修改时间列等
- 主键应当有盘算机自动天生(包管唯一性)
唯一束缚:
- 用来包管一个列(或一组列)中数据唯一,雷同于主键,但跟主键有区别
- 表可以包罗多个唯一束缚,但只允许一个主键
- 唯一束缚列可修改或更新
- 创建表时可通过unique来设置
检查束缚:
- 用来包管一个列(或一组列)中的数据满意一组指定的条件
- 指定范围,检查最大或最小范围,通过check实现
视图不包罗数据,因此在每次使用视图时,现实上都必须执行查询语句
视图相称于创建视图的时候as后面的SQL语句查询得到的结果集合
从返会结果信息(视图)中再检索视图与表一样
索引是为了在大数据库中,实现搜索、查找、条件查找等
索引避免使用情况:
表的数据量不大
表的大部分操作不是查询
大量出现NULL值的情况
C步伐调用sqlite3接口;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |