介绍了SQLite,让开发人员和系统管理员

当他们需要一个关系型数据库,软件开发人员和系统管理员往往选择MySQL要么PostgreSQL。对于更轻和更简单的解决方案,但是,开发商应该考虑SQLite。它被用在很多地方开源和商业产品这SQLite的被认为是世界上最部署SQL数据库引擎。本文将帮助您开始使用SQLite和你的程序或脚本中使用它。

与大多数SQL数据库不同,SQLite没有单独的服务器进程;数据库管理系统包含在一个小型的C库中。包含多个表、索引、触发器和视图的完整数据库只存在于一个文件中。SQLite不需要配置和设置,也几乎不需要维护。甚至数据库备份都是简单的文件副本。

系统要求是最小的太;低功率设备如智能手机,视频游戏和便携式媒体播放器可以存储大量数据图书馆SQLite数据库。尽管其占用空间小的数据库工具大部分SQL-92标准的,因此如果您使用过其他SQL数据库,您应该能够立即使用SQLite。它的简单性也使它成为SQL初学者的一个很好的学习工具。

目录中许可SQLite的源代码公共区域可以用于任何目的。该项目保持高质量和可靠性。源代码的大部分用于测试和验证。即使在系统或电源故障情况下,也保证数据完整性,因为SQLite使用交易。

对于本文,我们将使用sqlite3的,为新部署推荐的版本;在与旧应用程序的兼容性方面,SQLite2仍然可用。SQLite的包可用于所有GNU/Linux发行版、BSDs和Windows,并且已预先安装在CentOS的、Mac OS X和OpenBSD(自版本5.2以来)。如果它没有安装在您喜欢的发行版中,从源代码进行安装是很简单的。在安装期间,SQLite可以通过省略特性来针对资源受限的环境进行优化。

SQLite为大多数编程语言提供绑定。图书馆可以嵌入式直接进入C和C ++程序。蟒蛇自从2.5版本已经捆绑了SQLite和PHP自带SQLite2和SQLite3的两个内置。对于Perl您需要安装DBIDBD :: SQLite的CPAN模块。一个SQLite宝石适用于红宝石。开发人员应该阅读的SQLite的快速入门指南为了更好地理解软件的编程接口(API)。

由于不需要启动服务器进程,所以在运行命令安装软件之后,可以直接从命令行创建和使用数据库sqlite3的使用数据库作为参数的文件名:

$ sqlite3的servers.sqlite3 SQLite的版本3.7.14.1 2012年10月4日十九时37分12秒进入“帮助”中的说明输入与终止SQL语句‘;’sqlite的>

如果该文件不存在,则创建它。您可以使用您的数据库中的任何文件扩展名;我喜欢.sqlite3,但.db的也很常见。您可以输入在SQL语句sqlite的>提示,以及元命令,其用于执行管理操作和调整数据库设置。类型。救命可用元命令的完整列表。

让我们开始寻找在SQLite的是如何通过创建一个小桌子与五列到我们的网络中的服务器存储的信息:

sqlite>创建表服务器(主机名文本主键,IPAddress文本,角色文本,状态文本,时间戳INT);sqlite > .tables服务器

这是相当标准的创建SQL语句,用分号结束。SQLite支持多种数据类型:空值为空,整数真实对于有符号整数和浮点值,文本文本字符串,并BLOB对于二进制文件。不像其他的SQL数据库,SQLite的用途动态类型-值的数据类型与值本身相关联,而不是与其容器相关联。这意味着您实际上可以在任何列中输入任何值,而不管预定义的类型是什么。

.tablesmeta-command列出数据库中可用表的名称。元命令不需要任何终止字符。

你现在可以表中的一些记录,或者更好的是,用shell脚本自动化这个过程:

# !/bin/ sh#警告:此脚本容易被SQL注入。在真实的脚本和应用程序中,您应该始终验证用户输入。#我们的数据库_DB="服务器。sqlite3的" # read hostname from stdin printf "Hostname: " read _HOSTNAME # read ip address from stdin printf "${_HOSTNAME}'s IP Address: " read _IP # read server's role from stdin printf "${_HOSTNAME}'s role: " read _ROLE # INSERT data in database sqlite3 $_DB "INSERT INTO Servers(Hostname, IPAddress, Role) VALUES('${_HOSTNAME}', '${_IP}', '${_ROLE}')"

运行此脚本两次,用几条记录填充数据库:

$ ./server_add.sh主机名:MX1 MX1的IP地址:1.2.3.4 MX1的作用:邮件$ ./server_add.sh主机名:WWW1 WWW1的IP地址:2.3.4.5 WWW1的角色:网络

sqlite3的命令就可以把它作为文件名之后的第三个参数上运行我们的数据库中的单个SQL语句。你可以忽略它传递到时终止语句都以分号sqlite3的经常:

