手册:page表

From mediawiki.org
This page is a translated version of the page Manual:Page table and the translation is 79% complete.
Outdated translations are marked like this.
手册:索引 MediaWiki数据库布局 page表
MediaWiki版本:
1.5

page表可以称为“wiki的核心”。 MediaWiki中的每一个页面都在这张表中有一条使用标题作为标识的记录(entry),包含基本元数据。 这张表第一次被引入是在r6710,MediaWiki1.5的版本中。

页面中的文字存储在text 表中。 查找条目时,MediaWiki首先在page表中的page_title字段进行搜寻。 然后,使用page_latestrevision 表中搜索rev_id ,并在此过程中获得rev_text_id 。 为rev_text_id 获取的值用于在文本表中搜索old_id 以检索文本。 删除页面后,修订将移动到archive 表。

如果你想手动从数据库中完全删除一个页面,记得把这个页面在page表中的项以及revision表中的所有页面历史都删除,并且确保所有text行仅仅对于text表中的那个页面。 这可以通过删除page行,然后运行maintenance/deleteOrphanedRevisions.php。 另请参见以下方法。

字段

page_id

唯一标识主键值 这个值会在所有编辑与移动操作中保持。

当页面移动时,页面ID不会更改,但当页面删除然后恢复时,页面ID可能会更改。 从MediaWiki 1.27开始,历史页面ID保留在archive 表中,恢复后的页面尝试回收其旧页面ID。

For further information, see:

page_namespace

页面名称被分解为命名空间和标题。 The namespace keys are UI-language-independent constants, defined in includes/Defines.php.

此字段包含页面的名称空间的编号。 对于核心名称空间,值的范围为0到99,对于自定义名称空间,值的范围为100到10,000。

page_title

经过清理的页面标题,不带命名空间,最多255个字符(二进制)。 它能存储为文本,並將空格替换为下划线。 文章中显示的真正标题只是将下划线(_)转换为空格( )的标题。 例如,标题为“Talk:Foo Bar”的页面在该字段中将显示“Foo_Bar”。

page_is_redirect

这里的值“1”表示文章是重定向的;在所有其他情况下为“0”。

page_is_new

此字段存储页面是否为新页面,这意味着页面可能只有一个修订版本,或者自创建以来未被编辑过,即使有多个修订版本也是如此。 如果该字段包含值“1”,则表示该页面是新的;否则为“0”。 如果页面是新的,则不会显示回滚链接,因为没有东西可以回滚。

page_random

随机十进制值,介于0和1之间,用于Special:Random(有关详细信息,请参阅Manual:Random page )。wfRandom() 產生

在2005年左右,一个错误导致这些随机值不一致。 由于该字段是在页面创建时设置的,因此长期存在的维基可能仍具有其中的一些错误值。 见Bug #T208909 See T208909.

page_touched

时间戳在页面发生更改时更新,需要重新呈现,从而使缓存失效。 除了编辑之外,还包括权限更改、链接页面的创建或删除以及包含模板的更改。 在创建页面时设置$dbw->timestamp()

page_links_updated

MediaWiki版本:
1.23

每当重新解析页面时,都会更新此时间戳,并为其更新所有链接跟踪表。 这对于删除昂贵的反向链接更新作业非常有用。 当页面由WikiPage::insertOn() 创建时,设置为缺省值NULL。

page_latest

这是当前修订版本的rev_id的外键。 在页面创建过程中可能为0。 它需要链接到具有有效的Revision.rev_page的修订版本,否则当用户尝试查看该页面时,将会出现“页面“foo”的修订版#0不存在”的错误。 可以通过WikiPage::getLatest()获得。

page_len

页面当前源文本的未压缩长度(以字节为单位)。

但是,这不适用于在该表中仍有记录的图像。 相反,使用文件的描述的未压缩长度,因为后者在ext.old_text字段中。

includes/WikiPage.php中的Wikipage类有两个方法,即负责填充这些详细信息的intertOn()updateRevisionOn()

page_content_model

MediaWiki版本:
1.21

内容模型,请参阅Content_Model_XXX常量。 相当于revision.rev_content_model

page_lang

MediaWiki版本:
1.24

页面的内容语言 设置为创建页面时的默认值NULL。

page_restrictions

MediaWiki版本:
1.9

一组用逗号分隔的权限键,指示谁可以移动或编辑页面。 编辑节和移动节之间用冒号分隔(例如,EDIT=AUTOMATED,SYSOP:MOVE=SYSOP,这串代码代表允许“自动确认用户、管理员”编辑,允许“管理员”移动)。

