Sqlite3數據庫

工具庫的使用:程序編寫時#include <庫名.h>即可調用庫中的函數 編譯時鏈接工具庫;

注意:數據庫中不區分字母大小寫;
SQLite 中的事務是數據庫操作中非常重要的一個概念,它用于確保數據庫操作的完整性和一致性。以下是關于 SQLite 中事務的詳細介紹:

1. 事務的基本概念

事務是一組數據庫操作的集合,這些操作要么全部成功,要么全部失敗。在事務執行過程中,如果任何一個操作失敗,那么整個事務都會被撤銷,數據庫會恢復到事務開始之前的狀態。事務具有以下四個特性(ACID):

  • 原子性(Atomicity):事務中的所有操作要么全部執行,要么全部不執行。
  • 一致性(Consistency):事務執行前后,數據庫的狀態都必須滿足完整性約束。
  • 隔離性(Isolation):多個事務并發執行時,一個事務的執行不會被其他事務干擾。
  • 持久性(Durability):一旦事務提交,其對數據庫的更改就會被永久保存。

2. 事務的使用

在 SQLite 中,事務的使用主要通過 SQL 語句來控制。以下是事務的基本操作:

(1)開始事務

使用 BEGIN TRANSACTIONBEGIN 語句來開始一個事務。例如:

BEGIN TRANSACTION;

或者

BEGIN;

這兩個語句的效果是相同的,都表示開始一個新的事務。

(2)提交事務

如果事務中的所有操作都成功執行,可以使用 COMMIT 語句來提交事務,將事務中的更改永久保存到數據庫中。例如:

COMMIT;

提交事務后,事務中的所有更改都會被寫入數據庫。

(3)回滾事務

如果事務中的某個操作失敗,可以使用 ROLLBACK 語句來回滾事務,撤銷事務中的所有更改,使數據庫恢復到事務開始之前的狀態。例如:

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 TRANSACTIONBEGIN 語句來關閉自動提交模式。關閉自動提交模式后,需要手動提交或回滾事務。例如:

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接口;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73092.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73092.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73092.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

虛擬路由與單頁應用(SPA):詳解

在單頁應用&#xff08;SPA&#xff0c;Single Page Application&#xff09;中&#xff0c;虛擬路由&#xff08;也稱為前端路由&#xff09;是一種關鍵的技術&#xff0c;用于管理頁面導航和狀態變化&#xff0c;而無需重新加載整個頁面。為了幫助你更好地理解這一概念&#…

練習:運動計劃

需求&#xff1a;鍵盤錄入星期數&#xff0c;顯示今天的減肥活動。 周一&#xff1a;跑步&#xff1b; 周二&#xff1a;游泳&#xff1b; 周三&#xff1a;慢走&#xff1b; 周四&#xff1a;騎動感單車&#xff1b; 周五&#xff1a;拳擊&#xff1b; 周六&#xff1a;…

通過webrtc+canvas+css實現簡單的電腦濾鏡拍照效果

這里我們用的是webrtc中的MediaDevices.getUserMedia()的瀏覽器api進行的效果實現&#xff0c;MediaDevices.getUserMedia() 會提示用戶給予使用媒體輸入的許可&#xff0c;媒體輸入會產生一個MediaStream&#xff0c;里面包含了請求的媒體類型的軌道。此流可以包含一個視頻軌道…

《TCP/IP網絡編程》學習筆記 | Chapter 20:Windows 中的線程同步

《TCP/IP網絡編程》學習筆記 | Chapter 20&#xff1a;Windows 中的線程同步 《TCP/IP網絡編程》學習筆記 | Chapter 20&#xff1a;Windows 中的線程同步用戶模式和內核模式用戶模式同步內核模式同步 基于 CRITICAL_SECTION 的同步內核模式的同步方法基于互斥量對象的同步基于…

VBA-Excel

VBA 一、數據類型與變量 常用數據類型&#xff1a; Byte&#xff1a;字節型&#xff0c;0~255。Integer&#xff1a;整數型&#xff0c;用于存儲整數值&#xff0c;范圍 -32768 到 32767。Long&#xff1a;長整型&#xff0c;可存儲更大范圍的整數&#xff0c;范圍 -214748364…

kotlin 內聯函數 inline

高階函數實現的原理&#xff1a;函數類型其實是生成了一個對象 。 inline翻譯成中文的意思就是內聯&#xff0c;在kotlin里面inline被用來修飾函數&#xff0c;表明當前函數在編譯時是以內嵌的形式進行編譯的&#xff0c;從而減少了一層函數調用棧&#xff1a; inline fun fun…

PairRE: Knowledge Graph Embeddings via Paired Relation Vectors(論文筆記)

CCF等級&#xff1a;A 發布時間&#xff1a;2020年11月 25年3月24日交 目錄 一、簡介 二、原理 1.整體 2.關系模式 3.優化模型 三、實驗性能 四、結論和未來工作 一、簡介 將RotatE進行生級&#xff0c;RotatE只對頭實體h進行計算&#xff0c;PairRE對頭尾實體都進行…

從報錯到成功:Mermaid 流程圖語法避坑指南?

