小布老师《SQLite快速入门视频教程》的笔记

前端之家收集整理的这篇文章主要介绍了小布老师《SQLite快速入门视频教程》的笔记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

看了小布老师的《sqlite快速入门视频教程》后整理的笔记


第一讲

什么是sqlite?
为什么要用?
如何获得?如何安装?
如何管理?
如何使用Perl存取sqlite的数据;
如何用C或C++;
sqlite不支持sql特性;

自包含,没有服务器,零配置,支持事务。

sqlite的数据库就一个文件包括:多表、索引、触发器、和视图;
sqlite直接读写磁盘上的文件

事务的四个特性(ACID)atomic(原子的)、consistent(一致的)、isolated(独立的)、durable(持久的)
实现大部分sql92标准
整个数据库存储在一个跨平台的数据文件上;
支持数据库大小能够达到TB,支持GB的字符串或BLOBs(二进制信息)。
所有功能都编译进去250KB,选择一些特性可以缩小到150KB;
sqlite不支持并发,不是两个进程同时访问,独占式的
代码质量高,99%的代码都经过测试;
自包含的意思,就是不依赖外界的任何库;

代码可以应用在任何领域,包括商业领域;

sqlite的设计目标是一切从简:
管理方便;
使用方便;
容易嵌套到其它程序;
维护和定制容易;

sqlite的目的不是取代ORACLE,而是用于取代fopen();

著名使用sqlite的客户:
Adobe
苹果
firefox
GE
google
微软
麦咖啡
skype

sqlite能够很好工作的场景;
保存应用程序的配置信息;
嵌入式设备和应用程序;
小网站,原型系统。如果大网站并发性高,还是建议用MysqL
取代,随意的混乱的磁盘文件
内部或临时的数据库
命令行的数据分析工具;
做演示或者测试的时候;
阅读sqlite的源码,学习数据库技术;
sql语言的新特性进行扩展;

播布客的后台系统用的是MysqL数据库


第二讲

管理工具
源码级别安装
已经编译好的可执行文件,for windows或linux;
下载源码自己编译;

代码
amalgamation版本,把很多细小的东西合并成一个大家伙。
linux下演示怎么编译;

操作系统是CentOS5.2
chmod +x sqlite3-3.6.3.bin
./sqlite3-3.6.3.bin
和windows下一样,进入sqlite shell

tar zxvf sqlite-amalgamation-3.6.3.tar.gz

代码安装的三部曲:
configure;
make;
make install;

通常都提供README和INSTALL文件,都是文本文件

sqlite的源码安装过程:
./configure --prefix=/opt/sqlite3
--prefix 表明目标文件安装在什么目录下,不指定安装在缺省目录下/usr/local/之类的。
gcc一定要装

输入make开始编译;

输入make install,把文件copy到目标目录下;

安装之后,去/opt/sqlite3下看看,就三个目录:bin、include、lib
标准的软件布局结构
lib下有静态库和动态库,推荐用动态库

sqlite3.exe是shell.c,2千多行源代码实现了简单的命令行工具;
动态库是sqlite3.c

sqlite3工具的功能
创建数据库
执行sql命令;
查询数据库的表结构,或其它对象的结构;
导入和导出数据;
改变输出格式;
使用在shell脚本中;学会shell自动化脚本编程;

创建数据库
sqlite3 数据库文件

输入sql语句的时候,结束一定要用分号,这也是sql的标准;

linux下把sqlite加入PATH路径,这样在任何路径下都能够使用sqlite3;
# echo $PATH
cp /opt/sqlite3/bin/sqlite3 /usr/local/bin

系统表sqlITE_MASTER,存放database schema
不能对sqlITE_MASTER表进行DROP TABLE,UPDATE,INSERT,DELETE操作

临时表存储在sqlite_temp_master中。
sqlite除了数据库文件之外,在运行过程中会产生一些临时文件

sqlite3只是一个壳,真正执行,还是会调用sqlite的库;可以研究一下。
sqlite3本身的命令以“.”开始,.help;

sql PLUS有三大类命令:
sql命令,提交给数据库引擎;
PL sql 命令,提交给数据库引擎;
sql PLUS本身的命令,本地执行;


第三讲

sqlite3本身的命令
.help

改变输出格式的命令;
csv,以逗号分隔的记录;
.mode命令在8种显示格式中进行切换;
默认是list模式,默认的分隔线是“|”;
list模式特别适合用于AWK;
line模式,每列都单独一行,列名等于列值,记录之间有空行;
column模式,与sql PLUS中的缺省模式相同;.header on 打开头,.header off 关闭头;此模式可读性比较好;
.width 3 30,第一列最长3,第二列最长30;
insert模式,产生INSERT的sql语句,挺有意思;.mode insert 目标表名;
html模式,XHTML table,适合做CGI处理;