MediaWiki版本:
1.10 – 1.38
从MediaWiki 1.10开始,页面保护控制已移动到page_restrictions ,因此此字段将在MediaWiki的当前版本生成的数据库中为空。 (在版本1.39移除)

page_counter

MediaWiki版本:
1.24

页面被查看的次数。 经过一个RFC流程,该功能在MediaWiki 1.25中被完全删除。 在此之前,许多网站,包括维基媒体项目禁用它,以提高性能;有关详细信息, 请参阅手册:$wgDisableCounters


架构摘要

MediaWiki版本:
1.36
Gerrit change 690067

DESCRIBE page;

+--------------------+---------------------+------+-----+---------+----------------+
| Field              | Type                | Null | Key | Default | Extra          |
+--------------------+---------------------+------+-----+---------+----------------+
| page_id            | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| page_namespace     | int(11)             | NO   | MUL | NULL    |                |
| page_title         | varbinary(255)      | NO   |     | NULL    |                |
| page_restrictions  | tinyblob            | YES  |     | NULL    |                |
| page_is_redirect   | tinyint(3) unsigned | NO   | MUL | 0       |                |
| page_is_new        | tinyint(3) unsigned | NO   |     | 0       |                |
| page_random        | double unsigned     | NO   | MUL | NULL    |                |
| page_touched       | binary(14)          | NO   |     | NULL    |                |
| page_links_updated | varbinary(14)       | YES  |     | NULL    |                |
| page_latest        | int(10) unsigned    | NO   |     | NULL    |                |
| page_len           | int(10) unsigned    | NO   | MUL | NULL    |                |
| page_content_model | varbinary(32)       | YES  |     | NULL    |                |
| page_lang          | varbinary(35)       | YES  |     | NULL    |                |
+--------------------+---------------------+------+-----+---------+----------------+
MediaWiki版本:
1.35
Gerrit change 581141

DESCRIBE page;

+--------------------+---------------------+------+-----+----------------+----------------+
| Field              | Type                | Null | Key | Default        | Extra          |
+--------------------+---------------------+------+-----+----------------+----------------+
| page_id            | int(10) unsigned    | NO   | PRI | NULL           | auto_increment |
| page_namespace     | int(11)             | NO   | MUL | NULL           |                |
| page_title         | varbinary(255)      | NO   |     | NULL           |                |
| page_restrictions  | tinyblob            | YES  |     | NULL           |                |
| page_is_redirect   | tinyint(3) unsigned | NO   | MUL | 0              |                |
| page_is_new        | tinyint(3) unsigned | NO   |     | 0              |                |
| page_random        | double unsigned     | NO   | MUL | NULL           |                |
| page_touched       | binary(14)          | NO   |     |                |                |
| page_links_updated | varbinary(14)       | YES  |     | NULL           |                |
| page_latest        | int(10) unsigned    | NO   |     | NULL           |                |
| page_len           | int(10) unsigned    | NO   | MUL | NULL           |                |
| page_content_model | varbinary(32)       | YES  |     | NULL           |                |
| page_lang          | varbinary(35)       | YES  |     | NULL           |                |
+--------------------+---------------------+------+-----+----------------+----------------+
MediaWiki版本:
1.25 – 1.34
Gerrit change 167655

DESCRIBE page;

+--------------------+---------------------+------+-----+----------------+----------------+
| Field              | Type                | Null | Key | Default        | Extra          |
+--------------------+---------------------+------+-----+----------------+----------------+
| page_id            | int(10) unsigned    | NO   | PRI | NULL           | auto_increment |
| page_namespace     | int(11)             | NO   | MUL | NULL           |                |
| page_title         | varbinary(255)      | NO   |     | NULL           |                |
| page_restrictions  | tinyblob            | NO   |     | NULL           |                |
| page_is_redirect   | tinyint(3) unsigned | NO   | MUL | 0              |                |
| page_is_new        | tinyint(3) unsigned | NO   |     | 0              |                |
| page_random        | double unsigned     | NO   | MUL | NULL           |                |
| page_touched       | binary(14)          | NO   |     |                |                |
| page_links_updated | varbinary(14)       | YES  |     | NULL           |                |
| page_latest        | int(10) unsigned    | NO   |     | NULL           |                |
| page_len           | int(10) unsigned    | NO   | MUL | NULL           |                |
| page_content_model | varbinary(32)       | YES  |     | NULL           |                |
| page_lang          | varbinary(35)       | YES  |     | NULL           |                |
+--------------------+---------------------+------+-----+----------------+----------------+
MediaWiki版本:
1.24
Gerrit change 135312

DESCRIBE page;

