数据库学习笔记。
基础知识
乐观锁与悲观锁
- 悲观锁(pessimistic lock):
每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成之后进行数据解锁。
由于对数据进行加锁,期间对该数据进行读写的其它线程都会等待。
适用场景:适合写操作频繁的场景。如果出现大量的读取操作,每次读取的时候都进行加锁,会增加大量的锁开销,降低了系统的吞吐量。
- 乐观锁:
每次获取数据的时候,都不会担心数据被修改,所以每次获取数据的时候都不会进行加锁,但是在更新数据的时候需要判断该数据是否被别人修改过。如果数据被其它线程修改过,则不进行数据更新,否则进行更新。
由于数据没有进行加锁,期间该数据可以被其它线程进行读写操作。
适用场景:适合读操作频繁的场景。如果出现大量的写操作,数据发送冲突的可能性较大,为了保证数据的一致性,应用层需要不断地重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。
总结:两种锁各有优缺点,读取频繁使用乐观锁,写入频繁使用悲观锁。
常用SQL
将时间戳字段转换为年月日时分秒格式显示
SELECT happen_time, strftime('%Y-%m-%d %H:%M:%S', datetime(happen_time, 'unixepoch')) AS formatted_datetime from table_XXX;
sqlite
Windows下编译
- 下载SQLite3
sqlite-amalgamation-3230100.zip
sqlite-autoconf-3230100.tar.gz
sqlite-doc-3230100.zip
- Windows下编译SQLite3
cd sqlite-autoconf-3230100
nmake /f Makefile.msc
基本语法
-- 注释
-- 创建DB
E:\SQLite3.23.1\sqlite-autoconf-3230100>sqlite3 Student.db
SQLite version 3.23.1 2018-04-10 17:39:29
Enter ".help" for usage hints.
-- 打开DB
sqlite> .open Student.db
-- 查看所有DB
sqlite> .databases
main: E:\SQLite3.23.1\sqlite-autoconf-3230100\sqlite-autoconf-3230100\Student.db
-- 5种基本类型:integer, real, text, blob, null
integer:可以存储long long类型的数据
-- 查看所有表
sqlite> .tables