list模式一行一条记录,每列竖线分隔;

linux,unix的设计思想是小而美,一个工具只干一件事情。通过管道把命令串联起来;

默认查询结果是写到屏幕上,也可以写到一个文件中。使用.output命令;
.output stdout,输出又回到了屏幕上;

查询Database Schema,就是表结构、数据库结构;
.tables,可以看数据库中的所有表;
.indices,可以列出一个指定表的所有索引;
.schema,创建表和索引时候的create语句,也可以在后面指明表名;
.databases,查看当前打开的所有数据库,通常是一个main一个temp;


第四讲

把整个数据库导成ASC文本文件功能
.dump命令;导出的sql语句,可以放到ORACLE中去执行;
一个生成数据库归档copy的命令;
$ echo ".dump" | sqlite3 ex1 | gzip -c > ex1dmp.gz
重构数据库的命令:
zcat ex1dmp.gz | sqlite3 ex2
sqlite3中提取数据,导到其它流行的数据库中;

.explain命令
EXPLAIN命令,就是查询一条sql语句最终解析出来的执行计划。ORACLE中也有,对sql语句调优很有用;
一条sql语句的处理过程:解析、分析、执行,看看sql语句的效率;
> .explain
> explain select * from t;

.timeout命令
默认超时时间是0,查询一张表或索引,发现表或索引被锁定,就立刻返回,不等待;
sqlite只适合一个进程访问,不适合多进程的并发访问;

在SHELL中使用sqlite3的命令;
sqlite3命令的输入和输出都可以重定向,常用的使用模式;
sql语句中,除了分号结束,用GO或者/也可以执行;
# sqlite3 demo.db "select * from t"

一个简单的shell脚本
shell脚本的开头一定要有一个"#!",这是规定。
成对的EOF之间的东西都被原样导入sqlite中;here document技术;
shell里面调用交互式程序的方法

如何使用Perl脚本访问sqlite数据库
Perl,老牌语言,有20年历史,但在走下坡路,被python或者ruby渐渐取代;
Perl在北美比较流行;
工作中使用的工具是Perl+shell;
把Perl形容为瑞士军刀,但可读性差;
ruby适合web快速开发;
perl对系统管理和生物信息处理比较厉害;

windows平台下 ActiveStat Perl www.activestate.com 免费
Linux/Unix www.perl.org

DBI
运行一段小程序,确定perl是否安装了对sqlite的支持
perl需要sqlite的驱动,来访问sqlite的数据库,如果没装,还需要安装一下;


第五讲

本讲主题,如何使用perl和C语言访问sqlite3数据库

使用perl访问sqlite数据库
检查perl是否安装了sqlite驱动程序的代码
perl访问数据库都用DBI接口,在DBI之下有DBD(数据库驱动),分别开发支持MysqL,oracle等;

一个基本的插入操作代码演示;
先和数据库建立连接;
做些准备工作;
执行语句;
判断是否出错;
提交;
断开;

一个基本的查询操作代码演示:
查询语句执行的时候,先执行prepare;
后执行
提取结果集,先把每列绑定到变量上,然后在while循环中进行fetch;
完成,释放结果集;
断开连接;

perl处理文本文件功能强大,又能操作数据库

使用C语言访问sqlite
两个对象
数据库连接对象:sqlite3;控制连接;
语句执行对象:sqlite3_stmt;控制sql语句;

常用的六个接口函数,操作sqlite的核心函数
sqlite3_open()
sqlite3_prepare()
sqlite3_step(),类似fetch功能
sqlite3_column()
sqlite3_finalize()
sqlite3_close(),断开连接;

sqlitedemo.c
#include

sqlite3_errmsg(db);获得失败的原因;

回调函数的作用;
执行完查询自动调用回调函数,把查询的结果打印出来。

编译程序要用到头文件和lib库。这次使用静态库。

# gcc -v 看看有没有gcc
编译命令
# gcc -I/opt/sqlite3/include -L/opt/sqlite3/lib -lsqlite3 sqlite3demo.c -o dbtest
-I头文件搜索路径
-L库文件搜索路径
-l库文件

sqlite的局限性:
官方网站上有大小的支持
不支持外键约束;
对触发器的支持不是很完整;
对ALTER TABLE的支持不是很完整;
不支持嵌入式事务;
不支持有连接和FULL OUTER JOIN.
不支持视图的写操作;
不支持GRANT和REVOKE;

sqlite作为单用户,单机版的数据库很不错。

猜你在找的Sqlite相关文章