wordpress搭配sqlite

sqlite作为一个跨平台的数据库,以简洁高效著称。wordpress作为广泛使用的blog系统居然只支持mysql数据库,其他不少blog系统都能支持多数据库,一直都在想要是wordpress配上sqlite多爽啊。甚至想要自己修改wordpress让其搭上sqlite(虽然对于我来说,是近乎不可能的任务)。
不想跟我想法相同的大有人在,不少人都已经实现wordpress+sqlite。这里面最简单的要数wordpress的一个插件pdo-for-wordpress,只需改一点点就可以完成目标。
这里http://wordpress.org/extend/plugins/pdo-for-wordpress/下载插件,把里面的pdo目录和db.php文件直接放在wp-content目录下。再在wp-config.php文件中

define('DB_COLLATE', '');

下方插入

define('DB_TYPE', 'sqlite');

然后就会重新安装wordpress。
wp-content目录下会生成database目录,该目录下有MyBlog.sqlite和.htaccess两个文件。
这就实现了wordpress+sqlite。数据可以通过wordpress自身导入导出功能很方便的导入或是导出。

sqlite的联表查询

使用数据库,需要用到多表联合查询,这是关系数据库的特点。sql查询的join有以下几种:

cross join 是笛卡儿乘积 就是一张表的行数乘以另一张表的行数
left join 第一张表的连接列在第二张表中没有匹配是,第二张表中的值返回null
right join 第二张表的连接列在第一张表中没有匹配是,第一张表中的值返回null
full join 返回两张表中的行 left join+right join
inner join 只返回两张表连接列的匹配项

sqlite的联表查询支持以下几种方式:
0200955153033.gif
left join 、inner join、corss join,其他的方式都等同于以上三种

, == CROSS JOIN
JOIN == INNER JOIN
LEFT JOIN == LEFT OUTER JOIN

php_sqlite

准备用php+sqlite做个小东西,原计划用sqlite3,不过需要PDO扩展支持,不是很方便。而sqlite2是PHP5默认支持的,很多php虚拟机应该能够支持。现在只是学习,性能不是必须考虑的东西,方便第一!

现准备收集一些php_sqlite的资料。

函数(来自官方文档,直接复制没加修改):

sqlite_array_query — Execute a query against a given database and returns an array
sqlite_busy_timeout — Set busy timeout duration, or disable busy handlers
sqlite_changes — Returns the number of rows that were changed by the most recent SQL statement
sqlite_close — Closes an open SQLite database
sqlite_column — Fetches a column from the current row of a result set
sqlite_create_aggregate — Register an aggregating UDF for use in SQL statements
sqlite_create_function — Registers a "regular" User Defined Function for use in SQL statements
sqlite_current — Fetches the current row from a result set as an array
sqlite_error_string — Returns the textual description of an error code
sqlite_escape_string — Escapes a string for use as a query parameter
sqlite_exec — Executes a result-less query against a given database
sqlite_factory — Opens a SQLite database and returns a SQLiteDatabase object
sqlite_fetch_all — Fetches all rows from a result set as an array of arrays
sqlite_fetch_array — Fetches the next row from a result set as an array
sqlite_fetch_column_types — Return an array of column types from a particular table
sqlite_fetch_object — Fetches the next row from a result set as an object
sqlite_fetch_single — Fetches the first column of a result set as a string
sqlite_fetch_string — Alias of sqlite_fetch_single
sqlite_field_name — Returns the name of a particular field
sqlite_has_more — Finds whether or not more rows are available
sqlite_has_prev — Returns whether or not a previous row is available
sqlite_key — Returns the current row index
sqlite_last_error — Returns the error code of the last error for a database
sqlite_last_insert_rowid — Returns the rowid of the most recently inserted row
sqlite_libencoding — Returns the encoding of the linked SQLite library
sqlite_libversion — Returns the version of the linked SQLite library
sqlite_next — Seek to the next row number
sqlite_num_fields — Returns the number of fields in a result set
sqlite_num_rows — Returns the number of rows in a buffered result set
sqlite_open — Opens a SQLite database and create the database if it does not exist
sqlite_popen — Opens a persistent handle to an SQLite database and create the database if it does not exist
sqlite_prev — Seek to the previous row number of a result set
sqlite_query — Executes a query against a given database and returns a result handle
sqlite_rewind — Seek to the first row number
sqlite_seek — Seek to a particular row number of a buffered result set
sqlite_single_query — Executes a query and returns either an array for one single column or the value of the first row
sqlite_udf_decode_binary — Decode binary data passed as parameters to an UDF
sqlite_udf_encode_binary — Encode binary data before returning it from an UDF
sqlite_unbuffered_query — Execute a query that does not prefetch and buffer all data
sqlite_valid — Returns whether more rows are available
记录于此,准备逐渐翻译学习

sqlite数据库

最开始学习PHP编程的时候,一直希望linux下有个能与win下的access数据库类似的小型独立数据库,不需要安装相应的服务,想用就可以直接使用。由于E文有限,当时找了一圈都没发现合适的,也知道一点关于sqlite,但是不透彻。我一直以为sqlite是一种介于大型数据库如mysql与用户界面的一个中间缓存,所以没太多关注,自己做的些小程序都是基于win平台下的php+access,因为不需要用到mysql这种数据库.

SQLite 是 D. Richard Hipp 用 C 语言编写的开源嵌入式数据库引擎。它是完全独立的,不具有外部依赖性。它是作为 PHP V4.3 中的一个选项引入的,构建在 PHP V5 中。SQLite 支持多数 SQL92 标准,可以在所有主要的操作系统上运行,并且支持大多数计算机语言。SQLite 还非常健壮。其创建者保守地估计 SQLite 可以处理每天负担多达 100,00 次点击率的 Web 站点,并且 SQLite 有时候可以处理 10 倍于上述数字的负载。

SQLite 对 SQL92 标准的支持包括索引、限制、触发和查看。SQLite 不支持外键限制,但支持原子的、一致的、独立和持久 (ACID) 的事务(后面会提供有关 ACID 的更多信息)。这意味着事务是原子的,因为它们要么完全执行,要么根本不执行。事务也是一致的,因为在不一致的状态中,该数据库从未被保留。事务还是独立 的,所以,如果在同一时间在同一数据库上有两个执行操作的事务,那么这两个事务是互不干扰的。而且事务是持久性的,所以,该数据库能够在崩溃和断电时幸免 于难,不会丢失数据或损坏。SQLite 通过数据库级上的独占性和共享锁定来实现独立事务处理。这意味着当多个进程和线程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进 程或线程向数据库执行写入操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。
当然还有个选择是http://www.sleepycat.com,不过还不大清楚Berkeley DB的详细情况,用的人好像不多。