데이터 베이스 MySQL 튜토리얼 SQLite这么娇小可爱,不多了解点都不行啊

SQLite这么娇小可爱,不多了解点都不行啊

Jun 07, 2016 pm 03:10 PM
sqlite

SQLite,是一款轻型的数据库,是遵守 ACID 的关系型数据库管理系统。它的设计目标是嵌入式的,目前 Android 和 iOS 的设备内置的

   在我眼里,MySQL 和 Oracle 是这样的

SQLite这么娇小可爱,不多了解点都不行啊

SQLite这么娇小可爱,不多了解点都不行啊

而 SQLite 在是这样的

SQLite这么娇小可爱,不多了解点都不行啊

所以这么萌的数据库,我真的应该多了解她的。

简介

SQLite,是一款轻型的数据库,是遵守 ACID 的关系型数据库管理系统。它的设计目标是嵌入式的,目前 Android 和 iOS 的设备内置的都是 SQLite 数据库。SQLite 虽然娇小,但也支持事务和多数的 SQL92 标准。

主要特点

主要缺点

如果只在移动设备使用 SQLite,那么他的优点足够好,并且缺点不明显,所以大叔 MySQL 走开。SQLite 妹妹快过来。

事务与锁(

SQLite 的事务和锁是很重要的概念。

SQLite 有 5 个不同的锁状态

SQLite 有一个加锁表,记录数据库连接的锁状态。每个数据库连接在同一时刻只能处于其中一个锁状态。每种状态(UNLOCKED)都有一种锁与之对应。

数据库连接最初处于 UNLOCKED 状态,在此状态下,连接还没有存取数据库。当连接到了一个数据库,甚至已经用 BEGIN 开始了一个事务时,连接都还处于 UNLOCKED 状态。为了能够从数据库中读取数据,连接必须必须进入 SHARED 状态,也就是说首先要获得一个 SHARED 锁。多个连接可以同时获得并保持共享锁,也就是说多个连接可以同时从同一个数据库中读数据,SQLite 是支持并发读取数据的。

一个连接想要写数据库,它必须首先获得一个 RESERVED 锁。一个数据库上同时只能有一个 RESERVED 锁,保留锁可以与共享锁共存,RESERVED 锁即不阻止其它拥有 SHARED 锁的连接继续读数据库,也不阻止其它连接获得新的 SHARED 锁。 一旦一个连接获得了 RESERVED 锁,它就可以将数据写入缓冲区,而不是实际地写到磁盘。 当连接想要提交修改(或事务)时,需要获得 PENDING 锁,之后连接就不能再获得新的 SHARED 锁了,但已经拥有 SHARED 锁的连接仍然可以继续正常读数据库。当所有其它 SHARED 锁都被释放时,拥有 PENDING 锁的连接就可以将其锁提升至 EXCLUSIVE 锁,此时就可以将以前对缓冲区所做的修改写到数据库文件。所以SQLite 是不支持并发写的。

事务

SQLite 有三种不同的事务

事务类型在 BEGIN 命令中指定:

SQLite这么娇小可爱,不多了解点都不行啊

DEFERRED

一个 DEFERRED 事务不获取任何锁(直到它需要锁的时候),BEGIN 语句本身也不会做什么事情——它开始于 UNLOCK 状态。默认情况下就是这样的,如果仅仅用 BEGIN 开始一个事务,那么事务就是 DEFERRED 的,同时它不会获取任何锁;当对数据库进行第一次读操作时,它会获取 SHARED 锁;同样,当进行第一次写操作时,它会获取 RESERVED 锁。

MMEDIATE

由 BEGIN 开始的 IMMEDIATE 事务会尝试获取 RESERVED 锁。如果成功,BEGIN IMMEDIATE 保证没有别的连接可以写数据库。但是,别的连接可以对数据库进行读操作;但是,RESERVED 锁会阻止其它连接的 BEGIN IMMEDIATE 或者 BEGIN EXCLUSIVE 命令,当其它连接执行上述命令时,会返回 SQLITE_BUSY 错误。这时你就可以对数据库进行修改操作了,但是你还不能提交,当你 COMMIT 时,会返回 SQLITE_BUSY 错误,这意味着还有其它的读事务没有完成,得等它们执行完后才能提交事务。

EXCLUSIVE

EXCLUSIVE 事务会试着获取对数据库的 EXCLUSIVE 锁。这与 IMMEDIATE 类似,但是一旦成功,EXCLUSIVE 事务保证没有其它的连接,所以就可对数据库进行读写操作了。

死锁

如果两个以 BEGIN DEFERRED 开始事务的连接都处于 SHARED 状态,并且都在等待对方结束 SHARED 从而进入 RESERVED 的话,就会进入死锁状态。所以BEGIN DEFERRED 开始的事务是有可能产生死锁的.

Write-Ahead Logging ( >=3.7.0 )

SQLite 3.7.0 之前是不支持写的时候读得。为了能够读得时候写,引入了 Write-Ahead Logging(WAL)机制,这样可以支持一个写和多个读并发。

在引入 WAL 机制之前,SQLite 使用 rollback journal 机制实现原子事务。

rollback journal 机制的原理是:在修改数据库文件中的数据之前,先将修改所在分页中的数据备份在另外一个地方,然后才将修改写入到数据库文件中;如果事务失败,则将备份数据拷贝回来,撤销修改;如果事务成功,则删除备份数据,提交修改。

WAL 机制的原理是:修改并不直接写入到数据库文件中,而是写入到另外一个称为 WAL 的文件中;如果事务失败,WAL 中的记录会被忽略,撤销修改;如果事务成功,它将在随后的某个时间被写回到数据库文件中,提交修改。

同步 WAL 文件和数据库文件的行为被称为 checkpoint(检查点),它由 SQLite 自动执行,默认是在 WAL 文件积累到 1000 页修改的时候;当然,,在适当的时候,也可以手动执行 checkpoint,SQLite 提供了相关的接口。执行 checkpoint 之后,WAL 文件会被清空。

在读的时候,SQLite 将在 WAL 文件中搜索,找到最后一个写入点,记住它,并忽略在此之后的写入点(这保证了读写和读读可以并行执行);随后,它确定所要读的数据所在页是否在 WAL 文件中,如果在,则读 WAL 文件中的数据,如果不在,则直接读数据库文件中的数据。

在写的时候,SQLite 将之写入到 WAL 文件中即可,但是必须保证独占写入,因此写写之间不能并行执行。

WAL 在实现的过程中,使用了共享内存技术,因此,所有的读写进程必须在同一个机器上,否则,无法保证数据一致性。

优点

缺点

  • 访问数据库的所有程序必须在同一主机上,且支持共享内存技术。

  • 每个数据库现在对应 3 个文件:.db,-wal,-shm。

  • 当写入数据达到 GB 级的时候,数据库性能将下降。

  • 3. 7.0 之前的 SQLite 无法识别启用了 WAL 机制的数据库文件。

  • 본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    Video Face Swap

    Video Face Swap

    완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

    뜨거운 도구

    메모장++7.3.1

    메모장++7.3.1

    사용하기 쉬운 무료 코드 편집기

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    스튜디오 13.0.1 보내기

    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    드림위버 CS6

    드림위버 CS6

    시각적 웹 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    PHP와 SQLite를 사용하여 사용자 로그인 시스템을 만드는 방법 PHP와 SQLite를 사용하여 사용자 로그인 시스템을 만드는 방법 Jul 28, 2023 pm 09:27 PM

    PHP와 SQLite를 사용하여 사용자 로그인 시스템을 만드는 방법 오늘날의 인터넷 시대에 사용자 로그인 시스템은 많은 웹사이트와 애플리케이션의 기본 기능 중 하나입니다. 이 기사에서는 PHP와 SQLite를 사용하여 간단하고 강력한 사용자 로그인 시스템을 만드는 방법을 소개합니다. SQLite는 구성이 필요 없는 서버측 데이터베이스 엔진입니다. PHP는 유연하고 효율적인 사용자 로그인 시스템을 만들기 위해 SQLite와 함께 사용할 수 있는 널리 사용되는 서버측 스크립팅 언어입니다. ~에 의해

    PHP 및 SQLite를 사용하여 사용자 권한 및 액세스 제어 구현 PHP 및 SQLite를 사용하여 사용자 권한 및 액세스 제어 구현 Jul 29, 2023 pm 02:33 PM

    PHP 및 SQLite를 사용하여 사용자 권한 및 액세스 제어 구현 최신 웹 애플리케이션에서 사용자 권한 및 액세스 제어는 매우 중요한 부분입니다. 적절한 권한 관리를 통해 승인된 사용자만 특정 페이지와 기능에 액세스할 수 있도록 할 수 있습니다. 이 기사에서는 PHP 및 SQLite를 사용하여 기본 사용자 권한 및 액세스 제어를 구현하는 방법을 알아봅니다. 먼저 사용자 및 해당 권한에 대한 정보를 저장하기 위해 SQLite 데이터베이스를 만들어야 합니다. 다음은 간단한 사용자 테이블과 권한 테이블의 구조이다.

    PHP 및 SQLite: 데이터 압축 및 암호화 수행 방법 PHP 및 SQLite: 데이터 압축 및 암호화 수행 방법 Jul 29, 2023 am 08:36 AM

    PHP 및 SQLite: 데이터를 압축하고 암호화하는 방법 많은 웹 애플리케이션에서 데이터 보안과 저장 공간 활용은 매우 중요한 고려 사항입니다. PHP와 SQLite는 매우 널리 사용되는 두 가지 도구이며, 이 기사에서는 데이터 압축 및 암호화에 이를 사용하는 방법을 소개합니다. SQLite는 별도의 서버 프로세스가 없지만 애플리케이션과 직접 상호 작용하는 경량 임베디드 데이터베이스 엔진입니다. PHP는 동적 구축에 널리 사용되는 널리 사용되는 서버 측 스크립팅 언어입니다.

    PHP 및 SQLite를 사용한 데이터 차트 작성 및 시각화 PHP 및 SQLite를 사용한 데이터 차트 작성 및 시각화 Jul 28, 2023 pm 01:01 PM

    PHP 및 SQLite를 사용하여 데이터 차트 및 시각화 개요 구현: 빅 데이터 시대가 도래하면서 데이터 차트 및 시각화는 데이터를 표시하고 분석하는 중요한 방법이 되었습니다. 이 기사에서는 PHP와 SQLite를 사용하여 데이터 차트 및 시각화 기능을 구현하는 방법을 소개합니다. SQLite 데이터베이스에서 데이터를 읽고 일반 데이터 차트 라이브러리를 사용하여 데이터를 표시하는 방법을 보여주는 예제를 예로 들어 보겠습니다. 준비: 먼저 PHP 및 SQLite 데이터베이스가 설치되었는지 확인해야 합니다. 설치되어 있지 않은 경우 다음을 수행할 수 있습니다.

    간단한 블로그 만들기: PHP와 SQLite를 사용하여 간단한 블로그 만들기: PHP와 SQLite를 사용하여 Jun 21, 2023 pm 01:23 PM

    인터넷의 발달로 블로그는 점점 더 많은 사람들이 자신의 삶과 지식, 아이디어를 공유하는 플랫폼이 되었습니다. 자신만의 블로그를 만들고 싶다면 이 기사에서는 PHP와 SQLite를 사용하여 간단한 블로그를 만드는 방법을 소개합니다. 요구 사항 결정 블로그 만들기를 시작하기 전에 달성하려는 기능을 결정해야 합니다. 예: 블로그 게시물 작성 블로그 게시물 편집 블로그 게시물 삭제 블로그 게시물 목록 표시 블로그 게시물 세부 정보 표시 사용자 인증 및 권한 제어 PHP 및 SQLite 설치 PHP 및 S를 설치해야 합니다.

    PHP와 SQLite: 긴 연결과 연결 해제 및 재연결을 처리하는 방법 PHP와 SQLite: 긴 연결과 연결 해제 및 재연결을 처리하는 방법 Jul 29, 2023 am 09:05 AM

    PHP 및 SQLite: 긴 연결과 연결 해제 및 재연결을 처리하는 방법 소개: 웹 개발에서 PHP와 SQLite는 일반적으로 사용되는 두 가지 기술입니다. 그러나 긴 연결과 연결 해제 및 재연결은 PHP 및 SQLite를 사용할 때 자주 발생하는 문제 중 일부입니다. 이 기사에서는 PHP에서 긴 연결 문제와 연결 해제 및 재연결 문제를 처리하는 방법을 소개하고 개발자가 이러한 문제를 더 잘 이해하고 해결하는 데 도움이 되는 몇 가지 예제 코드를 제공합니다. 1. 지속적인 연결 문제 PHP를 사용하여 SQLite 데이터베이스에 연결할 때 연결이 오래 걸립니다(Persis

    전체 텍스트 검색 및 인덱싱 전략을 위해 PHP 및 SQLite를 사용하는 방법 전체 텍스트 검색 및 인덱싱 전략을 위해 PHP 및 SQLite를 사용하는 방법 Jul 29, 2023 pm 08:45 PM

    전체 텍스트 검색 및 인덱싱 전략을 위해 PHP 및 SQLite를 사용하는 방법 소개: 최신 애플리케이션 개발에서 전체 텍스트 검색 기능은 여러 분야에서 필수 불가결합니다. 블로그, 뉴스 웹사이트, 전자상거래 플랫폼 등에서 사용자는 키워드를 사용하여 검색하는 데 익숙합니다. 따라서 사용자 경험을 개선하고 더 나은 검색 결과를 제공하려면 적절한 검색 및 색인 전략을 사용하여 전체 텍스트 검색 기능을 제공해야 합니다. 이 기사에서는 PHP 및 SQLite 데이터베이스를 사용하여 전체 텍스트 검색을 구현하는 방법을 살펴보겠습니다.

    PHP 및 SQLite를 사용하여 데이터를 가져오고 내보내는 방법 PHP 및 SQLite를 사용하여 데이터를 가져오고 내보내는 방법 Jul 28, 2023 am 11:43 AM

    PHP 및 SQLite를 사용하여 데이터를 가져오고 내보내는 방법 데이터 가져오기 및 내보내기는 웹 사이트나 애플리케이션을 개발하는 동안 일반적인 작업 중 하나입니다. PHP와 SQLite를 사용하면 외부 파일의 데이터를 SQLite 데이터베이스로 쉽게 가져오고 데이터베이스의 데이터를 외부 파일로 내보낼 수 있습니다. 이 기사에서는 PHP 및 SQLite를 사용하여 데이터를 가져오고 내보내는 방법을 소개하고 해당 코드 예제를 제공합니다. 데이터 가져오기 먼저 가져올 데이터가 포함된 외부 파일을 준비해야 합니다. 이 파일

    See all articles