+--------------------+---------------------+------+-----+---------+----------------+
| Field              | Type                | Null | Key | Default | Extra          |
+--------------------+---------------------+------+-----+---------+----------------+
| page_id            | int(10) unsigned    | NO   | PRI | NULL    | AUTO_INCREMENT |
| page_namespace     | int(11)             | NO   | MUL | NULL    |                |
| page_title         | varchar(255) binary | NO   |     | NULL    |                |
| page_restrictions  | tinyblob            | NO   |     | NULL    |                |
| page_counter       | bigint(20) unsigned | NO   |     | 0       |                |
| page_is_redirect   | tinyint(3) unsigned | NO   | MUL | 0       |                |
| page_is_new        | tinyint(3) unsigned | NO   |     | 0       |                |
| page_random        | real unsigned       | NO   | MUL | NULL    |                |
| page_touched       | binary(14)          | NO   |     | NULL    |                |
| page_links_updated | varbinary(14)       | YES  |     | NULL    |                |
| page_latest        | int(10) unsigned    | NO   |     | NULL    |                |
| page_len           | int(10) unsigned    | NO   | MUL | NULL    |                |
| page_content_model | varbinary(32)       | YES  |     | NULL    |                |
| page_lang          | varbinary(35)       | YES  |     | NULL    |                |
+--------------------+---------------------+------+-----+---------+----------------+
MediaWiki版本:
1.23
Gerrit change 101170

DESCRIBE page;

+--------------------+---------------------+------+-----+---------+----------------+
| Field              | Type                | Null | Key | Default | Extra          |
+--------------------+---------------------+------+-----+---------+----------------+
| page_id            | int(10) unsigned    | NO   | PRI | NULL    | AUTO_INCREMENT |
| page_namespace     | int(11)             | NO   | MUL | NULL    |                |
| page_title         | varchar(255) binary | NO   |     | NULL    |                |
| page_restrictions  | tinyblob            | NO   |     | NULL    |                |
| page_counter       | bigint(20) unsigned | NO   |     | 0       |                |
| page_is_redirect   | tinyint(3) unsigned | NO   | MUL | 0       |                |
| page_is_new        | tinyint(3) unsigned | NO   |     | 0       |                |
| page_random        | real unsigned       | NO   | MUL | NULL    |                |
| page_touched       | binary(14)          | NO   |     | NULL    |                |
| page_links_updated | varbinary(14)       | YES  |     | NULL    |                |
| page_latest        | int(10) unsigned    | NO   |     | NULL    |                |
| page_len           | int(10) unsigned    | NO   | MUL | NULL    |                |
| page_content_model | varbinary(32)       | YES  |     | NULL    |                |
+--------------------+---------------------+------+-----+---------+----------------+
MediaWiki版本:
1.21 – 1.22

DESCRIBE page;

+--------------------+---------------------+------+-----+---------+----------------+
| Field              | Type                | Null | Key | Default | Extra          |
+--------------------+---------------------+------+-----+---------+----------------+
| page_id            | int(10) unsigned    | NO   | PRI | NULL    | AUTO_INCREMENT |
| page_namespace     | int(11)             | NO   | MUL | NULL    |                |
| page_title         | varchar(255) binary | NO   |     | NULL    |                |
| page_restrictions  | tinyblob            | NO   |     | NULL    |                |
| page_counter       | bigint(20) unsigned | NO   |     | 0       |                |
| page_is_redirect   | tinyint(3) unsigned | NO   | MUL | 0       |                |
| page_is_new        | tinyint(3) unsigned | NO   |     | 0       |                |
| page_random        | real unsigned       | NO   | MUL | NULL    |                |
| page_touched       | binary(14)          | NO   |     | NULL    |                |
| page_latest        | int(10) unsigned    | NO   |     | NULL    |                |
| page_len           | int(10) unsigned    | NO   | MUL | NULL    |                |
| page_content_model | varbinary(32)       | YES  |     | NULL    |                |
+--------------------+---------------------+------+-----+---------+----------------+
MediaWiki版本:
1.19 – 1.20

DESCRIBE page;