&#x1f680; 從報錯到成功&#xff1a;Mermaid 流程圖語法避坑指南 &#x1f680; &#x1f6a8; 問題背景 在開發文檔或技術博客中&#xff0c;我們經常使用 Mermaid 流程圖 來可視化代碼邏輯。但最近我在嘗試繪制一個 Java Stream 轉換流程圖時&#xff0c;遭遇了以下報錯…

深入解析 Redis 實現分布式鎖的最佳實踐

前言 在分布式系統中&#xff0c;多個進程或線程可能會同時訪問同一個共享資源&#xff0c;這就可能導致數據不一致的問題。為了保證數據的一致性&#xff0c;我們通常需要使用分布式鎖。Redis 作為高性能的內存數據庫&#xff0c;提供了一種簡單高效的方式來實現分布式鎖。本…

2025年03月10日人慧前端面試(外包滴滴)

目錄 普通函數和箭頭函數的區別loader 和 plugin 的區別webpack 怎么實現分包&#xff0c;為什么要分包webpack 的構建流程變量提升react 開發中遇到過什么問題什么是閉包vue 開發中遇到過什么問題vue中的 dep 和 watcher 的依賴收集是什么階段什么是原型鏈react setState 是同…

Android10 系統截屏功能異常的處理

客戶反饋的問題&#xff0c;設備上使用狀態欄中“長截屏”功能&#xff0c;截屏失敗且出現系統卡死問題。 在此記錄該問題的處理 一現象&#xff1a; 設備A10上使用系統“長截屏”功能&#xff0c;出現截屏失敗&#xff0c;系統死機。 二復現問題并分析 使用設備操作該功能&…

openvela新時代的國產開源RTOS系統

openvela 簡介 openvela 操作系統專為 AIoT 領域量身定制&#xff0c;以輕量化、標準兼容、安全性和高度可擴展性為核心特點。openvela 以其卓越的技術優勢&#xff0c;已成為眾多物聯網設備和 AI 硬件的技術首選&#xff0c;涵蓋了智能手表、運動手環、智能音箱、耳機、智能家…

ENSP學習day9

ACL訪問控制列表實驗 ACL&#xff08;Access Control List&#xff0c;訪問控制列表&#xff09;是一種用于控制用戶或系統對資源&#xff08;如文件、文件夾、網絡等&#xff09;訪問權限的機制。通過ACL&#xff0c;系統管理員可以定義哪些用戶或系統可以訪問特定資源&#x…

JVM的組成--運行時數據區

JVM的組成 1、類加載器&#xff08;ClassLoader&#xff09; 類加載器負責將字節碼文件從文件系統中加載到JVM中&#xff0c;分為&#xff1a;加載、鏈接&#xff08;驗證、準備、解析&#xff09;、和初始化三個階段 2、運行時數據區 運行時數據區包括&#xff1a;程序計數…

RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”與“陷阱”

嘿&#xff0c;親愛的算法工程師們&#xff01;今天咱們聊一聊PDF解析的那些事兒&#xff0c;簡直就像是在玩一場“信息捉迷藏”游戲&#xff01;PDF文檔就像是個調皮的小精靈&#xff0c;表面上看起來規規矩矩&#xff0c;但當你想要從它那里提取信息時&#xff0c;它就開始跟…

Python網絡編程入門

一.Socket 簡稱套接字&#xff0c;是進程之間通信的一個工具&#xff0c;好比現實生活中的插座&#xff0c;所有的家用電器要想工作都是基于插座進行&#xff0c;進程之間要想進行網絡通信需要Socket&#xff0c;Socket好比數據的搬運工~ 2個進程之間通過Socket進行相互通訊&a…

人工智能(AI)系統化學習路線

一、為什么需要系統化學習AI&#xff1f; 人工智能技術正在重塑各行各業&#xff0c;但許多初學者容易陷入誤區&#xff1a; ? 盲目跟風&#xff1a;直接學習TensorFlow/PyTorch&#xff0c;忽視數學與算法基礎。 ? 紙上談兵&#xff1a;只看理論不寫代碼&#xff0c;無法解…

mac calDAV 日歷交互

安裝Bakal docker https://sabre.io/dav/building-a-caldav-client/ 在Bakal服務器上注冊賬戶 http://localhost:8080/admin/?/users/calendars/user/1/ 在日歷端登錄賬戶&#xff1a; Server: http://127.0.0.1:8080/dav.php Server Path: /dav.php/principals/lion No e…

手機號登錄與高并發思考

基礎邏輯 一般來說這個驗證碼登錄分為手機號、以及郵箱登錄 手機號短信驗證&#xff0c;以騰訊云SMS 服務為例&#xff1a; 這個操作無非對后端來說就是兩個接口&#xff1a; 一個是獲取驗證碼&#xff0c;這塊后端生成6位數字expire_time 去推送到騰訊云sdk &#xff0c;騰…

Python設計模式 - 適配器模式

定義 適配器模式&#xff08;Adapter Pattern&#xff09;是一種結構型設計模式&#xff0c;它用于將一個類的接口轉換為客戶端所期待的另一個接口。 注&#xff1a;在適配器模式定義中所提及的接口是指廣義的接口&#xff0c;它可以表示一個方法或者一組方法的集合。 結構 …