WordPress使用MySQL数据库,数据库表设计非常合理,值得学习研究。

米扑博客,作为一个资深开发者,有必要掌握WordPress数据库的基本构造,并在自己的插件或主题中使用他们。

本文以WordPress 4.8版本为例,WordPress一共有以下11个表,这里加上了默认的表前缀 wp_ 

wp_commentmeta            存储评论的元数据
wp_comments                  存储评论
wp_links                           存储友情链接(Blogroll)
wp_options                       存储WordPress系统选项和插件、主题配置
wp_postmeta                    存储文章(包括页面、上传文件、修订)的元数据
wp_posts                          存储文章(包括页面、上传文件、修订)
wp_terms                          存储每个目录、标签
wp_term_relationships:    存储每个文章、链接和对应分类的关系
wp_term_taxonomy           存储每个目录、标签所对应的分类
wp_usermeta                     存储用户的元数据
wp_users                           存储用户

米扑博客的数据表结构在近八年的过程中,已经发生了一些改变,贴出米扑博客的数据表(部分)

show tables;
+----------------------------+
| Tables_in_wordpress        |
+----------------------------+
| sae_checker_92_2013112914  |
| wp_baidusubmit_sitemap     |
| wp_baidusubmit_urlstat     |
| wp_commentmeta             |
| wp_comments                |
| wp_diggc_log               |
| wp_gallery_galleries       |
| wp_gallery_galleriesslides |
| wp_gallery_slides          |
| wp_links                   |
| wp_mobilepress             |
| wp_newsletter              |
| wp_newsletter_emails       |
| wp_newsletter_stats        |
| wp_options                 |
| wp_postmeta                |
| wp_posts                   |
| wp_ratings                 |
| wp_share                   |
| wp_term_relationships      |
| wp_term_taxonomy           |
| wp_termmeta                |
| wp_terms                   |
| wp_usermeta                |
| wp_users                   |
+----------------------------+
25 rows in set (0.09 sec)

 

在WordPress的数据库结构中,存储系统选项和插件配置的 wp_options 表是比较独立的结构,

在后文中会提到,它采用了key-value模式存储,这样做的好处是易于拓展,各个插件都可以轻松地在这里存储自己的配置。

 

wp_posts,wp_comments,wp_users 则是三个基本表加上拓展表的组合

以wp_users为例,wp_users已经存储了每个用户会用到的基本信息,比如 login_name、display_name、 password、email等常用信息

desc wp_users;
+---------------------+---------------------+------+-----+---------------------+----------------+
| Field               | Type                | Null | Key | Default             | Extra          |
+---------------------+---------------------+------+-----+---------------------+----------------+
| ID                  | bigint(20) unsigned | NO   | PRI | NULL                | auto_increment |
| user_login          | varchar(60)         | NO   | MUL |                     |                |
| user_pass           | varchar(255)        | NO   |     |                     |                |
| user_nicename       | varchar(50)         | NO   | MUL |                     |                |
| user_email          | varchar(100)        | NO   | MUL |                     |                |
| user_url            | varchar(100)        | NO   |     |                     |                |
| user_registered     | datetime            | NO   |     | 0000-00-00 00:00:00 |                |
| user_activation_key | varchar(255)        | NO   |     |                     |                |
| user_status         | int(11)             | NO   |     | 0                   |                |
| display_name        | varchar(250)        | NO   |     |                     |                |
+---------------------+---------------------+------+-----+---------------------+----------------+
10 rows in set (0.00 sec)

但如果我们还要存储一些不常用的数据,最好的做法不是去在表后加上一列,去破坏默认的表结构,而是将数据存在wp_usermeta中

desc wp_usermeta;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| umeta_id   | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| user_id    | bigint(20) unsigned | NO   | MUL | 0       |                |
| meta_key   | varchar(255)        | YES  | MUL | NULL    |                |
| meta_value | longtext            | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

wp_usermeta这个拓展表和wp_options表有类似的结构,我们可以在这里存储每个用户的QQ号码、手机号码、登录WordPress后台的主题选项等等。

 

比较难以理解的是term,即wp_terms、wp_term_relationships、wp_term_taxonomy

在WordPress的系统里,我们常见的分类有文章的分类、链接的分类,

实际上还有标签TAG,它也是一种特殊的分类方式,我们甚至还可以创建自己的分类方法。

WordPress将所有的分类及分类方法、对应结构都记录在这三个表中。