+-------------------+---------------------+------+-----+---------+----------------+
| Field             | Type                | Null | Key | Default | Extra          |
+-------------------+---------------------+------+-----+---------+----------------+
| page_id           | int(10) unsigned    | NO   | PRI | NULL    | AUTO_INCREMENT |
| page_namespace    | int(11)             | NO   | MUL | NULL    |                |
| page_title        | varchar(255) binary | NO   |     | NULL    |                |
| page_restrictions | tinyblob            | NO   |     | NULL    |                |
| page_counter      | bigint(20) unsigned | NO   |     | 0       |                |
| page_is_redirect  | tinyint(3) unsigned | NO   | MUL | 0       |                |
| page_is_new       | tinyint(3) unsigned | NO   |     | 0       |                |
| page_random       | real unsigned       | NO   | MUL | NULL    |                |
| page_touched      | binary(14)          | NO   |     | NULL    |                |
| page_latest       | int(10) unsigned    | NO   |     | NULL    |                |
| page_len          | int(10) unsigned    | NO   | MUL | NULL    |                |
+-------------------+---------------------+------+-----+---------+----------------+
MediaWiki版本:
1.10 – 1.18

DESCRIBE page;

+-------------------+---------------------+------+-----+---------+----------------+
| Field             | Type                | Null | Key | Default | Extra          |
+-------------------+---------------------+------+-----+---------+----------------+
| page_id           | int(10) unsigned    | NO   | PRI | NULL    | AUTO_INCREMENT |
| page_namespace    | int(11)             | NO   | MUL | NULL    |                |
| page_title        | varchar(255) binary | NO   |     | NULL    |                |
| page_restrictions | tinyblob            | NO   |     | NULL    |                |
| page_counter      | bigint(20) unsigned | NO   |     | 0       |                |
| page_is_redirect  | tinyint(3) unsigned | NO   |     | 0       |                |
| page_is_new       | tinyint(3) unsigned | NO   |     | 0       |                |
| page_random       | real unsigned       | NO   | MUL | NULL    |                |
| page_touched      | binary(14)          | NO   |     | NULL    |                |
| page_latest       | int(10) unsigned    | NO   |     | NULL    |                |
| page_len          | int(10) unsigned    | NO   | MUL | NULL    |                |
+-------------------+---------------------+------+-----+---------+----------------+
MediaWiki版本:
1.5 – 1.9

DESCRIBE page;

+-------------------+---------------------+------+-----+---------+----------------+
| Field             | Type                | Null | Key | Default | Extra          |
+-------------------+---------------------+------+-----+---------+----------------+
| page_id           | int(8) unsigned     | NO   | PRI | NULL    | AUTO_INCREMENT |
| page_namespace    | int(11)             | NO   | MUL | NULL    |                |
| page_title        | varchar(255) binary | NO   |     | NULL    |                |
| page_restrictions | tinyblob            | NO   |     | NULL    |                |
| page_counter      | bigint(20) unsigned | NO   |     | 0       |                |
| page_is_redirect  | tinyint(1) unsigned | NO   |     | 0       |                |
| page_is_new       | tinyint(1) unsigned | NO   |     | 0       |                |
| page_random       | real unsigned       | NO   | MUL | NULL    |                |
| page_touched      | char(14) binary     | NO   |     | NULL    |                |
| page_latest       | int(8) unsigned     | NO   |     | NULL    |                |
| page_len          | int(8) unsigned     | NO   | MUL | NULL    |                |
+-------------------+---------------------+------+-----+---------+----------------+

索引

MediaWiki版本:
1.28

SHOW INDEX IN page;

+-------+------------+-----------------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name                    | Seq_in_index | Column_name      | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+-----------------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| page  |          0 | PRIMARY                     |            1 | page_id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          0 | page_name_title             |            1 | page_namespace   | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          0 | page_name_title             |            2 | page_title       | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          1 | page_random                 |            1 | page_random      | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          1 | page_len                    |            1 | page_len         | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          1 | page_redirect_namespace_len |            1 | page_is_redirect | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          1 | page_redirect_namespace_len |            2 | page_namespace   | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          1 | page_redirect_namespace_len |            3 | page_len         | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
+-------+------------+-----------------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

示例MySQL代码

列出页面以及与其他基本表格的关系

以下代码将选择所有文章的最新版本,假设压缩外部存储系统未在使用中:

SELECT page_id, page_namespace, page_title, page_latest "rev_id", old_text "text"
   FROM page
   INNER JOIN slots on page_latest = slot_revision_id
   INNER JOIN slot_roles on slot_role_id = role_id and role_name = 'main'
   INNER JOIN content on slot_content_id = content_id inner join text on substring( content_address, 4 ) = old_id and left( content_address, 3 ) = "tt:" and old_flags = "utf-8";

其它重要考虑:

  • 要在名字空间中查找页面,请添加p.page_namespace = 0
  • 要查找不是重定向的页面,请添加p.page_is_redirect = 0

这些附加语句可以作为条件添加到WHERE语句中,也可以作为相应的INNER JOIN语句上的条件添加。

參見