今天更换公司的开发服务器时用到了这两条命令,做个记录先。
如何导出PostgreSQL数据库中的数据:
$ pg_dump -U postgres -d mydatabase -f dump.sql
导入数据时首先创建数据库再用psql导入:
$ createdb newdatabase $ psql -d newdatabase -U postgres -f dump.sql
Wordpress的官方文档对数据库的结构描述得并不充分,索性自己来分析一下。首先从整体结构入手。 下面是2.0.5版的数据库结构图(E-R图)。为了节约篇幅,这里仅列出了主键和外键。 图中菱形表示1:n的关系,白色部分为1,黑色部分为n。

Wordpress共有10个表,按照功能大致分为四类。
- user: 用户信息,包括wp_users表和wp_usermeta表。
- post: 文章及评论信息,包括wp_posts、wp_postmeta、wp_comments、wp_post2cat以及wp_categories五个表。
- link: 链接信息,包括wp_links表和wp_linkcategories表。
- option: 全局设置信息,包括wp_options表。
个人认为这个数据库有两个冗余的地方。一个是wp_post2cat表中的主键rel_id,其实可以不要rel_id,而使用post_id和category_id两列作为主键; 另一个是wp_options表,option_id列为自动增长列,仅使用该列即可作为主键,而不需要option_id、blog_id、option_name三列联合做主键。
另外,表的命名规则也很有意思。基本规则总结如下:
- 保存对象的基本属性,命名为 wp_objects,使用复数(如 wp_posts,wp_comments);
- 保存对象的扩展属性,命名为 wp_objectmeta,使用单数(如wp_postmeta,wp_usermeta);
- 多对多关系,命名为 wp_a2b,其中a和b分别为多对多关系两端的对象名的缩写(如wp_post2cat)。
Oracle 10g2默认仅支持redhat enterprise系列和 SuSE 系列的几个版本的 Linux。 在 Ubuntu 上安装 Oracle 需要做些设置。下面是安装过程。
阅读全文 »Oracle管理中常用的SQL语句。
阅读全文 »
Oracle使用过程中经常会用到的SQL语句。
阅读全文 »
Oracle中试图对一个子查询进行更新时可能会出现ORA-01779错误。该错误的内容为:
ORA-01779: cannot modify a column which maps to a non-key-preserved table阅读全文 »
简单介绍一下使用tkprof工具调整Oracle SQL语句性能的方法。
阅读全文 »
启动时不连接服务器。
sqlplus /nolog
连接服务器的命令:
connect username/password@hoststring
设置行宽为1000字符。
set line 1000
设置列group_name的宽度为30字符。
col group_name format a30
启动外部编辑器编辑sql语句。
ed
设置ed命令启动的外部编辑器为vim。
define _EDITOR=vim
使用Windows下的gvim作为编辑器时应当加上-f参数。
define _EDITOR="gvim -f"
设置每页显示200条记录。
set pagesize 200
登录时自动执行的SQL脚本。
$ORACLE_HOME/sqlplus/admin/glogin.sql
各个用户自己的登录脚本。Oracle会在执行完glogin.sql之后执行该文件。搜索顺序为:当前目录->$SQLPATH。
login.sql
今天一个朋友问我,一个表有两个字段mac和ip,如何找出所有的mac相同而ip不同的记录?想了半天写出了下面的这个SQL语句。
mysql> select * from ip;
+-----+-----+
| mac | ip |
+-----+-----+
| abc | 123 |
| def | 456 |
| ghi | 245 |
| abc | 678 |
| def | 864 |
| abc | 123 |
| ghi | 245 |
+-----+-----+
7 rows in set (0.00 sec)
mysql> SELECT DISTINCT a.mac, a.ip
-> FROM ip a, ip b
-> WHERE a.mac = b.mac AND a.ip <> b.ip ORDER BY a.mac;
+-----+-----+
| mac | ip |
+-----+-----+
| abc | 678 |
| abc | 123 |
| def | 864 |
| def | 456 |
+-----+-----+
4 rows in set (0.00 sec)
NULL值不等于0,也不等于空,它表示该值不定。
任何运算(加减乘除、字符串连接等)的运算数中包括NULL值时,整个表达式的值即为NULL。使用单行函数对NULL值进行处理,得到的结果也为NULL(NVL等函数除外)。
但是NULL值的布尔运算结果并不一定是NULL,例外的情况为,FALSE AND NULL 结果为FALSE,TRUE OR NULL 结果为TRUE。这是因为在AND运算时只要有一个运算数为FALSE结果即为FALSE,即使另一个运算数为NULL,结果也是一定为FALSE的。反之OR运算中,只要有一个运算数为TRUE,结果即为TRUE。
分组函数均忽略NULL值。
排序时,NULL被看作是最大的值,即正序时NULL显示在最下方,逆序时NULL显示在最上方。
处理NULL值的函数有如下几个:
- NVL(参数1, 参数2):如果参数1不为NULL,则返回参数1;如果参数1为NULL,则返回参数2
- NVL2(参数1, 参数2, 参数3):如果参数1不为NULL,则返回参数2;如果参数1为NULL,则返回参数3。该函数的返回值的类型总是与参数2相同,当参数1为NULL时,Oracle会将参数3转换成参数2的数据类型之后再返回。
- NULLIF(参数1, 参数2) :如果参数1等于参数2,则返回NULL;如果参数1不等于参数2,则返回参数1。
- COALESCE(参数1, 参数2, ..., 参数n):返回参数1到参数n中第一个不为NULL的值。
