Manual:page表
| MediaWiki版本: | ≥ 1.5 |
page表可以被視為为是“wiki的核心”。 在MediaWiki中的每一个页面都在这张表中有一条以标题作为识別的entry,其包含有一些不可缺的元数据。 此表是在r6710首次被引入,是在MediaWiki1.5的版本。
页面本身的文字內容則存储在text表中。
在典型的頁面檢視過程中想要取回某個條目的內容,MediaWiki會先根據 page_namespace 和 page_title(對應URL中所提供的頁面名稱)搜尋在 page 表中的資料row。
然后,使用page_latest搜索在revision表中rev_id,并在此过程中获得rev_text_id。
rev_text_id所获取的值用于搜索在text表中的old_id以取回文本。
某個页面被删除后,其修订版本的內容将被移动到archive表。
page表中的项以及revision表中的页面修訂版本的全部內容都删除、再加上仅仅对于text表中的那个页面所對應的全部textrow內容都删除。 这可以通过删除頁面的row、然后运行maintenance/deleteOrphanedRevisions.php,來達成。
字段
page_id
是獨一無二可识別的主键。 这个值会在所有编辑与重命名的操作中被保持不變。
当页面移动时,页面ID不会更改,但当页面删除然后恢复时,页面ID可能会更改。 从MediaWiki 1.27开始,過往的页面ID持續存在於archive表中、且被恢复后的页面會試圖取回其旧页面ID。
需要更多的信息,请参见:
- Help:Page ID - 針對使用者。
- Manual:Page ID - 針對開發人員。
page_namespace
页面名称被拆解为命名空间和标题。 命名空間的鍵是與使用者介面語言無關的常數,其定義於includes/Defines.php。
此字段包含页面的命名空間的编号。 对于核心命名空間,值的范围为0到99;对于自定义命名空間,值的范围为100到10,000。
page_title
经过清理的页面标题,不带命名空间,最多255个字符(binary)。 它能存储为文本,並將空格替换为下划线。 文章中显示的真正标题只是将下划线(_)转换为空格( )的标题。 例如,标题为“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。
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
页面当前源文本的未压缩长度(以字节为单位)。
但是,这不适用于在该表中仍有记录的图像。
相反,使用文件的description的未压缩长度,因为后者在text.old_text字段中。
includes/WikiPage.php中的Wikipage类有两个方法,即负责填充这些详细信息的insertOn()和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=autoconfirmed,sysop:move=sysop")。
| MediaWiki版本: | 1.10 – 1.38 |
page_counter
| MediaWiki版本: | ≤ 1.24 |
页面被查看的次数。 经过一个RFC流程,该功能在MediaWiki 1.25中被完全删除。 在此之前,许多网站,包括维基媒体项目禁用它,以提高性能;有关详细信息, 请参阅手册:$wgDisableCounters。
titlevector
- 「僅」由PostgreSQL使用
用於取代PostgreSQL的searchindex資料表,以利於全文的搜尋功能。
架构摘要
| MediaWiki版本: | ≥ 1.43 |
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_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 | binary(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.39 – 1.42 |
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_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.36 – 1.38 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语句上的条件添加。