2009年5月26日星期二

Blank/本贴留空

来用贴子热闹一下,这里有点安静到寂寞了,呵呵。
<clickme>
本贴无定型态!
{
随手写写画画的,有点像街头涂鸦了。
不过这本来就是自己的纸张嘛。
本月留了几个话题:
.批判非发现暗的,而为有可留下珍惜的 - 怀疑下可坚信的
.工业化下的发展,抛给史迹馆勇气与伤心
.纯感与编制下不同的文字
.宗教对人的引导与压制(...)
只是有了想法在某些方面,或者说是关注涉及了。
也有作了额外具体的文字,但不觉合适现在再次在这里有值得展开的。
之前写过一个以“使命”为话题的,是包括个人对人生的憧憬和责任,以及社会对个体行为的限制和无奈两方面。不过当时是侧重迷惘(即在思考的意思)来写了,仅取了这个话题而已。
“成长”也是个有趣的话题,当然这不是热情或理想被消磨的过程,这是后来写的一篇。当时是从不同出发来往这一个话题做想,不过留于现在,这倒是最宝贵并可珍藏的(即被概括下不因淡忘内容而影响的,觉得有的形容词挺好看的)。
Ok,这就是借题的意思了。不是在为一个个成绩而坚持的想法,那样感觉也是有得有失的样子,不过或许就本该如此的样子。总之,心情是很虚但又很实在的(像把这句话写下的感觉)。
本贴够随意了,话说有我比较反感的一类贴(还没忍心贴出,有些关于这个话题并亲自作试验的一贴)。选择性贴会有留下的是满意的之类想法,不过对此想法本身不作评价(其实此句也是说明了态度了的)。
在想叙述文字有叙述该行为本身的味道,而不仅可作为容器。不过设想是带可选择,而选择该行为本身也是体现价值的当时。随口而言也就不在于想法的来源方式了。~然后,明显地,话开始乱了。闪几下的无法特别留意的,算有痕迹了。
注:该月是不打算再有新贴,但是还是来填了一下贴数。这就不打算以日程来发贴了。
最后再回顾一下自己对本博的定位,资源与引发。(以前写过这句,记得还没贴出。这次行为有违背当初意愿了,本贴空白,标题已经写明了,可选择性无视的。主要是没留什么特别的。)
}新的一个月喽~嘻嘻
,写于_
呼~吸~

(以病句迎合思维?乱~也太随手了。)

2009年5月1日星期五

搭建数据库系统(SQLite+C)~基础篇


SQLite
http://www.sqlite.org/
License:public domain
当前版本3.6.13


数据库概念
数据库的产生是随着人们处理的数据变得庞大和复杂,单纯以人工或文件形式的管理已无法很好的满足需求。运用不同数据库管理系统(比如本篇的SQLite),建立基于数据库的硬件软件和相关人员的结合的数据库系统。数据库的数据模型是对实体模型信息化的描述,如网状,层次,关系模型。其中在各数据库中关系模型被广泛的采用,将现实中的实体与关系,运用关系代数,建立包含多张有列与项的数据表。此外,根据表中列的函数依赖关系,可划分成不同级别的范式。

SQLite特点
单文件数据库
无需配置和安装服务进程
小巧高效
数据库系统与数据库文件跨平台
动态数据类型
变长记录
代码公开协议开放
SQL语句编译为虚拟代码
可以自定义扩展
(也意味不适用于C/S,高容量,特别巨大或高并发的数据库)

SQL基础提示
创建表
CREATE TABLE <表名>(<列名>[,<列名n>]);
列可选参数 <列名> 参数 [参数]
数据类型 <类型名>[(精度)] TEXT|NUMERIC|INTEGER|REAL|NONE
数据将被储存为的类型是 NULL|INTEGER|REAL|TEXT|BLOB
(注 SQLite为除整数主键其余为动态类型,会根据类型名称中出现的字符串(比如INT,FLOA,CHAR,BLOB...)限定储存类型)
主键 PRIMARY KEY
非空 NOT NULL
自动递增 AUTOINCREMENT
插入记录
INSERT INTO <表名> values(<数据>[,<数据n>]);
查询记录
SELECT *|<列名>[,<列名n>] FROM <表名>;
可选参数
条件 WHERE <表达式>
排序"ORDER BY <列名> [ASC|DESC]"
分组 GROUP BY <列名> [HAVING <条件表达式>]
条数 LIMIT
关联 <表名> JOIN <表名>
可以嵌套使用查询语句
删除记录
DELETE FROM <表名> WHERE <条件表达式>;
更新记录
UPDATE <表名> SET <列名>=<数据> [WHERE <条件表达式>];
创建索引 用以提升数据表操作速度
CREATE INDEX <索引名> ON <表名>(<列名>);
创建视图 包含以储存查询的虚表
CREATE VIEW <视图名> AS
删除数据库对象
DROP TABLE|INDEX|VIEW <对应名称>
触发
事务 进行大量操作,确保完整性
BEGIN TRANSACTION;COMMIT;ROLLBACK;
VACUUM 整理已移除数据的空间
支持函数
http://www.sqlite.org/lang_corefunc.html
参见开发文档中"SQL As Understood By SQLite"
SQLite能理解的SQL

SQLite命令行
建立数据库
sqlite3 <文件名> [<语句>](需先下载"sqlite3.exe"或"sudo apt-get install sqlite3")
此时在交互模式,可用".help"查看帮助。
查询";"结尾,可以换行,用"--"/"/**/"注释行和块
".dump"用于以SQL格式将数据库输出(可以重定向)
分析工具 sqlite3_analyzer

图形界面工具
sqlitebrowser 跨平台,可用于表的创建和显示修改
其他管理工具(For Win) sqliteadmin,SQLiteSpy


C语言接口
示例 http://www.sqlite.org/quickstart.html
说明 http://www.sqlite.org/cintro.html
参考 http://www.sqlite.org/capi3ref.html
示例在ubuntu810下编译通过,需安装包"libsqlite3-dev",编译增加参数"-lsqlite3"。

练手
人员管理系统,人员有自身属性或归于某一分类,同时某一分类也在另一表中存储它的属性,大体构想如此。
不过下面是写一个电子辞典(我取名"Dictite",暂无实用价值),作用是用来查英汉的单词解释,数据是单词和对应解释。
数据表有两列,为"word","expl",都是字符串,例句可以放在单独的表中。
下一步,开始写代码(有空再慢慢补,尚未调试)

/* A Simple Dict Prog Example V0 by ee.zsy Published Under BSD License
"gcc -Wall -O2 -o Dictite Dictite.c -lsqlite3"
put "Dictite word expl"
get "Dictite word"
"CREATE TABLE DictiteMain(word CHAR,expl CHAR);"
*/

--感觉用"Dictite put word expl"语法繁琐些但可以减少输入错误。
编译打包加说明文档即可发布,日后可根据需求和反馈维护或继续开发。

参考
http://www.sqlite.com.cn/MySqlite/4/523.Html
http://www.yuanma.org/data/2008/1212/article_3407.htm
http://www.2ky.cn/h/149/4110.html
http://www.lupaworld.com/action-viewstutorial-itemid-9338.html
wikipedia.org
官方文档

其他
另一个著名的嵌入式数据库是Berkeley DB,以被Oracle收购。
MySQL,目前在网络上流行的数据库服务器,已用于众多网站。
目前来看本文问题不少,汗一下。
第一次发布时间:09.5.10
数据结构SQLite是基于B+Tree。