This article, written to accord with WordPress 2.9, is now obsolete. Please take caution when following its contents, as many things may have changed.
The following is an outline and description of the database tables created during the standard installation of WordPress Version 2.9. At the time, the only database supported by WordPress Version 2.9 was MySQL version 4.1.2 or greater.
Also see prior versions of Database Descriptions for WordPress 1.5, WordPress 2.0, WordPress 2.2, WordPress 2.3, WordPress 2.5, WordPress 2.7, and WordPress 2.8.
Because WordPress interfaces with this database by itself, you as an end user, shouldn't have to worry much about its structure. If you're Writing a Plugin, however, you may be interested in learning how to interface with the database directly. WordPress provides the wpdb Class to make this task easy.
Database Diagram
The diagram below provides a visual overview of the Wordpress database and the relations between the tables (WP Version 2.5+) created during the WordPress standard installation. The Table Overview below includes additional details on the tables and columns.
(WP 2.5 Database diagram)
[An updated diagram for version 2.9.1 can be found here.]
Please note that within the standard installation of Wordpress no integrity between the tables is enforced e.g. between posts and comments. If you are creating a plugin or extension that manipulates the Wordpress database, your code should do the housekeeping so that no orphan records remain in the tables e.g. by removing records in other tables with a set of SQL commands when foreign keys are deleted (Don't forget to remind users to backup before such operations).
Table Overview
This section is the overview of all the tables created during the WordPress standard installation. It is followed by specific information of what is in each table.
| WordPress 2.9 Tables (11)
|
| Table Name |
Description |
Relevant Area(s) of WordPress User Interface
|
| wp_commentmeta
|
Each comment features information called the meta data and it is stored in the wp_commentmeta. |
Typically plugins would be add their own information to this table.
|
| wp_comments
|
The comments within WordPress are stored in the wp_comments table. |
Comments are created by readers as responses to posts. Comments are managed by administrator via Administration > Comments > Comments
|
| wp_links
|
The wp_links holds information related to the links entered into the Links feature of WordPress. |
|
| wp_options
|
The Options set under the Administration > Settings panel are stored in the wp_options table. |
|
| wp_postmeta
|
Each post features information called the meta data and it is stored in the wp_postmeta. Some plugins may add their own information to this table. |
|
| wp_posts
|
The core of the WordPress data is the posts. It is stored in the wp_posts table. |
|
| wp_terms
|
The categories for both posts and links and the tags for posts are found within the wp_terms table. |
|
| wp_term_relationships
|
Posts are associated with categories and tags from the wp_terms table and this association is maintained in the wp_term_relationships table. The association of links to their respective categories are also kept in this table.
|
| wp_term_taxonomy
|
This table describes the taxonomy (category, link, or tag) for the entries in the wp_terms table.
|
| wp_usermeta
|
Each user features information called the meta data and it is stored in wp_usermeta. |
|
| wp_users
|
The list of users is maintained in table wp_users. |
|
Table Details
The following are the specific fields in each of the tables created during the standard WordPress installation.
| Field |
Type |
Null |
Key |
Default |
Extra
|
| meta_id |
bigint(20) unsigned |
|
PRI |
NULL |
auto_increment
|
| comment_id |
bigint(20) unsigned |
|
IND |
0 |
FK->wp_comments.comment_id
|
| meta_key |
varchar(255) |
YES |
IND |
NULL |
|
| meta_value |
longtext |
YES |
|
NULL |
|
Indexes
| Keyname |
Type |
Cardinality |
Field
|
| PRIMARY |
PRIMARY |
0 |
meta_ID
|
| comment_id |
INDEX |
none |
comment_id
|
| meta_key |
INDEX |
none |
meta_key
|
| Field |
Type |
Null |
Key |
Default |
Extra
|
| comment_ID |
bigint(20) unsigned |
|
PRI |
NULL |
auto_increment
|
| comment_post_ID |
bigint(20) unsigned |
|
IND |
0 |
FK->wp_posts.ID
|
| comment_author |
tinytext |
|
|
|
|
| comment_author_email |
varchar(100) |
|
|
|
|
| comment_author_url |
varchar(200) |
|
|
|
|
| comment_author_IP |
varchar(100) |
|
|
|
|
| comment_date |
datetime |
|
|
0000-00-00 00:00:00 |
|
| comment_date_gmt |
datetime |
|
IND & IND Pt2 |
0000-00-00 00:00:00 |
|
| comment_content |
text |
|
|
|
|
| comment_karma |
int(11) |
|
|
0 |
|
| comment_approved |
varchar(20) |
|
IND & Ind Pt1 |
1 |
|
| comment_agent |
varchar(255) |
|
|
|
|
| comment_type |
varchar(20) |
|
|
|
|
| comment_parent |
bigint(20) unsigned |
|
|
0 |
FK->wp_comments.ID
|
| user_id |
bigint(20) unsigned |
|
|
0 |
FK->wp_users.ID
|
Indexes
| Keyname |
Type |
Cardinality |
Field
|
| PRIMARY |
PRIMARY |
1 |
comment_ID
|
| comment_approved |
INDEX |
None |
comment_approved
|
| comment_post_ID |
INDEX |
None |
comment_post_ID
|
| comment_approved_date_gmt |
INDEX |
None |
comment_approved comment_date_gmt
|
| comment_date_gmt |
INDEX |
None |
comment_date_gmt
|
Table: wp_links
| Field |
Type |
Null |
Key |
Default |
Extra
|
| link_id |
bigint(20) unsigned |
|
PRI |
NULL |
auto_increment
|
| link_url |
varchar(255) |
|
|
|
|
| link_name |
varchar(255) |
|
|
|
|
| link_image |
varchar(255) |
|
|
|
|
| link_target |
varchar(25) |
|
|
|
|
| link_description |
varchar(255) |
|
|
|
|
| link_visible |
varchar(20) |
|
IND |
Y |
|
| link_owner |
bigint(20) unsigned |
|
|
1 |
|
| link_rating |
int(11) |
|
|
0 |
|
| link_updated |
datetime |
|
|
0000-00-00 00:00:00 |
|
| link_rel |
varchar(255) |
|
|
|
|
| link_notes |
mediumtext |
|
|
|
|
| link_rss |
varchar(255) |
|
|
|
|
Indexes
| Keyname |
Type |
Cardinality |
Field
|
| PRIMARY |
PRIMARY |
7 |
link_ID
|
| link_category |
INDEX |
None |
link_category
|
| link_visible |
INDEX |
None |
link_visible
|
Table: wp_options
| Field |
Type |
Null |
Key |
Default |
Extra
|
| option_id |
bigint(20) unsigned |
|
PRI Pt1 |
NULL |
auto_increment
|
| blog_id |
int(11) |
|
PRI Pt2 |
0 |
|
| option_name |
varchar(64) |
|
PRI Pt3 & IND |
|
|
| option_value |
longtext |
|
|
|
|
| autoload |
varchar(20) |
|
|
yes |
|
Indexes
| Keyname |
Type |
Cardinality |
Field
|
| PRIMARY |
PRIMARY |
184 |
option_id blog_id option_name
|
| option_name |
UNIQUE |
184 |
option_name
|
Table: wp_postmeta
| Field |
Type |
Null |
Key |
Default |
Extra
|
| meta_id |
bigint(20) unsigned |
|
PRI |
NULL |
auto_increment
|
| post_id |
bigint(20) unsigned |
|
IND |
0 |
FK->wp_posts.ID
|
| meta_key |
varchar(255) |
YES |
IND |
NULL |
|
| meta_value |
longtext |
YES |
|
NULL |
|
Indexes
| Keyname |
Type |
Cardinality |
Field
|
| PRIMARY |
PRIMARY |
13 |
meta_ID
|
| post_id |
INDEX |
15 |
post_id
|
| meta_key |
INDEX |
7 |
meta_key
|
Table: wp_posts
| Field |
Type |
Null |
Key |
Default |
Extra
|
| ID |
bigint(20) unsigned |
|
PRI & IND Pt4 |
|
auto_increment
|
| post_author |
bigint(20) unsigned |
|
|
0 |
FK->wp_users.ID
|
| post_date |
datetime |
|
IND Pt3 |
0000-00-00 00:00:00 |
|
| post_date_gmt |
datetime |
|
|
0000-00-00 00:00:00 |
|
| post_content |
longtext |
|
|
|
|
| post_title |
text |
|
|
|
|
| post_excerpt |
text |
|
|
|
|
| post_status |
varchar(20) |
|
IND PT2 |
publish |
|
| comment_status |
varchar(20) |
|
|
open |
|
| ping_status |
varchar(20) |
|
|
open |
|
| post_password |
varchar(20) |
|
|
|
|
| post_name |
varchar(200) |
|
IND |
|
|
| to_ping |
text |
|
|
|
|
| pinged |
text |
|
|
|
|
| post_modified |
datetime |
|
|
0000-00-00 00:00:00 |
|
| post_modified_gmt |
datetime |
|
|
0000-00-00 00:00:00 |
|
| post_content_filtered |
text |
|
|
|
|
| post_parent |
bigint(20) unsigned |
|
|
0 |
FK->wp_posts.ID
|
| guid |
varchar(255) |
|
|
|
|
| menu_order |
int(11) |
|
|
0 |
|
| post_type |
varchar(20) |
|
IND Pt1 |
post |
|
| post_mime_type |
varchar(100) |
|
|
|
|
| comment_count |
bigint(20) |
|
|
0 |
|
Indexes
| Keyname |
Type |
Cardinality |
Field
|
| PRIMARY |
PRIMARY |
2 |
ID
|
| post_name |
INDEX |
None |
post_name
|
| type_status_date |
INDEX |
None |
post_type post_status post_date ID
|
| post_parent |
INDEX |
None |
post_parent
|
Table: wp_terms
| Field |
Type |
Null |
Key |
Default |
Extra
|
| term_id |
bigint(20) unsigned |
|
PRI |
|
auto_increment
|
| name |
varchar(200) |
|
|
|
|
| slug |
varchar(200) |
|
UNI |
|
|
| term_group |
bigint(10) |
|
|
0 |
|
Indexes
| Keyname |
Type |
Cardinality |
Field
|
| PRIMARY |
PRIMARY |
2 |
term_ID
|
| slug |
UNIQUE |
2 |
slug
|
| name |
Index |
none |
name
|
Table: wp_term_relationships
| Field |
Type |
Null |
Key |
Default |
Extra
|
| object_id |
bigint(20) unsigned |
|
PRI Pt1 |
0 |
|
| term_taxonomy_id |
bigint(20) unsigned |
|
PRI Pt2 & IND |
0 |
FK->wp_term_taxonomy.term_taxonomy_id
|
| term_order |
int(11) |
|
|
0 |
|
Indexes
| Keyname |
Type |
Cardinality |
Field
|
| PRIMARY |
PRIMARY |
8 |
object_id term_taxonomy_id
|
| term_taxonomy_id |
INDEX |
None |
term_taxonomy_id
|
Table: wp_term_taxonomy
| Field |
Type |
Null |
Key |
Default |
Extra
|
| term_taxonomy_id |
bigint(20) unsigned |
|
PRI |
|
auto_increment
|
| term_id |
bigint(20) unsigned |
|
UNI Pt1 |
0 |
FK->wp_terms.term_id
|
| taxonomy |
varchar(32) |
|
UNI Pt2 |
|
|
| description |
longtext |
|
|
|
|
| parent |
bigint(20) unsigned |
|
|
0 |
|
| count |
bigint(20) |
|
|
0 |
|
Indexes
| Keyname |
Type |
Cardinality |
Field
|
| PRIMARY |
PRIMARY |
2 |
term_taxonomy_id
|
| term_id_taxonomy |
UNIQUE |
2 |
term_id taxonomy
|
| taxonomy |
INDEX |
None |
taxonomy
|
Table: wp_usermeta
| Field |
Type |
Null |
Key |
Default |
Extra
|
| umeta_id |
bigint(20) unsigned |
|
PRI |
NULL |
auto_increment
|
| user_id |
bigint(20) unsigned |
|
|
'0' |
FK->wp_users.ID
|
| meta_key |
varchar(255) |
Yes |
IND |
NULL |
|
| meta_value |
longtext |
Yes |
IND |
NULL |
|
Indexes
| Keyname |
Type |
Cardinality |
Field
|
| PRIMARY |
PRIMARY |
9 |
umeta_id
|
| user_id |
INDEX |
None |
user_id
|
| meta_key |
INDEX |
None |
meta_key
|
Table: wp_users
| Field |
Type |
Null |
Key |
Default |
Extra
|
| ID |
bigint(20) unsigned |
|
PRI |
NULL |
auto_increment
|
| user_login |
varchar(60) |
|
IND |
|
|
| user_pass |
varchar(64) |
|
|
|
|
| user_nicename |
varchar(50) |
|
IND |
|
|
| user_email |
varchar(100) |
|
|
|
|
| user_url |
varchar(100) |
|
|
|
|
| user_registered |
datetime |
|
|
0000-00-00 00:00:00 |
|
| user_activation_key |
varchar(60) |
|
|
|
|
| user_status |
int(11) |
|
|
0 |
|
| display_name |
varchar(250) |
|
|
|
|
Indexes
| Keyname |
Type |
Cardinality |
Field
|
| PRIMARY |
PRIMARY |
1 |
ID
|
| user_login_key |
INDEX |
None |
user_login
|
| user_nicename |
INDEX |
None |
user_nicename
|
Resources
Changelog
- 2.8 :
- comments table: Changed
comment_post_ID column from int(11) to bigint(20) unsigned.
- links table: Deleted
link_category column. Changed link_owner column from int(11) to bigint(20) unsigned.
- posts table: Deleted
post_category column.
- term_taxonomy table: Added KEY
taxonomy.
- Add
unsigned attribute to various bigint(20) fields.