一、简介

WordPress使用MySQL数据库存储网站数据。作为开发者,我们有必要掌握WordPress数据库的基本构造,并在自己的插件或主题中使用它们。


截至目前WordPress 5.8.1,WordPress一共有以下12个表。这里加上了默认的表前缀 wp_ 。


表格

作用

备注

wp_commentmeta

存储评论的元数据


wp_comments

存储评论


wp_links

存储友情链接(Blogroll)


wp_options

存储WordPress系统选项和插件、主题配置


wp_postmeta

存储文章(包括页面、上传文件、修订)的元数据


wp_posts

存储文章(包括页面、上传文件、修订)


wp_termmeta

存储目录、标签对应的元数据


wp_terms

存储每个目录、标签


wp_term_relationships

存储每个文章、链接和对应分类的关系


wp_term_taxonomy

存储每个目录、标签所对应的分类


wp_usermeta

存储用户的元数据


wp_users

存储用户




在WordPress的数据库结构中,存储系统选项和插件配置的wp_options表是比较独立的结构,它采用了key-value模式存储,这样做的好处是易于拓展,各个插件都可以轻松地在这里存储自己的配置。


post,comment,user 则是三个基本表加上拓展表的组合。以wp_users为例,wp_users已经存储了每个用户会用到的基本信息,比如 login_name、display_name、 password、email等常用信息,但如果我们还要存储一些不常用的数据,最好的做法不是去在表后加上一列,去破坏默认的表结构,而是将数据存在wp_usermeta中。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中相关函数的使用方法还是比较清晰明了,我们就没必要纠结于它的构造了。

 

二、常用表格描述 


1、wp_commentmeta


meta_id:自增唯一ID

comment_id:对应评论ID

meta_key:键名

meta_value:键值

 

2、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(不一定存在)


3、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地址


4、wp_options

option_id:自增唯一ID

blog_id:博客ID,用于多用户博客,默认0

option_name:键名

option_value:键值

autoload:在WordPress载入时自动载入(yes/no)


5、wp_postmeta

meta_id:自增唯一ID

post_id:对应文章ID

meta_key:键名

meta_value:键值


6、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:评论总数


7、wp_termmeta

Field

Type

Null

Key

Default

Extra

meta_id

bigint(20) unsigned

 

PRI

 

auto_increment

term_id

bigint(20) unsigned

 

IND

0

 

meta_key

varchar(255)

YES

IND

NULL

 

meta_value

longtext

YES

 

NULL

 


8、wp_terms

term_id:分类ID

name:分类名

slug:缩略名

term_group:未知


9、wp_term_relationships

object_id:对应文章ID/链接ID

term_taxonomy_id:对应分类方法ID

term_order:排序


10、wp_term_taxonomy

term_taxonomy_id:分类方法ID

term_id:taxonomy:分类方法(category/post_tag)

description:未知

parent:所属父分类方法ID

count:文章数统计


11、wp_usermeta

umeta_id:自增唯一ID

user_id:对应用户ID

meta_key:键名

meta_value:键值


12、wp_users

ID:自增唯一ID

user_login:登录名

user_pass:密码

user_nicename:昵称

user_email:Email

user_url:网址

user_registered:注册时间

user_activation_key:激活码

user_status:用户状态

display_name:显示名称


三、数据库表的关系

典型关系数据库中表之间的关系无外乎三种:一对一;一对多;多对多。

以上 3 种数据库关系在 WordPress 中均有使用。

WordPress 数据库表之间的关系是什么呢?

要搞明白这个问题以及对 WordPress 数据表之间的关系有更加深刻的理解,让我们先来想想 WordPress 博客系统的功能,默认安装的 WordPress系统涉及的数据信息主要包括了用户信息、分类信息、链接信息、文章信息、文章评论信息、基本配置信息这 6 类信息。具体列表如下:

  • 用户信息:系统中所有注册用户的帐号信息。
  • 分类信息:包括了文章分类、链接分类、标签这3中分类信息。
  • 链接信息:就是博客系统中的友情链接信息。
  • 文章信息:博客系统中的日志、日志产生的附件、页面等信息。
  • 文章评论信息:对具体日志或者附件的评论信息。
  • 基本配置信息:系统中的基本配置信息,例如博客名称,博客地址等等。


WordPress 数据库的 12 个数据表就是为了存储以上数据信息而设计。


进一步来看,WordPress 中的一对一关系包括:

  • ​文章 ID 和文章内容
  • 文章标题和文章内容
  • 文章ID和文章标签
  • 评论ID和评论内容
  • 用户ID和用户名​


但是,在 WordPress 中,最重要也是用得最多的是一对多关系。

在 WordPress 中,一对多关系通过唯一的 ID 在两个数据表中创建链接实现,​​post_id​​ 在 ​​wp_posts​ 数据表中代替了每一篇文章。在评论数据表wp_comments中,post_id 被用来判断评论是发表在那篇文章的。这就意味着,每一个文章 ID 只能在每篇文章中出现一次,却可以在这篇文章的评论中出现多次,如果这篇文章没有评论,那么这个文章 ID一次也不会出现。

在 WordPress 中,其他类似的例子如下:

  • 文章和文章元数据
  • 文章和用户
  • 用户和用户元数据
  • 分类法和分类法项目

涉及文章的一对多关系

链接最多的数据表是 ​​wp_posts​​ 数据表, 而几乎所有的链接都是一对多关系。如下表,​​wp_posts​​ 链接了4个不同的数据表。

WordPress开发之数据库结构_数据库

四、Wordpress数据库优化

WordPress系统使用时间长了,数据库中的冗余数据就会很多;因此,定期优化和清理Wordpress的数据库,可以保证Wordpress能够快速工作。

在此,推荐一款数据库的优化插件:WP-Optimize插件。WP-Optimize插件的具体功能包括:删除修改后的WordPress中的冗余数据,删除所有评论中的垃圾数据,删除无效的留言,优化MySQL数据库等等。

当然,我们也可以直接使用phpmyadmin的数据库优化功能,只是要慎重操作!

五、小结

WordPress是使用数据库来实现存储、检索和显示数据功能的。数据库是CMS的最关键的部分,有必要相信,WordPress成功的很大一部分原因就是因为它比较合理的、容易管理的数据库结构。

通过了解数据库的结构,我们可以很容易地解决一些问题。比如,可以直接通过数据库的操作来实现更改密码、禁用插件、选择主题和做其他事情,而无需访问管理面板。

总而言之,WordPress的数据库是简单,容易理解和容易使用的,在使用wordpress博客的时候,千万不要忽视优化、清理和定期备份你的数据库。重要的事情强调三遍:在进行任何更改之前,请备份您的数据库!请备份您的数据库!请备份您的数据库!

六、引用

  1. ​https://codex.wordpress.org/Database_Description#Table_Details​
  2. ​https://www.cnblogs.com/wordblog/p/6591499.html​
  3. ​https://zhuanlan.zhihu.com/p/78464219​
  4. ​https://baijiahao.baidu.com/s?id=1705131561692791111&wfr=spider&for=pc​
  5. ​https://www.wpzhiku.com/understanding-working-relationships-data-wordpress/​
6. ​​https://www.cnblogs.com/youcong/p/9671294.html​