美元sqlite3服务器。sqlite3的"SELECT * FROM Servers" mx1|1.2.3.4|Mail|| www1|2.3.4.5|Web||

您可以以这种方式创建shell脚本自动化不同的系统管理任务,甚至可以创建简单的程序和原型。

下面的示例使用我们创建的数据库,并扩展了以前的脚本的功能。从cron定期运行,这Perl脚本检查我们的网络服务器和更新数据库中的每个服务器的列状态和时间戳。

!#在/ usr / bin中/ perl的包膜使用严格的;使用警告;使用DBI;#我们的数据库我的$ DB = “servers.sqlite3”;#连接到数据库我$胸径= DBI->连接( “DBI:SQLite的:$ {}分贝”,民主基金,民主基金,{RAISEERROR => 1})或死“无法连接到数据库:$ DBI ::errstr“;#服务器检查功能子server_check {我的($主机名,IP $,$角色)= @_;打印“添加基于主机名,IP地址和服务器角色\ n检查逻辑”;返回1;}#从数据库读取的所有数据作为一个数组引用我的$服务器= $ dbh-> selectall_arrayref( “SELECT * FROM服务器”);#解析数据并更新数据库的foreach我的$服务器(@ $服务器){#保存每个行作为局部变量我($主机,$ IP,$的作用,$地位,$时间戳)= @ $服务器列的值; # run server check function for current row my $rc = server_check($hostname, $ip, $role); # evaluate the result and update status if($rc > 0) { $status = 'good'; } else { $status = 'bad'; } # update the database with server status and the current # date (in epoch :) my $sth = $dbh->prepare( "UPDATE Servers SET Status = ?, Timestamp = ?" ); $sth->execute($status, time()); } # disconnect from the database $dbh->disconnect();

这个程序缺乏对实际检查的逻辑始终验证正确的。您可以轻松地在添加检查server_check子程序和LWP,旋度,或其他工具。

要查看更结构化的方式让我们切换到列模式表的内容,使表头的表现:

$ sqlite3的servers.sqlite3 sqlite的> .mode列sqlite的>上的SQLite .headers> SELECT * FROM服务器;主机名ip地址角色地位时间戳---------- ---------- ---------- ---------- ---------- MX1 1.2.3.4邮件良好1354617393 WWW1 2.3.4.5网页不错1354617393

我们的下一个示例是一个使用内置的PHP编写的小型web应用程序PDO扩展访问数据库。PDO采用了类似的方法来Perl的DBI模块,这是我们在前面的例子中使用。他们都提供了数据库无关的接口,这意味着你可以在未来与次要代码修改切换到不同的SQL数据库。从一个支持PHP的Web服务器提供服务,下面的程序使我们的服务器数据库表为一个HTML表格。

<?PHP尝试{/ *打开数据库* / $ DB = 'servers.sqlite3';$胸径=新PDO( “sqlite的:$ DB”);/ *取数据* / $服务器= $ dbh->制备( “SELECT * FROM服务器”);$服务器 - >执行();}赶上(例外$ E){模具($ E);}?> <!DOCTYPE HTML>   <标题>服务器状态    <日>主机名 <日> IP地址
状态 上次检查 <?PHP的/ *本数据库中的数据作为表* /,而($服务器= $服务器 - > fetchObject()):?>
主机名;?> 的IPAddress?;?> 状态?;?> 时间戳)?; ?>

一些GUI和基于Web的应用程序可以帮助你管理你的SQLite数据库。我最喜欢的基于web的SQL管理工具管理,它支持MySQL、PostgreSQL、Microsoft SQL Server和Oracle以及SQLite。

您可以在大型项目(如web应用程序)中使用SQLite来保存系统资源,但是您应该知道它的局限性。SQLite支持来自多个进程的同步访问,并提供了自己的锁定机制,但是传统的客户端/服务器数据库引擎,如PostgreSQL,提供了更高级别的并发性。SQLite还缺乏用户身份验证和访问控制;它仅依赖文件系统权限来进行数据库访问控制。数据库复制等企业级特性不可用。

如果你的项目跨出你当前的SQLite数据库或者你需要切换到一个客户机/服务器的SQL数据库,你可以很容易地SQLite数据库转换为纯文本文件用以下命令

$回声 '使用.dump' |sqlite3的servers.sqlite3> ServersDB.sql

编辑输出文本文件,并将其适应与其他服务器兼容的架构后,您可以在其他数据库导入。例如,在MySQL:

$中mysqladmin -u根-p创建OurNetwork $的MySQL -u根-p OurNetwork 

SQLite被设计为快速、稳定和紧凑,它擅长于实现这些目标。请随意修改本文中的代码示例,以试验数据库并创建您自己的项目。

加入对网络世界的社有个足球雷竞技app区Facebook的LinkedIn对那些顶级心态的话题发表评论。

版权©2012Raybet2

IT薪资调查:结果在