The
revision
table holds metadata for every edit done to a page within the wiki.
Every edit creates a revision row, which holds information such as the user who made the edit, the time at which the edit was made, a link to the comment of the revision in the
comment
table, and other metadata.
The slots that were edited and their corresponding revision are specified in the
slots
table.
An
Import
of the last revision of a page from another wiki produces two entries in the revision table, one with the date and wikitext of the imported revision, and one with the import date.
If a page with the same name already existed, then the wikitext of the latter, which becomes that of the current page, is that of the more recent of the two pages.
The revision table is very similar to the
recentchanges
table.
The revision table is used for
page history
and
user contributions
listings.
The
recentchanges
table is used for
recent changes
,
related changes
,
watchlists
, and, in the case of page creation, for the
list of new pages
.
Differences include:
- The recentchanges table also records logged events such as page moves and deletions
- Items in the recentchanges table are periodically purged; those in the revision table are retained permanently, unless the page is deleted or the site owner runs the
deleteOldRevisions.php
maintenance script.
- as said,
import
of a page revision not only adds an entry to the revision table with the import date, but also one with the original date.
Deleted revisions are moved to the
archive
table.
The revision table and the text table were introduced in
MediaWiki 1.5
to supersede the
cur
table.
Fields
[
edit
]
rev_id
[
edit
]
This field holds the primary key for each revision.
page_latest
is a foreign key to this field.
The rev_id numbers have been preserved across deletion/undeletion since the table's inception in MediaWiki 1.5, when rev_id and text_id superseded the old cur_id.
Note that while rev_id almost always increases monotonically for successive revisions of a page, this is not strictly guaranteed as importing from another wiki can cause revisions to be created out of order.
rev_page
[
edit
]
This field holds a reference to the
page
to which this revision pertains.
The number in this field is equal to the
page_id
field of said page.
This should never be invalid; if it is, that revision won't show up in the page history.
If
page.page_latest
links to a revision with an invalid rev_page, this will cause the "The revision #0 of the page named 'Foo' does not exist" error.
(similar issue might occur when slots and content are missing for the revision)
rev_text_id
[
edit
]
MediaWiki versions:
|
1.5 – 1.34
|
This is a foreign key to
old_id
in the
text
table.
(The text table is where the actual bulk text is stored.)
It's possible for multiple revisions to use the same text - for instance, revisions where only metadata is altered, or where a
rollback
is done to a previous version.
(deprecated in 1.31)
If rows in the
slots
table with
slots.slot_revision_id
= rev_id exist, this field should be ignored (and may be 0) in favor of the corresponding data from the slots and content tables.
(removed in 1.35)
This column was replaced by
content.content_address
which can be retrieved by getting the
slot_content_id
for the corresponding revision in the slots table.
MediaWiki versions:
|
1.5 – 1.34
|
This field holds an editor's
edit summary
(editor's comment on revision).
This text is shown in the
history
and
contributions
.
(The
recentchanges
table contains a copy used for
recent changes
,
related changes
,
watchlists
, and, in the case of page creation, for the
list of new pages
.)
It is rendered in a sanitized subset of wiki markup.
(deprecated)
revcomment_comment_id
of the revision_comment_temp table and the
comment
table should be used instead!
(removed in 1.35)
This column was replaced by
revision.rev_comment_id
, which references
comment.comment_id
.
MediaWiki version:
|
≥
1.35
|
This is a foreign key to
comment_id
in the
comment
table.
In MediaWiki 1.38 and older, if this field contains zero in each record, the comment id must be retrieved from the
revision_comment_temp
table.
See
Actor migration
.
rev_user
[
edit
]
MediaWiki versions:
|
1.5 – 1.34
|
This is equal to the
user_id
of the user who made this edit.
The value for this field is 0 for anonymous edits, initializations scripts, and for some mass imports.
Note, there are bugs:
T112384
.
(deprecated in 1.31)
While
actor migration
is being done, and depending on the configuration setting
$wgActorTableSchemaMigrationStage
, this field may be empty and the actor performing the edit can be stored in the
rev_actor
field or the
revision_actor_temp
table instead.
(removed in 1.35)
This column was removed along with
revision.rev_user_text
.
This column is replaced by
revision.rev_actor
, which references
actor.actor_id
.
rev_user_text
[
edit
]
MediaWiki versions:
|
1.5 – 1.34
|
This field holds the text of the editor's
username
, or the
IP address
of the editor if the revision was done by an unregistered user.
In anonymous revisions imported from
UseModWiki
or early incarnations of the
Phase II software
, this field may contain an IP address with the final octet obscured (i.e.
\d{1,3}\.\d{1,3}\.\d{1,3}\.xxx
such as
24.150.61.xxx
; see
bug 3631
).
Some edits imported from UseModWiki may contain a
Reverse DNS lookup
hostname
like
ppfree165-153-bz.aknet.it
or
office.bomis.com
.
(deprecated in 1.31)
While
actor migration
is being done, and depending on the configuration setting
$wgActorTableSchemaMigrationStage
, this field may be empty and the actor performing the edit can be stored in the
rev_actor
field or the
revision_actor_temp
table instead.
(removed in 1.35)
This column was removed along with
revision.rev_user
.
This column is replaced by
revision.rev_actor
, which references
actor.actor_id
.
rev_actor
[
edit
]
MediaWiki version:
|
≥
1.35
|
This is a foreign key to
actor_id
in the
actor
table.
In MediaWiki 1.38 and older versions, if this field contains zero in each record, the actor ID must be retrieved from the
revision_actor_temp
table.
See
Actor migration
.
rev_timestamp
[
edit
]
Holds the
timestamp
of the edit.
Looks like, for example,
20080326231614
(MW_TS time format).
Corresponds to
recentchanges.rc_timestamp
(and
logging.log_timestamp
for page creations).
Unlike
image.img_timestamp
, this value is not fudged to be unique for a given page, so edits happening in quick succession can have the same timestamp.
rev_minor_edit
[
edit
]
Records whether the user marked the '
minor edit
' checkbox.
If the value for this field is 1, then the edit was declared as 'minor'; it is 0 otherwise.
Many automated edits are marked as minor.
rev_deleted
[
edit
]
This field is reserved for
RevisionDelete
system.
It's a bitfield in which the values are DELETED_TEXT = 1; DELETED_COMMENT = 2; DELETED_USER = 4; and DELETED_RESTRICTED = 8.
So, for example, if nothing has been deleted from that revision, then the value is 0; if both the comment and user have been deleted, then the value is 6.
DELETED_RESTRICTED
indicates suppression; when this flag is set content hidden by the other
DELETED_*
flags is only visible to suppressors (i.e. oversighters) instead of admins.
rev_len
[
edit
]
MediaWiki version:
|
≥
1.10
|
This field contains the length of the article after the revision, in bytes.
Used in history pages.
Corresponds to
rc_new_len
.
rev_parent_id
[
edit
]
MediaWiki version:
|
≥
1.10
|
The revision ID of the previous revision to the page.
Corresponds to
rc_last_oldid
.
For edits which are new page creations, rev_parent_id = 0.
Usage
[
edit
]
This field is used to add support for a
tree structure
.
This field is e.g. used to calculate the size difference of a certain revision with the previous revision in the page history view.
If a parent ID points to a revision that's associated with a different page, MediaWiki will still use that parent revision as a basis of comparison for purposes of calculating size difference.
If a revision is deleted from the database, and another revision's parent ID still points to it, then MediaWiki will behave the same as if there were no parent revision; i.e. it will assume the previous size was 0.
Transferred revisions
[
edit
]
When revisions are imported from another wiki, the imported revisions' parent ID tree structure from the source wiki is retained (this is implemented by each revision', other than the tail revision, having a
<
parentid
>
XML element that is used to populate rev_parent_id), and the destination wiki's revisions' parent IDs are not updated.
Likewise, when
page histories are merged
, the parent IDs of the revisions from the source and destination pages are not updated.
populateParentId.php
can be used to populate rev_parent_id based on revision timestamps and revision IDs.
In the case of an
edit conflict
, the revision ID of the edit that is saved first (causing the conflict) will be used as the parent ID of the edit that is saved second (after resolving the conflict).
rev_sha1
[
edit
]
MediaWiki version:
|
≥
1.19
|
This field is used to add the SHA-1 text content hash in base-36 (generated by
Wikimedia\base_convert()
.)
Since 1.32, it's a nested hash of hashes of
content_sha1
across all slots of the revision.
If the revision only has one slot, the values of the rev_sha1 and content_sha1 fields are identical.
The nested hash algorithm is implemented in
RevisionSlots
::
computeSha1
()
.
It can be outlined as:
rev_sha1 = hash_n;
hash_n = sha1( hash_n-1, content_sha1_n );
hash_1 = content_sha1_1;
rev_content_model
[
edit
]
MediaWiki versions:
|
1.21 – 1.34
|
Content model, see CONTENT_MODEL_XXX constants in
Defines.php
.
These IDs will be exposed in the API and XML dumps.
Extensions that define their own content model IDs should take care to avoid conflicts.
Using the extension name as a prefix is recommended, for example 'myextension-somecontent'.
Possible values are, e.g.: 'wikitext', 'javascript', 'css', 'text', and 'json'
(deprecated in 1.31)
If rows in the slots table with slot_revision_id =
rev_id
this field should be ignored (and may be NULL) in favor of the corresponding data from the slots and content tables.
(removed in 1.35)
This column was replaced by
content.content_model
, which references
content_models.model_id
.
rev_content_format
[
edit
]
MediaWiki versions:
|
1.21 – 1.34
|
Content format, see CONTENT_FORMAT_XXX constants in
Defines.php
.
These should be
MIME
types, and will be exposed in the API and XML dumps.
Extensions are free to use the below formats, or define their own.
It is recommended to stick with the
conventions for MIME types
.
Possible values are, e.g.: 'text/x-wiki', 'text/javascript', 'text/css', 'text/plain', 'text/html', 'application/vnd.php.serialized', 'application/json', 'application/xml'
(deprecated in 1.31)
If rows in the slots table with slot_revision_id = rev_id exist, this field should be ignored (and may be NULL).
(removed in 1.35)
This column was removed. The ContentHandler class is able to automatically detect the content format, and replaces this column.
Schema summary
[
edit
]
MediaWiki version:
|
≥
1.43
|
DESCRIBE
revision
;
+----------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------------+------+-----+---------+----------------+
| rev_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| rev_page | int(10) unsigned | NO | MUL | NULL | |
| rev_comment_id | bigint(20) unsigned | NO | | NULL | |
| rev_actor | bigint(20) unsigned | NO | MUL | NULL | |
| rev_timestamp | binary(14) | NO | MUL | NULL | |
| rev_minor_edit | tinyint(3) unsigned | NO | | 0 | |
| rev_deleted | tinyint(3) unsigned | NO | | 0 | |
| rev_len | int(10) unsigned | YES | | NULL | |
| rev_parent_id | bigint(20) unsigned | YES | | NULL | |
| rev_sha1 | varbinary(32) | NO | | | |
+----------------+---------------------+------+-----+---------+----------------+
DESCRIBE
revision
;
+----------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------------+------+-----+---------+----------------+
| rev_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| rev_page | int(10) unsigned | NO | MUL | NULL | |
| rev_comment_id | bigint(20) unsigned | NO | | 0 | |
| rev_actor | bigint(20) unsigned | NO | MUL | 0 | |
| rev_timestamp | binary(14) | NO | MUL | NULL | |
| rev_minor_edit | tinyint(3) unsigned | NO | | 0 | |
| rev_deleted | tinyint(3) unsigned | NO | | 0 | |
| rev_len | int(10) unsigned | YES | | NULL | |
| rev_parent_id | int(10) unsigned | YES | | NULL | |
| rev_sha1 | varbinary(32) | NO | | | |
+----------------+---------------------+------+-----+---------+----------------+
MediaWiki versions:
|
1.35 – 1.36
|
DESCRIBE
revision
;
+----------------+---------------------+------+-----+----------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------------+------+-----+----------------+----------------+
| rev_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| rev_page | int(10) unsigned | NO | MUL | NULL | |
| rev_comment_id | bigint(20) unsigned | NO | | 0 | |
| rev_actor | bigint(20) unsigned | NO | MUL | 0 | |
| rev_timestamp | binary(14) | NO | MUL | | |
| rev_minor_edit | tinyint(3) unsigned | NO | | 0 | |
| rev_deleted | tinyint(3) unsigned | NO | | 0 | |
| rev_len | int(10) unsigned | YES | | NULL | |
| rev_parent_id | int(10) unsigned | YES | | NULL | |
| rev_sha1 | varbinary(32) | NO | | | |
+----------------+---------------------+------+-----+----------------+----------------+
MediaWiki versions:
|
1.31 – 1.34
|
DESCRIBE
revision
;
+--------------------+---------------------+------+-----+----------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+----------------+----------------+
| rev_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| rev_page | int(10) unsigned | NO | MUL | NULL | |
| rev_text_id | int(10) unsigned | NO | | 0 | |
| rev_comment | varbinary(767) | NO | | | |
| rev_user | int(10) unsigned | NO | MUL | 0 | |
| rev_user_text | varbinary(255) | NO | MUL | | |
| rev_timestamp | binary(14) | NO | MUL | | |
| rev_minor_edit | tinyint(3) unsigned | NO | | 0 | |
| rev_deleted | tinyint(3) unsigned | NO | | 0 | |
| rev_len | int(10) unsigned | YES | | NULL | |
| rev_parent_id | int(10) unsigned | YES | | NULL | |
| rev_sha1 | varbinary(32) | NO | | | |
| rev_content_model | varbinary(32) | YES | | NULL | |
| rev_content_format | varbinary(64) | YES | | NULL | |
+--------------------+---------------------+------+-----+----------------+----------------+
DESCRIBE
revision
;
+--------------------+---------------------+------+-----+----------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+----------------+----------------+
| rev_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| rev_page | int(10) unsigned | NO | MUL | NULL | |
| rev_text_id | int(10) unsigned | NO | | NULL | |
| rev_comment | varbinary(767) | NO | | | |
| rev_user | int(10) unsigned | NO | MUL | 0 | |
| rev_user_text | varbinary(255) | NO | MUL | | |
| rev_timestamp | binary(14) | NO | MUL | | |
| rev_minor_edit | tinyint(3) unsigned | NO | | 0 | |
| rev_deleted | tinyint(3) unsigned | NO | | 0 | |
| rev_len | int(10) unsigned | YES | | NULL | |
| rev_parent_id | int(10) unsigned | YES | | NULL | |
| rev_sha1 | varbinary(32) | NO | | | |
| rev_content_model | varbinary(32) | YES | | NULL | |
| rev_content_format | varbinary(64) | YES | | NULL | |
+--------------------+---------------------+------+-----+----------------+----------------+
MediaWiki versions:
|
1.25 – 1.29
|
DESCRIBE
revision
;
+--------------------+---------------------+------+-----+----------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+----------------+----------------+
| rev_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| rev_page | int(10) unsigned | NO | MUL | NULL | |
| rev_text_id | int(10) unsigned | NO | | NULL | |
| rev_comment | varbinary(767) | NO | | NULL | |
| rev_user | int(10) unsigned | NO | MUL | 0 | |
| rev_user_text | varbinary(255) | NO | MUL | | |
| rev_timestamp | binary(14) | NO | MUL | | |
| rev_minor_edit | tinyint(3) unsigned | NO | | 0 | |
| rev_deleted | tinyint(3) unsigned | NO | | 0 | |
| rev_len | int(10) unsigned | YES | | NULL | |
| rev_parent_id | int(10) unsigned | YES | | NULL | |
| rev_sha1 | varbinary(32) | NO | | | |
| rev_content_model | varbinary(32) | YES | | NULL | |
| rev_content_format | varbinary(64) | YES | | NULL | |
+--------------------+---------------------+------+-----+----------------+----------------+
MediaWiki versions:
|
1.21 – 1.24
|
DESCRIBE
revision
;
+--------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+---------+----------------+
| rev_id | int(10) unsigned | NO | PRI | NULL | AUTO_INCREMENT |
| rev_page | int(10) unsigned | NO | PRI | NULL | |
| rev_text_id | int(10) unsigned | NO | | NULL | |
| rev_comment | tinyblob | NO | | NULL | |
| rev_user | int(10) unsigned | NO | MUL | 0 | |
| rev_user_text | varchar(255) binary | NO | MUL | NULL | |
| rev_timestamp | binary(14) | NO | MUL | NULL | |
| rev_minor_edit | tinyint(3) unsigned | NO | | 0 | |
| rev_deleted | tinyint(3) unsigned | NO | | 0 | |
| rev_len | int(10) unsigned | YES | | NULL | |
| rev_parent_id | int(10) unsigned | YES | | NULL | |
| rev_sha1 | varbinary(32) | NO | | NULL | |
| rev_content_model | varbinary(32) | YES | | NULL | |
| rev_content_format | varbinary(64) | YES | | NULL | |
+--------------------+---------------------+------+-----+---------+----------------+
MediaWiki versions:
|
1.19 – 1.20
|
DESCRIBE
revision
;
+----------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------------+------+-----+---------+----------------+
| rev_id | int(10) unsigned | NO | PRI | NULL | AUTO_INCREMENT |
| rev_page | int(10) unsigned | NO | PRI | NULL | |
| rev_text_id | int(10) unsigned | NO | | NULL | |
| rev_comment | tinyblob | NO | | NULL | |
| rev_user | int(10) unsigned | NO | MUL | 0 | |
| rev_user_text | varchar(255) binary | NO | MUL | NULL | |
| rev_timestamp | binary(14) | NO | MUL | NULL | |
| rev_minor_edit | tinyint(3) unsigned | NO | | 0 | |
| rev_deleted | tinyint(3) unsigned | NO | | 0 | |
| rev_len | int(10) unsigned | YES | | NULL | |
| rev_parent_id | int(10) unsigned | YES | | NULL | |
| rev_sha1 | varbinary(32) | NO | | NULL | |
+----------------+---------------------+------+-----+---------+----------------+
MediaWiki versions:
|
1.9 – 1.18
|
DESCRIBE
revision
;
+----------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------------+------+-----+---------+----------------+
| rev_id | int(10) unsigned | NO | PRI | NULL | AUTO_INCREMENT |
| rev_page | int(10) unsigned | NO | PRI | NULL | |
| rev_text_id | int(10) unsigned | NO | | NULL | |
| rev_comment | tinyblob | NO | | NULL | |
| rev_user | int(10) unsigned | NO | MUL | 0 | |
| rev_user_text | varchar(255) binary | NO | MUL | NULL | |
| rev_timestamp | binary(14) | NO | MUL | NULL | |
| rev_minor_edit | tinyint(3) unsigned | NO | | 0 | |
| rev_deleted | tinyint(3) unsigned | NO | | 0 | |
| rev_len | int(10) unsigned | YES | | NULL | |
| rev_parent_id | int(10) unsigned | YES | | NULL | |
+----------------+---------------------+------+-----+---------+----------------+
MediaWiki versions:
|
1.5 – 1.8
|
DESCRIBE
revision
;
+----------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------------+------+-----+---------+----------------+
| rev_id | int(8) unsigned | NO | PRI | NULL | AUTO_INCREMENT |
| rev_page | int(8) unsigned | NO | PRI | NULL | |
| rev_text_id | int(8) unsigned | NO | | NULL | |
| rev_comment | tinyblob | NO | | NULL | |
| rev_user | int(5) unsigned | NO | MUL | 0 | |
| rev_user_text | varchar(255) binary | NO | MUL | NULL | |
| rev_timestamp | char(14) binary | NO | MUL | NULL | |
| rev_minor_edit | tinyint(1) unsigned | NO | | 0 | |
| rev_deleted | tinyint(1) unsigned | NO | | 0 | |
+----------------+---------------------+------+-----+---------+----------------+
Indexes
[
edit
]
MediaWiki version:
|
≥
1.38
|
SHOW
INDEX
IN
revision
;
+----------+------------+--------------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+----------+------------+--------------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| revision | 0 | PRIMARY | 1 | rev_id | A | 0 | NULL | NULL | | BTREE | | |
| revision | 1 | rev_timestamp | 1 | rev_timestamp | A | 0 | NULL | NULL | | BTREE | | |
| revision | 1 | rev_page_timestamp | 1 | rev_page | A | 0 | NULL | NULL | | BTREE | | |
| revision | 1 | rev_page_timestamp | 2 | rev_timestamp | A | 0 | NULL | NULL | | BTREE | | |
| revision | 1 | rev_actor_timestamp | 1 | rev_actor | A | 0 | NULL | NULL | | BTREE | | |
| revision | 1 | rev_actor_timestamp | 2 | rev_timestamp | A | 0 | NULL | NULL | | BTREE | | |
| revision | 1 | rev_actor_timestamp | 3 | rev_id | A | 0 | NULL | NULL | | BTREE | | |
| revision | 1 | rev_page_actor_timestamp | 1 | rev_page | A | 0 | NULL | NULL | | BTREE | | |
| revision | 1 | rev_page_actor_timestamp | 2 | rev_actor | A | 0 | NULL | NULL | | BTREE | | |
| revision | 1 | rev_page_actor_timestamp | 3 | rev_timestamp | A | 0 | NULL | NULL | | BTREE | | |
+----------+------------+--------------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
See also
[
edit
]
|
---|
Engines
| |
---|
Technical documentation
| |
---|
Configuration
| |
---|
Development
| |
---|
Core tables
| |
---|