wp_terms 记录了每个分类的名字以及基本信息,如本站分为“WordPress开发”、“WPCEO插件”等,这里的分类指广义上的分类,所以每个TAG也是一个“分类”。

wp_term_taxonomy 记录了每个分类所归属的分类方法,如“WordPress开发”、“WPCEO插件”是文章分类(category),放置友情链接的“我的朋友”、“我的同事”分类属于友情链接分类(link_category)。

wp_term_relationships 记录了每个文章(或链接)所对应的分类方法。

庆幸的是,关于term的使用,WordPress中相关函数的使用方法还是比较清晰明了,我们就没必要纠结于它的构造了。

 

在上文中我们已经介绍了WordPress数据库中各个表的作用,米扑博客将继续介绍每个表中每个列的作用。

WordPress官方文档已经有比较详细的表格,本文仅对常用数据进行介绍。

 

wp_commentmeta

meta_id:自增唯一ID
comment_id:对应评论ID
meta_key:键名
meta_value:键值

 

wp_comments

comment_ID:自增唯一ID
comment_post_ID:对应文章ID
comment_author:评论者
comment_author_email:评论者邮箱
comment_author_url:评论者网址
comment_author_IP:评论者IP
comment_date:评论时间
comment_date_gmt:评论时间(GMT+0时间)
comment_content:评论正文
comment_karma:未知
comment_approved:评论是否被批准
comment_agent:评论者的USER AGENT
comment_type:评论类型(pingback/普通)
comment_parent:父评论ID
user_id:评论者用户ID(不一定存在)

 

wp_links

link_id:自增唯一ID
link_url:链接URL
link_name:链接标题
link_image:链接图片
link_target:链接打开方式
link_description:链接描述
link_visible:是否可见(Y/N)
link_owner:添加者用户ID
link_rating:评分等级
link_updated:未知
link_rel:XFN关系
link_notes:XFN注释
link_rss:链接RSS地址

 

wp_options

option_id:自增唯一ID
blog_id:博客ID,用于多用户博客,默认0
option_name:键名
option_value:键值
autoload:在WordPress载入时自动载入(yes/no)

 

wp_postmeta

meta_id:自增唯一ID
post_id:对应文章ID
meta_key:键名
meta_value:键值

 

wp_posts 核心表

ID:自增唯一ID
post_author:对应作者ID
post_date:发布时间
post_date_gmt:发布时间(GMT+0时间)
post_content:正文
post_title:标题
post_excerpt:摘录
post_status:文章状态(publish/auto-draft/inherit等)
comment_status:评论状态(open/closed)
ping_status:PING状态(open/closed)
post_password:文章密码
post_name:文章缩略名
to_ping:未知
pinged:已经PING过的链接
post_modified:修改时间
post_modified_gmt:修改时间(GMT+0时间)
post_content_filtered:未知
post_parent:父文章,主要用于PAGE
guid:未知
menu_order:排序ID
post_type:文章类型(post/page等)
post_mime_type:MIME类型
comment_count:评论总数

 

wp_terms

term_id:分类ID
name:分类名
slug:缩略名
term_group:未知

 

wp_term_relationships

object_id:对应文章ID/链接ID
term_taxonomy_id:对应分类方法ID
term_order:排序

 

wp_term_taxonomy

term_taxonomy_id:分类方法ID
term_id:taxonomy:分类方法(category/post_tag)
description:未知
parent:所属父分类方法ID
count:文章数统计

 

wp_usermeta

umeta_id:自增唯一ID
user_id:对应用户ID
meta_key:键名
meta_value:键值

 

wp_users

ID:自增唯一ID
user_login:登录名
user_pass:密码
user_nicename:昵称
user_email:Email
user_url:网址
user_registered:注册时间
user_activation_key:激活码
user_status:用户状态
display_name:显示名称

 

最后,米扑博客要说得是,数据库非常重要,必须备份

推荐,每隔三天备份一次,一周至少备份两次,且保留最近四次即一个月的备份副本

 

数据库备份语句

导出数据库

mysqldump -u root mimvp800 > sql_database_bk/mimvp800_database_bk_2011-10-22.sql

导出数据库的表

mysqldump -u root mimvp800  mimvp800_table > sql_database_bk/mimvp800_table_bk_2011-10-22.sql

 

更多数据库操作,请见 MySQL常用语法总结

WordPress 数据库操作,请见:WordPress 常用数据库SQL查询语句