Mediawiki 資料表說明:修訂版本之間的差異

出自六年制學程
跳轉到: 導覽搜尋
(新頁面: 分類:Mediawiki ==各版本資料表異動== ===1.17到1.21=== *增加四張表 *#wiki_site_identifiers 保留網站相關認證 *#wiki_sites 保存wiki網站相關訊息 *#wiki_u...)
 
建新頁(1.31 版後,完整)
 
(未顯示2位用戶所作出之98次版本)
第 1 行: 第 1 行:
 
[[分類:Mediawiki]]
 
[[分類:Mediawiki]]
 
==各版本資料表異動==
 
==各版本資料表異動==
 +
*mediawiki 的 maintenance 目錄下的 <span style='color:brown'>tables.sql</span> ,紀錄了諸核心資料表的結構。比較不同版本的這個檔案內容,即可找出資料表異動處。但若調動段落次序,文件比較軟體就無能為力了。
 +
*解析程式1在:「http://jendo.org/study/wikiStudy/wikiTable.php?wiki1=資料庫名1&wiki2=資料庫名2」,找出兩個版本資料表增刪的情形。
 +
*解析程式1在:「http://well-being-ng.net/study/wikiStudy/tableRecord.php」,新增一頁wiki後,找出哪些資料表筆數異動的情形。
 +
*資料表說明文件在:[https://www.mediawiki.org/wiki/Manual:Page_table/zh https://www.mediawiki.org/wiki/Manual:表名_table]
 +
*請見 2014.8.26 丁丁寄給士賢的信
 +
*[[Mediawiki_諸site]] 表列各伺服器上的 mediawiki 版本
 
===1.17到1.21===
 
===1.17到1.21===
 
*增加四張表
 
*增加四張表
 
*#wiki_site_identifiers 保留網站相關認證
 
*#wiki_site_identifiers 保留網站相關認證
*#wiki_sites 保存wiki網站相關訊息
+
*#wiki_sites 保存 wiki 網站相關訊息
 
*#wiki_uploadstash 保存檔上傳時(上傳完成前)的資訊
 
*#wiki_uploadstash 保存檔上傳時(上傳完成前)的資訊
 
*#wiki_user_former_groups 保存使用者曾經所在的族群
 
*#wiki_user_former_groups 保存使用者曾經所在的族群
 +
*擴展新增的資料表
 +
*# wiki_math:數學模組用來來追蹤先前算圖的項目。此表在 1.18 版起未被使用,可安全刪除。它過去是,現在仍然被用作數學模組增強功能的一部分,但是,沒有核心軟體需要它。
 
*減去一張表
 
*減去一張表
 
*#wiki_trackbacks 可以加入一個引用到資料中
 
*#wiki_trackbacks 可以加入一個引用到資料中
  
 
===1.21到1.22===
 
===1.21到1.22===
*減去一張表
+
資料表全同
*#wiki_math 可以加入數學公式語法<math> ... </math>
+
  
 
===1.22到1.23===
 
===1.22到1.23===
*減去一張表
+
減去一張表
*#wiki_external_user
+
:wiki_external_user:在使用認證插件後,追蹤外部用戶帳號。在 1.22 版中連同外部驗證功能被移除。此後應該改用 AuthManager 。
 +
 
 +
===1.23 諸版本===
 +
wikiGrade1(1.23.2)~wiki1231,wellBeingNg(1.23.10):資料表全同
 +
 
 +
===1.23~1.30.0===
 +
[http://jendo.org/study/wikiStudy/wikiTable.php?wiki1=wiki1232&wiki2=WUTD 資料表比對]
 +
 
 +
'''減去三張表'''
 +
* wiki_hitcounter:點擊計數器。1.25 版後自核心刪除,改為擴充功能;1.26 版刪除資料表。
 +
* wiki_msg_resource:用於訊息的快取,以 JSON 語法編成二元資料。1.27 版後刪除資料表。
 +
* wiki_msg_resource_links:決取的 resource 與 message 對照表。1.27 版後刪除資料表。
 +
'''增加五張表'''<br/>(一)增加機器人使用者:
 +
* wiki_bot_passwords:存機器人使用者的帳號資料。使用機器人帳戶可以在不使用主帳戶密碼的情況下進行身份驗證,以提高安全性,因為它們可以隨時撤銷,且可以限制機器人的訪問範圍。
 +
*#bp_id:機器人密碼的唯一識別碼。
 +
*#bp_user:機器人帳戶相關的主帳戶用戶 ID 。它與主帳戶表中的用戶 ID 關聯。
 +
*#bp_app_id:這是應用程序的識別碼。每個機器人密碼可以指定應用於特定應用程序。
 +
*#bp_password:這是機器人密碼,通常以某種加密形式存儲。
 +
*#bp_token:與機器人密碼關聯的安全令牌。
 +
*#bp_restrictions:這包含 JSON 格式的資料,指定機器人帳戶的訪問限制。例如,可以限制機器人只能讀取特定的命名空間或執行特定的操作。
 +
*#bp_grants:這也是 JSON 格式的資料,包含授予機器人帳戶的權限。這些權限決定機器人可以執行哪些類型的操作,例如編輯頁面、移動頁面等。
 +
(二)改變編輯記錄的註解<br/>
 +
[https://www.mediawiki.org/w/index.php?title=Manual:Log_actions/zh&variant=zh-tw 日誌操作所有定義的總表]
 +
* wiki_revision_comment_temp
 +
*#revcomment_rev 指示版本 id
 +
*#revcomment_comment_id 指示註解的 id
 +
* wiki_comment:對每一次使用者的編輯動作加以註解,產生新頁時由 logging 表參考,不產生新頁是由 revision_comment_temp 表參考。欄位如下:
 +
*#comment_id:流水號識別碼
 +
*#comment_hash:comment_text 取 CRC32 值和 comment_data 取 CRC32 值兩者進行 XOR(互斥或)運算。CRC32 (Cyclic Redundancy Check 32) 會產生一個 32 位(4 byte)的整數(hash 哈希值)。
 +
*#comment_text:編輯動作註解。
 +
*#*使用者自訂:編輯頁面時由「摘要」輸入框填入。
 +
*#*系統預設值:
 +
*#**不產生新頁時:
 +
*#**# 「/* 段落名 */」,所以同一段多次編輯,是使用同一筆 comment_id
 +
*#**# 頁面內容被替換為「……」
 +
*#**# 清空全部內容
 +
*#**# 「取消由[[Special:Contributions/丁志仁|丁志仁]]([[User talk:丁志仁|討論]])所作出的修訂2884」
 +
*#**產生新頁時:
 +
*#**# 空字串
 +
*#**# 「建立空白頁面」,所以多次建立空白頁面,是使用同一筆 comment_id
 +
*#**# 建立內容為「……」的新頁面
 +
*#**# 上傳檔案時,關於檔案的摘要說明。多數上傳圖檔「摘要」框均空白。結果就參照到 comment_id=1,無 comment_text
 +
*#**# 建立帳號時,多數「原因」框使均空白。結果就參照到 comment_id=1,無 comment_text
 +
*#comment_data:目前值清一色為 NULL,其 CRC32 值是 0。任何數與 0 進行 XOR(互斥或)運算,結果都是本身。
 +
 
 +
'''舊版'''中 revision 表紀錄幾乎所有的編輯動作,但 logging 只紀錄以下五類事件:
 +
#delete:刪除一個已上傳圖照,其 log_comment 為刪除理由,如「重覆檔案」
 +
#move:重定向,其 log_comment 為空白或重定向理由,如「標題重新命名」
 +
#newusers:創造新的使用者頁,其 log_comment 為空白或使用者說明,如「新生」
 +
#patrol:修改某一頁的內容,其 log_comment 為空白
 +
#upload:上傳或覆寫一個圖照頁,其 log_comment 為空白或圖照說明
 +
'''新版'''中 logging 去除修改某一頁內容的過程紀錄,只紀錄頁的生成或消滅事件:
 +
#新建重定向頁:同時產生兩筆紀錄,move/move 指示重定向的目的地與放重定向指示的 text_id;create/create 指示目的地頁的 text_id,其 log_comment 為空白或重定向理由,如「標題重新命名」
 +
#創造新的使用者頁:同時產生兩筆紀錄,newusers 指示 user_id ,其 log_comment 為空白或使用者說明,如「新生」;create/create 指示使用者頁的 text_id。,其 log_comment 為「已建立頁面…」。
 +
#*newusers 的 log_action='create':自己所建,須系統開放使用者自建帳號
 +
#*newusers 的 log_action='create2':他人所建
 +
#上傳一個圖照頁:同時產生兩筆紀錄,upload/upload 指示圖照的 sha1,時間戳記,text_id;create/create 指示圖照的 text_id。其 log_comment 為空白或圖照說明。
 +
#新建其他頁:只產生一筆紀錄,create/create 指示頁的 text_id。其 log_comment 為 建立空白頁面 或 建立內容為「…」的新頁面 或 已建立頁面,內容為 "…"。
 +
 
 +
而版本修改的註解已不放在 wiki_revision 表的 rev_comment 欄,而是放在 wiki_revision_comment_temp 表中,其對應的註解通常為「/* … */」。
 +
 
 +
wiki_comment 則匯整 logging 表的註解與 revision 表的註解,每一註解文字串有唯一的 id 。
 +
 
 +
(三)記錄非註冊者貢獻:
 +
當每次儲存非登入者的編輯時,都記下其 ip 。供「特殊:使用者貢獻」時,可以列出。
 +
* wiki_ip_changes
 +
*#ipc_rev_id:流水號
 +
*#ipc_rev_timestamp:時間戳
 +
*#ipc_hex:ip
 +
 
 +
(四)短暫存在的表:
 +
* wiki_image_comment_temp:僅短暫存在於 1.30~1.31 版,1.32 版之後刪除
 +
 
 
==1.17 版==
 
==1.17 版==
 
共 49 張資料表
 
共 49 張資料表
第 28 行: 第 107 行:
  
 
==頁資料表==
 
==頁資料表==
7 表。
+
1.31 版之前諸表對應關係(表名省略前綴)
 +
<table class=nicetable>
 +
<tr><th>table</th> <th>page</th> <th style='border-bottom:none'></th> <th>revision</th> <th style='border-bottom:none'></th> <th>text</th></tr>
 +
<tr><th rowspan=2>field</th> <td>page_id</td><th rowspan=2 style='border-top:none'>↘</th> <td>rev_text_id</td> <th rowspan=2 style='border-top:none'>↘</th> <td></td></tr>
 +
<tr> <td></td> <td>rev_page</td> <td>old_id</td></tr>
 +
</table>
 +
1.31 版之後(含)諸表對應關係(表名省略前綴)
 +
<table class=nicetable>
 +
<tr><th>table</th> <th>page</th> <th style='border-bottom:none'></th> <th>revision</th><th style='border-bottom:none'></th> <th>slots</th> <th style='border-bottom:none'></th> <th>content</th> <th style='border-bottom:none'></th> <th>text</th></tr>
 +
<tr><th rowspan=2>field</th> <td>page_id</td><th rowspan=2 style='border-top:none'>↘</th> <td>rev_id</td> <th rowspan=2 style='border-top:none'>↘</th> <td>slot_content_id</td><th rowspan=2 style='border-top:none'>↘</th> <td>content_address</td><th rowspan=2 style='border-top:none'>↘</th> <td></td></tr>
 +
<tr> <td></td> <td>rev_page</td> <td>slot_revision_id</td> <td>content_id</td> <td>old_id</td></tr>
 +
</table>
 +
※content_address 欄之欄值用「tt:<id>」表示,而 <id> 是 text.old_id 。<br/>&emsp;但使用外部存儲時 content_address 欄的欄值表示可能會有所不同。
 +
*不過1.31 版之後經測試可以有以下化簡的對應關係
 +
<table class=nicetable style='margin-left:24pt'>
 +
<tr><th>table</th> <th>page</th> <th style='border-bottom:none'></th> <th>revision</th> <th style='border-bottom:none'></th> <th>text</th></tr>
 +
<tr><th rowspan=2>field</th> <td>page_id</td><th rowspan=2 style='border-top:none'>↘</th> <td>rev_id</td> <th rowspan=2 style='border-top:none'>↘</th> <td></td></tr>
 +
<tr> <td></td> <td>rev_page</td> <td>old_id</td></tr>
 +
</table>
 +
 
 +
頁資料表在 1.31 版之前共 7 表。
 +
 
 +
1.31 版之後共 9 表。
  
 
核心三表:
 
核心三表:
第 39 行: 第 140 行:
 
#wiki_recentchanges 以異動為主體,列出每一次異動的重點。
 
#wiki_recentchanges 以異動為主體,列出每一次異動的重點。
 
#wiki_page_props 特殊表現
 
#wiki_page_props 特殊表現
 +
 +
1.31 版之後增加兩表
 +
#wiki_slots
 +
#wiki_content
 +
 +
*wiki_slots
 +
*#slot_revision_id:參考到 revision.rev_id 或 archive.ar_rev_id。 slot_revision_id 和 slot_role_id 一起構成主鍵。
 +
*#slot_role_id:參考 slot_roles 表的 role_id 欄,目前只發現一種 role_id 的值,即 1 ,代表的 role 是 main。
 +
*#slot_content_id:參考 content.content_id 。
 +
*#slot_origin:修訂版本的 revision.rev_id 其實是源自於插槽的內容。要查找更改了插槽的修訂,請查找 slot_origin = slot_revision_id。
 +
*wiki_content
 +
*#content_id:內容物件的 ID
 +
*#content_size:內容物件的標稱大小
 +
*#content_sha1:內容物件的名義哈希值
 +
*#content_model:參考 content_models 表的 model_id 欄。1 為 wikitext,2 為 css 。請注意,如未指定序列化格式;除非自動檢測到,否則應假定其採用模型的預設格式。
 +
*#content_address:結構通常為: tt:<id> 其中 <id> 是引用 text 表的 old_id 欄的值。使用外部存儲時可能會有所不同。
  
 
*wiki_page 頁碼、頁名
 
*wiki_page 頁碼、頁名
第 49 行: 第 166 行:
 
*#page_is_new:是否新建頁,其值為0或1,1為新頁面。
 
*#page_is_new:是否新建頁,其值為0或1,1為新頁面。
 
*#page_random:0至1的隨機數,用在隨機頁面的功能。
 
*#page_random:0至1的隨機數,用在隨機頁面的功能。
*#page_touched:頁最後被重新給予的年月日時分秒
+
*#page_touched:時間戳記(年月日時分秒),當頁面需要重新排版時會更新,以使快取失效,包括:編輯後、權限更改、創建鏈接頁面、刪除、模板更改,頁面創建時填入$dbw->timestamp()。預設值為'\0\0\0\0\0\0\0\0\0\0\0\0\0\0'。
 
*#page_latest:本頁最後的版本 id ,其值為revision裡的rev_id。
 
*#page_latest:本頁最後的版本 id ,其值為revision裡的rev_id。
 
*#page_len:頁長度,檔案則為註解長度,為原始Wiki語法統計的Bytes數。
 
*#page_len:頁長度,檔案則為註解長度,為原始Wiki語法統計的Bytes數。
 +
*#page_content_model:內容模型,1.21版之後的新增欄位,有五種值:wikitext(含檔案)、javascript、css、text、json。和 revision 表中的 rev_content_model 欄同值;後者在1.31版本中棄用。
 +
*#page_links_updated:1.23版之後的新增欄位,重新解析 wiki 頁時,更新此時間戳記,並更新所有的連結跟蹤表。
 
*wiki_text 頁內文(整合各段)
 
*wiki_text 頁內文(整合各段)
 
*#old_id:過程頁編碼
 
*#old_id:過程頁編碼
第 95 行: 第 214 行:
 
*#pp_value:特性值,如 notoc 不需要值
 
*#pp_value:特性值,如 notoc 不需要值
  
===建新頁===
+
===建新頁(1.30 版前,完整)===
#wiki_page 新增一筆,得到頁碼。
+
#wiki_revision 新增一筆,得到內文編碼
+
 
#wiki_text 新增一筆,塞入內文,換頁碼時免改。
 
#wiki_text 新增一筆,塞入內文,換頁碼時免改。
 +
#wiki_page 新增一筆,得到頁碼。
 +
#wiki_revision 新增一筆,取用內文編碼與頁碼。
 
#wiki_searchindex 增一筆,頁名、內文編成 ASCII code
 
#wiki_searchindex 增一筆,頁名、內文編成 ASCII code
 
#wiki_pagelinks 增0-數筆,列出本頁產生的各內部連結
 
#wiki_pagelinks 增0-數筆,列出本頁產生的各內部連結
 
#wiki_externallinks 增0-數筆,列出本頁產生的各外部連結
 
#wiki_externallinks 增0-數筆,列出本頁產生的各外部連結
 
#wiki_logging 增一筆,記入時間、帳號、版本編碼、父版本編碼
 
#wiki_logging 增一筆,記入時間、帳號、版本編碼、父版本編碼
 +
====手動插入一頁 wiki 示例:====
 +
'''內容三表:'''
 +
*wiki_text 指定 ID 新增一筆。如:
 +
<pre style='margin-left:24pt'>insert into wiki_text set
 +
old_id=7909,
 +
old_text='',
 +
old_flags='utf-8'</pre>
 +
*wiki_page 指定 ID 新增一筆。如:
 +
<pre style='margin-left:24pt'>insert into wiki_page set
 +
page_id=1167,
 +
page_namespace=14,
 +
page_title='CSS',
 +
page_restrictions='',
 +
page_counter=1,
 +
page_is_redirect=0,
 +
page_is_new=1,
 +
page_random=0.825167104571,
 +
page_touched='20150629000000',
 +
page_links_updated='20150629000000',
 +
page_latest=7909,
 +
page_len='0',
 +
page_content_model='wikitext',
 +
domain='',
 +
unit=''</pre>
 +
*wiki_revision 指定 ID 新增一筆。如:
 +
<pre style='margin-left:24pt'>insert into wiki_revision set
 +
rev_id=7921,
 +
rev_page=1167,
 +
rev_text_id=7909,
 +
rev_comment='新頁面:…',
 +
rev_user=1,
 +
rev_user_text='丁志仁',
 +
rev_timestamp='20150629000000',
 +
rev_minor_edit=0,
 +
rev_deleted=0,
 +
rev_len=0,
 +
rev_parent_id=0,
 +
rev_sha1='phoiac9h4m842xq45sp7s6u21eteeq1'</pre>
 +
:※說明:
 +
:#當 rev_len=0 時 rev_sha1之值為「phoiac9h4m842xq45sp7s6u21eteeq1」
 +
:#rev_comment 一定要寫明「新頁面:…」,否則無法往下一個版本編輯。由於本欄屬性是註解,到底是什麼性質的頁面,系統不檢查。
 +
'''日誌一表:'''<pre>
 +
insert into wiki_logging set
 +
log_type='patrol',
 +
log_action='patrol',
 +
log_timestamp='20150629000000',
 +
log_user=1,
 +
log_user_text='丁志仁',
 +
log_namespace=14,
 +
log_title='CSS',
 +
log_page=1167,
 +
log_params='a:3:{s:8:"4::curid";i:7909;s:9:"5::previd";i:0;s:7:"6::auto";i:1;}',
 +
log_deleted=0</pre>
 +
 +
===建新頁(1.31 版後,完整)===
 +
總的流程包括三大部分:
 +
*內容五表
 +
*# 先在 text 中增一筆,其 old_id ,建其他表要用到
 +
*# 在 page 中增一筆,其 page_latest 會用到 text.old_id 相應的值
 +
*# 在 revision 中增一筆,其 rev_page 會用到 page.page_id ,其 rev_id 指示版本 id
 +
*# 在 slots 中依來源的版本 id 增一筆,同版本可以指定不同的 slot_role_id:主內容、元數據、用戶生成的注釋…,不同的 slot_role_id 可以佔用不同的 slot_content_id 。
 +
*# 在 content 表中,依不同的 slot_content_id ,去註解內容的語法格式,與在 text.old_id 的位置。
 +
*版本修訂紀錄兩表,早期是 revision 表中的兩欄,現在移出獨立成表。如果沒有相應資料,頁無法編輯,會產生 「[……] 2024-03-24 17:05:44: 嚴重例外類型 "Error"」:
 +
*# 在 wiki_revision_comment_temp 中增一筆,對應修訂版本 id 與修訂描述 id 。
 +
*# 在 wiki_revision_actor_temp 中增一筆,對應修訂版本 id 、 修訂者 id 、 頁 id 、時間戳。
 +
*日誌相關三表
 +
*# logging:日誌新增一筆
 +
*# log_search:新增一筆
 +
*# comment:編輯動作註解,通常為「建立空白頁面」,由於已多次建立空白頁,所以使用同一筆 comment_id 即可
 +
*searchindex
 +
====手動插入一頁 wiki 示例:====
 +
'''內容五表:'''
 +
*wiki_text 指定 ID 新增一筆。如:
 +
<pre style='margin-left:24pt'>insert into wiki_text set
 +
old_id=5679,
 +
old_text='',
 +
old_flags='utf-8'</pre>
 +
*wiki_page 指定 ID 新增一筆。如:
 +
<pre style='margin-left:24pt'>insert into wiki_page set
 +
page_id=161,
 +
page_namespace=14,
 +
page_title='嘉禾書院',
 +
page_restrictions='',
 +
page_is_redirect=0,
 +
page_is_new=1,
 +
page_random='0.099645685474',
 +
page_touched='20220602050041',
 +
page_links_updated='20220602045523',
 +
page_latest=5679,
 +
page_len=0,
 +
page_content_model='wikitext'</pre>
 +
*wiki_revision 指定 ID 新增一筆。如:
 +
<pre style='margin-left:24pt'>insert into wiki_revision set
 +
rev_id=5679,
 +
rev_page=161,
 +
rev_comment_id=0,
 +
rev_actor=0,
 +
rev_timestamp='20240322081500',
 +
rev_minor_edit=0,
 +
rev_deleted=0,
 +
rev_len=0,
 +
rev_parent_id=0,
 +
rev_sha1='phoiac9h4m842xq45sp7s6u21eteeq1'</pre>
 +
*wiki_revision_comment_temp 新增一筆。如:
 +
<pre style='margin-left:24pt'>insert into wiki_revision_comment_temp set
 +
revcomment_rev=5679,
 +
revcomment_comment_id=315 /* 建立空白頁面 */</pre>
 +
*wiki_revision_actor_temp 新增一筆。如:
 +
<pre style='margin-left:24pt'>insert into wiki_revision_actor_temp set
 +
revactor_rev=5679,
 +
revactor_actor=1,
 +
revactor_timestamp='20240322081500',
 +
revactor_page=161</pre>
 +
:增完上述兩表後,頁面「編輯」可用,且「檢視歷史」能順利顯示該次修訂的編輯者,時間,修訂說明
 +
*wiki_slots 版本增一插座。如:
 +
<pre style='margin-left:24pt'>insert into wiki_slots set
 +
slot_revision_id=5679,
 +
slot_role_id=1,
 +
slot_content_id=5679,
 +
slot_origin=5679</pre>
 +
*wiki_content 指示原始碼語法性質。如:
 +
<pre style='margin-left:24pt'>insert into wiki_content set
 +
content_id=5679,
 +
content_size=0,
 +
content_sha1='phoiac9h4m842xq45sp7s6u21eteeq1',
 +
content_model=1,
 +
content_address='tt:5679'</pre>
 +
*wiki_logging 日誌增一筆,紀錄新增一頁。如:
 +
<pre style='margin-left:24pt'>insert into wiki_logging set
 +
log_id=382,
 +
log_type='create',
 +
log_action='create',
 +
log_timestamp='20240320023848',
 +
log_actor='1',
 +
log_namespace=14,
 +
log_title='嘉禾書院',
 +
log_page=161,
 +
log_comment_id=315,
 +
log_params='a:1:{s:17:"associated_rev_id";i:5679;}',
 +
log_deleted=0</pre>
 +
*wiki_log_search 增一筆,紀錄新增一頁。如:
 +
<pre style='margin-left:24pt'>insert into wiki_log_search set
 +
ls_field='associated_rev_id',
 +
ls_value='5679',
 +
ls_log_id=382</pre>
 +
*wiki_searchindex 在索引檔新增一頁。如:
 +
<pre style='margin-left:24pt'>insert into wiki_searchindex set
 +
si_page=161,
 +
si_title=' u8e59889 u8e7a6be u8e69bb8 u8e999a2'</pre>
  
 
===換頁碼===
 
===換頁碼===
第 113 行: 第 381 行:
 
#wiki_searchindex 會自動重做,毋須手動處理。
 
#wiki_searchindex 會自動重做,毋須手動處理。
 
#wiki_recentchanges ,  wiki_logging ,在修改時點後會表現新頁名,毋須手動處理。
 
#wiki_recentchanges ,  wiki_logging ,在修改時點後會表現新頁名,毋須手動處理。
 +
 +
===搜尋===
 +
*目前新版的搜尋方式有分完整版與簡易版
 +
#完整版就是照著page-->revision-->slots-->content-->text一層一層慢慢搜尋下去
 +
#簡易版可以直接跳過中間的slots與content
 +
#*slots資料表中的slot_content_id與slot_revision_id數值相同(slot_revision_id則是對應到revision資料表中的rev_id)
 +
#*content資料表中content_id(與slot_content_id相同)直接對應到content_addresss(差了tt:)
 +
#*text資料表中的old_id是對應到content_id<br><br>
 +
#*所以可以按照舊的方法
 +
#**舊版對應關係:page(page_id)-->(rev_text_page)revision(rev_id)--------->(old_id)text
 +
#*將rev_text_id改為rev_id即可
 +
#**新版簡易對應關係:(page(page_id)-->(rev_page)revision(rev_id)--------->(old_id)text
 +
#*以下為範例程式:<br>select page_id from wiki_page,(select rev_page pid,max(rev_id) tid from wiki_revision group by pid order by pid) r left join wiki_text on tid=old_id where page_id=pid && page_namespace=0 && old_text LIKE '%".$str."%' order by page_id
  
 
==連結資料表==
 
==連結資料表==
第 142 行: 第 423 行:
 
*#rd_interwiki
 
*#rd_interwiki
 
*#rd_fragment
 
*#rd_fragment
*wiki_interwiki 93個跨wiki連結網站,丁丁加上中文維基百科。只能用於內部連結,不能用於嵌入
+
*[[mw:Manual:Interwiki_table/zh|wiki_interwiki]] 百多個可以跨 wiki 連結網站,丁丁再加上數個。
 
*#iw_prefix:其他網站的前置字,視為本網站的名字空間
 
*#iw_prefix:其他網站的前置字,視為本網站的名字空間
*#iw_url:網站的 URL 加上參數的位置
+
*#iw_url:網站的 URL 位置加上頁名參數
*#iw_api
+
*#iw_api:檔案 api.php 的 URL。
*#iw_wikiid
+
*#iw_wikiid:資料庫的名稱(用於使用 wfGetLB( 'wikiid' ) 建立的連線)
*#iw_local
+
*#iw_local:通知 MediaWiki 如何處理來自外部來源的維基鏈接。如果 iw_local 為'''1''',則將這些鏈接視為從本地 Wiki 內部產生。
*#iw_trans
+
*#iw_trans:允許從另一個 MediaWiki 安裝中嵌入模板(或其他頁面)。$wgEnableScaryTranscluding 和 iw_trans 都需要打開。
 
*wiki_iwlinks
 
*wiki_iwlinks
 
*#iwl_from:連往其他網站的本站共筆頁頁碼
 
*#iwl_from:連往其他網站的本站共筆頁頁碼
第 225 行: 第 506 行:
 
*#user_newpass_time:系統產生新密碼時間。
 
*#user_newpass_time:系統產生新密碼時間。
 
*#user_editcount:使用者的編輯次數。
 
*#user_editcount:使用者的編輯次數。
*wiki_user_groups 各帳號隸屬於何種群組
+
*wiki_user_groups 各帳號隸屬於何種群組,已註冊帳號預設為「使用者」,不用登錄於本表。
 
*#ug_id:使用者編號
 
*#ug_id:使用者編號
*#ug_group:使用者群組名稱,分為sysop、bureaucrat。
+
*#ug_group:使用者群組名稱,分為bureaucrat(行政員,授權者)、sysop(管理員)、interface-admin(介面管理員)…。[https://zh.wikipedia.org/wiki/Wikipedia:在編輯記錄中標示使用者權限 群組列表]、[https://zh.wikipedia.org/wiki/Wikipedia:使用者權限級別 群組/權限列表]。
 
*wiki_user_properties 各帳號的額外屬性,如有無要不要時間校正、綽號、要不要記住密碼、性別、 watch list token 等
 
*wiki_user_properties 各帳號的額外屬性,如有無要不要時間校正、綽號、要不要記住密碼、性別、 watch list token 等
 +
*#up_user:使用者編號
 +
*#up_property:屬性
 +
*#up_value:屬性值
 +
*:屬性名、值對:'''時區調整''':('timecorrection','ZoneInfo|480|Asia/Taipei');('gender','female'or'male');('language','zh-hant');'''字體'''(variant):繁體(zh-hant)、台灣正體(zh-tw);('rememberpassword','1');('watchlisttoken',隨機長字串)
 
*wiki_user_newtalk:記錄使用者討論頁面的討論使用者編號或IP以用來提醒有新訊息。  
 
*wiki_user_newtalk:記錄使用者討論頁面的討論使用者編號或IP以用來提醒有新訊息。  
 
*#user_id:使用者編號
 
*#user_id:使用者編號

2024年7月8日 (一) 08:23的最新修訂版本

各版本資料表異動

1.17到1.21

  • 增加四張表
    1. wiki_site_identifiers 保留網站相關認證
    2. wiki_sites 保存 wiki 網站相關訊息
    3. wiki_uploadstash 保存檔上傳時(上傳完成前)的資訊
    4. wiki_user_former_groups 保存使用者曾經所在的族群
  • 擴展新增的資料表
    1. wiki_math:數學模組用來來追蹤先前算圖的項目。此表在 1.18 版起未被使用,可安全刪除。它過去是,現在仍然被用作數學模組增強功能的一部分,但是,沒有核心軟體需要它。
  • 減去一張表
    1. wiki_trackbacks 可以加入一個引用到資料中

1.21到1.22

資料表全同

1.22到1.23

減去一張表

wiki_external_user:在使用認證插件後,追蹤外部用戶帳號。在 1.22 版中連同外部驗證功能被移除。此後應該改用 AuthManager 。

1.23 諸版本

wikiGrade1(1.23.2)~wiki1231,wellBeingNg(1.23.10):資料表全同

1.23~1.30.0

資料表比對

減去三張表

  • wiki_hitcounter:點擊計數器。1.25 版後自核心刪除,改為擴充功能;1.26 版刪除資料表。
  • wiki_msg_resource:用於訊息的快取,以 JSON 語法編成二元資料。1.27 版後刪除資料表。
  • wiki_msg_resource_links:決取的 resource 與 message 對照表。1.27 版後刪除資料表。

增加五張表
(一)增加機器人使用者:

  • wiki_bot_passwords:存機器人使用者的帳號資料。使用機器人帳戶可以在不使用主帳戶密碼的情況下進行身份驗證,以提高安全性,因為它們可以隨時撤銷,且可以限制機器人的訪問範圍。
    1. bp_id:機器人密碼的唯一識別碼。
    2. bp_user:機器人帳戶相關的主帳戶用戶 ID 。它與主帳戶表中的用戶 ID 關聯。
    3. bp_app_id:這是應用程序的識別碼。每個機器人密碼可以指定應用於特定應用程序。
    4. bp_password:這是機器人密碼,通常以某種加密形式存儲。
    5. bp_token:與機器人密碼關聯的安全令牌。
    6. bp_restrictions:這包含 JSON 格式的資料,指定機器人帳戶的訪問限制。例如,可以限制機器人只能讀取特定的命名空間或執行特定的操作。
    7. bp_grants:這也是 JSON 格式的資料,包含授予機器人帳戶的權限。這些權限決定機器人可以執行哪些類型的操作,例如編輯頁面、移動頁面等。

(二)改變編輯記錄的註解
日誌操作所有定義的總表

  • wiki_revision_comment_temp
    1. revcomment_rev 指示版本 id
    2. revcomment_comment_id 指示註解的 id
  • wiki_comment:對每一次使用者的編輯動作加以註解,產生新頁時由 logging 表參考,不產生新頁是由 revision_comment_temp 表參考。欄位如下:
    1. comment_id:流水號識別碼
    2. comment_hash:comment_text 取 CRC32 值和 comment_data 取 CRC32 值兩者進行 XOR(互斥或)運算。CRC32 (Cyclic Redundancy Check 32) 會產生一個 32 位(4 byte)的整數(hash 哈希值)。
    3. comment_text:編輯動作註解。
      • 使用者自訂:編輯頁面時由「摘要」輸入框填入。
      • 系統預設值:
        • 不產生新頁時:
          1. 「/* 段落名 */」,所以同一段多次編輯,是使用同一筆 comment_id
          2. 頁面內容被替換為「……」
          3. 清空全部內容
          4. 「取消由丁志仁討論)所作出的修訂2884」
        • 產生新頁時:
          1. 空字串
          2. 「建立空白頁面」,所以多次建立空白頁面,是使用同一筆 comment_id
          3. 建立內容為「……」的新頁面
          4. 上傳檔案時,關於檔案的摘要說明。多數上傳圖檔「摘要」框均空白。結果就參照到 comment_id=1,無 comment_text
          5. 建立帳號時,多數「原因」框使均空白。結果就參照到 comment_id=1,無 comment_text
    4. comment_data:目前值清一色為 NULL,其 CRC32 值是 0。任何數與 0 進行 XOR(互斥或)運算,結果都是本身。

舊版中 revision 表紀錄幾乎所有的編輯動作,但 logging 只紀錄以下五類事件:

  1. delete:刪除一個已上傳圖照,其 log_comment 為刪除理由,如「重覆檔案」
  2. move:重定向,其 log_comment 為空白或重定向理由,如「標題重新命名」
  3. newusers:創造新的使用者頁,其 log_comment 為空白或使用者說明,如「新生」
  4. patrol:修改某一頁的內容,其 log_comment 為空白
  5. upload:上傳或覆寫一個圖照頁,其 log_comment 為空白或圖照說明

新版中 logging 去除修改某一頁內容的過程紀錄,只紀錄頁的生成或消滅事件:

  1. 新建重定向頁:同時產生兩筆紀錄,move/move 指示重定向的目的地與放重定向指示的 text_id;create/create 指示目的地頁的 text_id,其 log_comment 為空白或重定向理由,如「標題重新命名」
  2. 創造新的使用者頁:同時產生兩筆紀錄,newusers 指示 user_id ,其 log_comment 為空白或使用者說明,如「新生」;create/create 指示使用者頁的 text_id。,其 log_comment 為「已建立頁面…」。
    • newusers 的 log_action='create':自己所建,須系統開放使用者自建帳號
    • newusers 的 log_action='create2':他人所建
  3. 上傳一個圖照頁:同時產生兩筆紀錄,upload/upload 指示圖照的 sha1,時間戳記,text_id;create/create 指示圖照的 text_id。其 log_comment 為空白或圖照說明。
  4. 新建其他頁:只產生一筆紀錄,create/create 指示頁的 text_id。其 log_comment 為 建立空白頁面 或 建立內容為「…」的新頁面 或 已建立頁面,內容為 "…"。

而版本修改的註解已不放在 wiki_revision 表的 rev_comment 欄,而是放在 wiki_revision_comment_temp 表中,其對應的註解通常為「/* … */」。

wiki_comment 則匯整 logging 表的註解與 revision 表的註解,每一註解文字串有唯一的 id 。

(三)記錄非註冊者貢獻: 當每次儲存非登入者的編輯時,都記下其 ip 。供「特殊:使用者貢獻」時,可以列出。

  • wiki_ip_changes
    1. ipc_rev_id:流水號
    2. ipc_rev_timestamp:時間戳
    3. ipc_hex:ip

(四)短暫存在的表:

  • wiki_image_comment_temp:僅短暫存在於 1.30~1.31 版,1.32 版之後刪除

1.17 版

共 49 張資料表

名字空間列表

詳見使用說明:名字空間。除虛擬名字空間外,偶數是主體,奇數是其 talk 。

-2Media媒體虛擬名字空間由頁面自動生成,不在資料表內。
-1Special特殊
0「條目名字空間」(Article Namespace)沒有任何前綴,屬於「主名字空間」 1Talk討論
2User使用者 3User_talk使用者討論
4Project當前專案,即中華民國振鐸學會 5$1_talk$1討論
6File檔案 7File_talk檔案討論
8MediaWikiMediaWiki 9MediaWiki_talkMediaWiki討論
10Template模板11Template_talk模板討論
12Help使用說明13Help_talk使用說明討論
14Category分類15Category_talk分類討論

參考

分類:MediaWiki諸表

資料庫佈局

頁資料表

1.31 版之前諸表對應關係(表名省略前綴)

table page revision text
field page_id rev_text_id
rev_page old_id

1.31 版之後(含)諸表對應關係(表名省略前綴)

table page revision slots content text
field page_id rev_id slot_content_id content_address
rev_page slot_revision_id content_id old_id

※content_address 欄之欄值用「tt:<id>」表示,而 <id> 是 text.old_id 。
 但使用外部存儲時 content_address 欄的欄值表示可能會有所不同。

  • 不過1.31 版之後經測試可以有以下化簡的對應關係
table page revision text
field page_id rev_id
rev_page old_id

頁資料表在 1.31 版之前共 7 表。

1.31 版之後共 9 表。

核心三表:

  1. wiki_page 頁碼、頁名
  2. wiki_revision 版本,依其頁碼欄(rev_page)對到 wiki_page ,依其內文碼欄(rev_text_id)對到 wiki_text 資料表
  3. wiki_text 內文

輔助四表

  1. wiki_searchindex 將各頁的頁名、內文編成 ASCII code ,以利蒐尋。
  2. wiki_page_restrictions 列出保護頁。
  3. wiki_recentchanges 以異動為主體,列出每一次異動的重點。
  4. wiki_page_props 特殊表現

1.31 版之後增加兩表

  1. wiki_slots
  2. wiki_content
  • wiki_slots
    1. slot_revision_id:參考到 revision.rev_id 或 archive.ar_rev_id。 slot_revision_id 和 slot_role_id 一起構成主鍵。
    2. slot_role_id:參考 slot_roles 表的 role_id 欄,目前只發現一種 role_id 的值,即 1 ,代表的 role 是 main。
    3. slot_content_id:參考 content.content_id 。
    4. slot_origin:修訂版本的 revision.rev_id 其實是源自於插槽的內容。要查找更改了插槽的修訂,請查找 slot_origin = slot_revision_id。
  • wiki_content
    1. content_id:內容物件的 ID
    2. content_size:內容物件的標稱大小
    3. content_sha1:內容物件的名義哈希值
    4. content_model:參考 content_models 表的 model_id 欄。1 為 wikitext,2 為 css 。請注意,如未指定序列化格式;除非自動檢測到,否則應假定其採用模型的預設格式。
    5. content_address:結構通常為: tt:<id> 其中 <id> 是引用 text 表的 old_id 欄的值。使用外部存儲時可能會有所不同。
  • wiki_page 頁碼、頁名
    1. page_id:頁碼
    2. page_namespace:本頁所屬的名字空間
    3. page_title:頁名,檔案則為檔名。
    4. page_restrictions:用逗號分隔的Permission Key誰可移動或保護頁面,在1.10版已移至page restrictions table。
    5. page_counter:訪問次數
    6. page_is_redirect:是否重導向,其值為0或1,1為redirect頁面。
    7. page_is_new:是否新建頁,其值為0或1,1為新頁面。
    8. page_random:0至1的隨機數,用在隨機頁面的功能。
    9. page_touched:時間戳記(年月日時分秒),當頁面需要重新排版時會更新,以使快取失效,包括:編輯後、權限更改、創建鏈接頁面、刪除、模板更改,頁面創建時填入$dbw->timestamp()。預設值為'\0\0\0\0\0\0\0\0\0\0\0\0\0\0'。
    10. page_latest:本頁最後的版本 id ,其值為revision裡的rev_id。
    11. page_len:頁長度,檔案則為註解長度,為原始Wiki語法統計的Bytes數。
    12. page_content_model:內容模型,1.21版之後的新增欄位,有五種值:wikitext(含檔案)、javascript、css、text、json。和 revision 表中的 rev_content_model 欄同值;後者在1.31版本中棄用。
    13. page_links_updated:1.23版之後的新增欄位,重新解析 wiki 頁時,更新此時間戳記,並更新所有的連結跟蹤表。
  • wiki_text 頁內文(整合各段)
    1. old_id:過程頁編碼
    2. old_text:過程頁內文,檔案則為註解。
    3. old_flags:內文的flag列表,包含gzip代表壓縮內容、utf8代表內容為UTF編碼、object代表內容有PHP物件。
  • wiki_revision 修訂版
    1. rev_id:流水號
    2. rev_page:頁碼
    3. rev_text_id:內文碼,對到text表中的old_id。可能多個版本共用一個text的old_id;例如版本只有改變metadata。
    4. rev_comment:修訂註解,如「新頁面: …」「已保護…」「/* 段落名 */」「空白」
    5. rev_user:編輯者的使用者編號,若為0則是匿名使用者或是匯入。
    6. rev_user_text:編輯者的帳號或是匿名使用者的IP。
    7. rev_timestamp:版本修改時間
    8. rev_minor_edit:是否為小修訂,若為1為小修改,0為正常修改。
    9. rev_deleted:版本是否被刪除,尚未使用。
    10. rev_len:該版長度,檔案則為註解長度。
    11. rev_parent_id:父修訂版id
  • wiki_searchindex 頁名及內文編成 ASCII code
    1. si_page:頁碼
    2. si_title:頁名,非UTF8字直接顯示,UTF8字在「u8」至空白之間夾入各byte的十六進位ASCII code。
    3. wiki_searchindex:頁內文,非UTF8字直接顯示,UTF8字在「u8」至空白之間夾入各byte的十六進位ASCII code。
  • wiki_page_restrictions 保護頁
    1. pr_page:頁碼
    2. pr_type:限制類型,分edit、move
    3. pr_level:那一種群組以上的人才可以操作,如sysop(管理者)(完全保護),如autoconfirmed(已確認註冊者)(半保護),或註冊者(半保護)。
    4. pr_cascade:1為連鎖保護,連本頁中的Template及影像都一起保護。
    5. pr_user:目前為空值暫無用途,未來可用於個別使用者權限管理。
    6. pr_expiry:保護期,infinity代表無限長,空值則為永久有效。
    7. pr_id:流水號
  • wiki_recentchanges 新近異動
    1. rc_id:流水號
    2. rc_timestamp:時間
    3. rc_cur_time:時間
    4. rc_user:使用者編碼
    5. rc_user_text:使用者帳號
    6. rc_namespace:0,內容頁;2,特殊頁
    7. rc_title:操作對象,帳號或頁名
    8. rc_comment:改變註解,如「新頁面: …」「/* 段落名 */」「空白」
    9. :…
  • wiki_page_props 特殊表現
    1. pp_page:頁碼
    2. pp_propname:特性名稱,如 notoc 代表不秀出目錄框
    3. pp_value:特性值,如 notoc 不需要值

建新頁(1.30 版前,完整)

  1. wiki_text 新增一筆,塞入內文,換頁碼時免改。
  2. wiki_page 新增一筆,得到頁碼。
  3. wiki_revision 新增一筆,取用內文編碼與頁碼。
  4. wiki_searchindex 增一筆,頁名、內文編成 ASCII code
  5. wiki_pagelinks 增0-數筆,列出本頁產生的各內部連結
  6. wiki_externallinks 增0-數筆,列出本頁產生的各外部連結
  7. wiki_logging 增一筆,記入時間、帳號、版本編碼、父版本編碼

手動插入一頁 wiki 示例:

內容三表:

  • wiki_text 指定 ID 新增一筆。如:
insert into wiki_text set
 old_id=7909,
 old_text='',
 old_flags='utf-8'
  • wiki_page 指定 ID 新增一筆。如:
insert into wiki_page set
 page_id=1167,
 page_namespace=14,
 page_title='CSS',
 page_restrictions='',
 page_counter=1,
 page_is_redirect=0,
 page_is_new=1,
 page_random=0.825167104571,
 page_touched='20150629000000',
 page_links_updated='20150629000000',
 page_latest=7909,
 page_len='0',
 page_content_model='wikitext',
 domain='',
 unit=''
  • wiki_revision 指定 ID 新增一筆。如:
insert into wiki_revision set
 rev_id=7921,
 rev_page=1167,
 rev_text_id=7909,
 rev_comment='新頁面:…',
 rev_user=1,
 rev_user_text='丁志仁',
 rev_timestamp='20150629000000',
 rev_minor_edit=0,
 rev_deleted=0,
 rev_len=0,
 rev_parent_id=0,
 rev_sha1='phoiac9h4m842xq45sp7s6u21eteeq1'
※說明:
  1. 當 rev_len=0 時 rev_sha1之值為「phoiac9h4m842xq45sp7s6u21eteeq1」
  2. rev_comment 一定要寫明「新頁面:…」,否則無法往下一個版本編輯。由於本欄屬性是註解,到底是什麼性質的頁面,系統不檢查。
日誌一表:
insert into wiki_logging set 
 log_type='patrol',
 log_action='patrol',
 log_timestamp='20150629000000',
 log_user=1,
 log_user_text='丁志仁',
 log_namespace=14,
 log_title='CSS',
 log_page=1167,
 log_params='a:3:{s:8:"4::curid";i:7909;s:9:"5::previd";i:0;s:7:"6::auto";i:1;}',
 log_deleted=0

建新頁(1.31 版後,完整)

總的流程包括三大部分:

  • 內容五表
    1. 先在 text 中增一筆,其 old_id ,建其他表要用到
    2. 在 page 中增一筆,其 page_latest 會用到 text.old_id 相應的值
    3. 在 revision 中增一筆,其 rev_page 會用到 page.page_id ,其 rev_id 指示版本 id
    4. 在 slots 中依來源的版本 id 增一筆,同版本可以指定不同的 slot_role_id:主內容、元數據、用戶生成的注釋…,不同的 slot_role_id 可以佔用不同的 slot_content_id 。
    5. 在 content 表中,依不同的 slot_content_id ,去註解內容的語法格式,與在 text.old_id 的位置。
  • 版本修訂紀錄兩表,早期是 revision 表中的兩欄,現在移出獨立成表。如果沒有相應資料,頁無法編輯,會產生 「[……] 2024-03-24 17:05:44: 嚴重例外類型 "Error"」:
    1. 在 wiki_revision_comment_temp 中增一筆,對應修訂版本 id 與修訂描述 id 。
    2. 在 wiki_revision_actor_temp 中增一筆,對應修訂版本 id 、 修訂者 id 、 頁 id 、時間戳。
  • 日誌相關三表
    1. logging:日誌新增一筆
    2. log_search:新增一筆
    3. comment:編輯動作註解,通常為「建立空白頁面」,由於已多次建立空白頁,所以使用同一筆 comment_id 即可
  • searchindex

手動插入一頁 wiki 示例:

內容五表:

  • wiki_text 指定 ID 新增一筆。如:
insert into wiki_text set
 old_id=5679,
 old_text='',
 old_flags='utf-8'
  • wiki_page 指定 ID 新增一筆。如:
insert into wiki_page set
 page_id=161,
 page_namespace=14,
 page_title='嘉禾書院',
 page_restrictions='',
 page_is_redirect=0,
 page_is_new=1,
 page_random='0.099645685474',
 page_touched='20220602050041',
 page_links_updated='20220602045523',
 page_latest=5679,
 page_len=0,
 page_content_model='wikitext'
  • wiki_revision 指定 ID 新增一筆。如:
insert into wiki_revision set
 rev_id=5679,
 rev_page=161,
 rev_comment_id=0,
 rev_actor=0,
 rev_timestamp='20240322081500',
 rev_minor_edit=0,
 rev_deleted=0,
 rev_len=0,
 rev_parent_id=0,
 rev_sha1='phoiac9h4m842xq45sp7s6u21eteeq1'
  • wiki_revision_comment_temp 新增一筆。如:
insert into wiki_revision_comment_temp set
 revcomment_rev=5679,
 revcomment_comment_id=315	/* 建立空白頁面 */
  • wiki_revision_actor_temp 新增一筆。如:
insert into wiki_revision_actor_temp set
 revactor_rev=5679,
 revactor_actor=1,
 revactor_timestamp='20240322081500',
 revactor_page=161
增完上述兩表後,頁面「編輯」可用,且「檢視歷史」能順利顯示該次修訂的編輯者,時間,修訂說明
  • wiki_slots 版本增一插座。如:
insert into wiki_slots set
 slot_revision_id=5679,
 slot_role_id=1,
 slot_content_id=5679,
 slot_origin=5679
  • wiki_content 指示原始碼語法性質。如:
insert into wiki_content set
 content_id=5679,
 content_size=0,
 content_sha1='phoiac9h4m842xq45sp7s6u21eteeq1',
 content_model=1,
 content_address='tt:5679'
  • wiki_logging 日誌增一筆,紀錄新增一頁。如:
insert into wiki_logging set
 log_id=382,
 log_type='create',
 log_action='create',
 log_timestamp='20240320023848',
 log_actor='1',
 log_namespace=14,
 log_title='嘉禾書院',
 log_page=161,
 log_comment_id=315,
 log_params='a:1:{s:17:"associated_rev_id";i:5679;}',
 log_deleted=0
  • wiki_log_search 增一筆,紀錄新增一頁。如:
insert into wiki_log_search set
 ls_field='associated_rev_id',
 ls_value='5679',
 ls_log_id=382
  • wiki_searchindex 在索引檔新增一頁。如:
insert into wiki_searchindex set
 si_page=161, 
 si_title=' u8e59889 u8e7a6be u8e69bb8 u8e999a2'

換頁碼

要考慮維護下一段的連結保持正確

換頁名

  1. 涉及 wiki_page , wiki_searchindex , wiki_recentchanges , wiki_pagelinks
  2. 先查 wiki_pagelinks ,看有沒有其他頁連向此頁。
  3. 改 wiki_page , wiki_pagelinks 的頁名欄中,改舊頁名為新頁名。
  4. wiki_searchindex 會自動重做,毋須手動處理。
  5. wiki_recentchanges , wiki_logging ,在修改時點後會表現新頁名,毋須手動處理。

搜尋

  • 目前新版的搜尋方式有分完整版與簡易版
  1. 完整版就是照著page-->revision-->slots-->content-->text一層一層慢慢搜尋下去
  2. 簡易版可以直接跳過中間的slots與content
    • slots資料表中的slot_content_id與slot_revision_id數值相同(slot_revision_id則是對應到revision資料表中的rev_id)
    • content資料表中content_id(與slot_content_id相同)直接對應到content_addresss(差了tt:)
    • text資料表中的old_id是對應到content_id

    • 所以可以按照舊的方法
      • 舊版對應關係:page(page_id)-->(rev_text_page)revision(rev_id)--------->(old_id)text
    • 將rev_text_id改為rev_id即可
      • 新版簡易對應關係:(page(page_id)-->(rev_page)revision(rev_id)--------->(old_id)text
    • 以下為範例程式:
      select page_id from wiki_page,(select rev_page pid,max(rev_id) tid from wiki_revision group by pid order by pid) r left join wiki_text on tid=old_id where page_id=pid && page_namespace=0 && old_text LIKE '%".$str."%' order by page_id

連結資料表

  1. wiki_pagelinks 內部連結,列出頁與頁之間的連結關係。
  2. wiki_templatelinks 樣板連結
  3. wiki_externallinks 外部連結,列出各頁的外部連結。
  4. wiki_categorylinks 分類連結,參見分類段
  5. wiki_imagelinks 檔案連結,參見檔案段
  6. wiki_redirect 重新導向連結
  7. wiki_interwiki及wiki_iwlinks 視為內部連結的跨網站間的連結
  8. wiki_langlinks 記錄語言連結,例如首頁/tw、首頁/jp。
  • wiki_pagelinks 內部連結,可導出「特殊:待撰頁面」
    1. pl_from:包含連結共筆頁的頁碼
    2. pl_namespace:連結目的地的名字空間代碼
    3. pl_title:連結目的地的頁名,因為目的地可能已產生也可能未產生,所以只能用頁名不能用頁碼
  • wiki_templatelinks 樣板連結
    1. tl_from:包含連結共筆頁的頁碼
    2. tl_namespace:連結目的地的名字空間代碼
    3. tl_title:連結目的地的頁名,因為目的地可能已產生也可能未產生,所以只能用頁名不能用頁碼
  • wiki_externallinks 外部連結
    1. el_from:包含外部連結的頁碼
    2. el_to:外部連結的 URL
    3. el_index:同el_to,但逆排構成 DN 的各個字(以.分隔)。
  • wiki_redirect 重導向
    1. rd_from:重導向頁的頁碼
    2. rd_namespace:重導向目的地的名字空間
    3. rd_title:重導向目的地的頁名
    4. rd_interwiki
    5. rd_fragment
  • wiki_interwiki 百多個可以跨 wiki 連結網站,丁丁再加上數個。
    1. iw_prefix:其他網站的前置字,視為本網站的名字空間
    2. iw_url:網站的 URL 位置加上頁名參數
    3. iw_api:檔案 api.php 的 URL。
    4. iw_wikiid:資料庫的名稱(用於使用 wfGetLB( 'wikiid' ) 建立的連線)
    5. iw_local:通知 MediaWiki 如何處理來自外部來源的維基鏈接。如果 iw_local 為1,則將這些鏈接視為從本地 Wiki 內部產生。
    6. iw_trans:允許從另一個 MediaWiki 安裝中嵌入模板(或其他頁面)。$wgEnableScaryTranscluding 和 iw_trans 都需要打開。
  • wiki_iwlinks
    1. iwl_from:連往其他網站的本站共筆頁頁碼
    2. iwl_prefix:其他網站的前置字,視為本網站的名字空間
    3. iwl_title:要送到其他網站 URL 中的參數
  • wiki_langlinks
    1. ll_from:使用語言連結的頁碼
    2. ll_lang:目的連結的國家語言
    3. ll_title:目的連結的頁名

檔案資料表

檔案實際 images 資料夾中,路徑放在什麼地方目前不明

  • wiki_page
    1. page_title:列出檔名
    2. page_len:註解長度
  • wiki_text
    1. old_text:註解
  • wiki_revision
    1. rev_len:註解長度。
  • wiki_image:上傳檔
    1. img_name:檔名
    2. img_size:檔案大小
    3. img_width:圖寬
    4. img_height:圖高
    5. img_metadata:serialize化的描述資料,如frameCount、loopCount、時間…
    6. img_bits:通常為8,代表8bit
    7. img_media_type:BITMAP代表點陣圖,
    8. img_major_mime:mime之大項如image
    9. img_minor_mime:mime之小項如jpeg、png
    10. img_description:註解
    11. img_user:帳號編碼
    12. img_user_text:帳號
    13. img_timestamp:年月日時分秒
    14. img_sha1:檔案的SHA1唯一驗證碼
  • wiki_imagelinks
    1. il_from:含圖連結的頁碼。imageLinkFrom
    2. il_to:檔名。imageLinkTo

分類

  • wiki_page 頁碼、頁名
  • wiki_category
    1. cat_id 分類碼
    2. cat_title 分類名
    3. cat_pages 包含了幾頁
    4. cat_subcats 子分類數目
    5. cat_files 包含檔案數
    6. cat_hidden 是否隱藏
  • wiki_categorylinks 那些共筆頁屬於那些分類
    1. cl_from 共筆頁的id
    2. cl_to 共筆頁隸屬分類的分類名
    3. cl_sortkey 共筆頁的頁名(title),
      • 如為英文則依 cl_collation 欄的指示全部轉大小寫
      • 如為中文拆成一byte一byte,轉成ASCII以十六進位表示後串起來
      • 有時會將「MediaWiki:頁面分類」轉成「YMFL 維基百科:頁面分類」,再轉成ASCII以十六進位表示後串起來;將「MediaWiki:命名常規」轉成「命名常規 命名常規」,再轉成ASCII以十六進位表示後串起來。
    4. cl_sortkey_prefix 共筆頁頁名的前置字,即前一欄空白之前的字串,大多數為空值,如上項之例「頁面分類」前置字為「YMFL」、「命名常規」前置字為「命名常規」。
    5. cl_timestamp 建立時間
    6. cl_collation 連結的整理方式,如「uppercase」(大寫)
    7. cl_type 連結的型態,如「page」(條目頁),「subcat」(子分類)

帳號群組

  • wiki_user 使用者帳號及編碼
    1. user_id:使用者表格PrimaryKey。
    2. user_name:使用者名稱必須是唯一的,且不能是IP形式,不分大小寫。
    3. user_real_name:使用者實際名稱,為選填。
    4. user_password:密碼採用md5hash儲存。
    5. user_newpassword:使用者忘記密碼時系統產生的新密碼,經由email寄送。
    6. user_email:使用者電子郵件。
    7. user_options:採用name=value格式並用逗號隔開,描述額外使用者資訊。
    8. user_touched:使用者最後更新日期,包含頁面異動及使用者喜好設定。
    9. user_token:儲存使用者資訊。
    10. user_email_authenticated:儲存使用者的電子郵件是否經過驗證的資訊。
    11. user_email_token:儲存使用者電子郵件資訊。
    12. user_email_token_expires:儲存使用者電子郵件是否過期的資訊。
    13. user_registration:儲存使的註冊相關資訊。
    14. user_newpass_time:系統產生新密碼時間。
    15. user_editcount:使用者的編輯次數。
  • wiki_user_groups 各帳號隸屬於何種群組,已註冊帳號預設為「使用者」,不用登錄於本表。
    1. ug_id:使用者編號
    2. ug_group:使用者群組名稱,分為bureaucrat(行政員,授權者)、sysop(管理員)、interface-admin(介面管理員)…。群組列表群組/權限列表
  • wiki_user_properties 各帳號的額外屬性,如有無要不要時間校正、綽號、要不要記住密碼、性別、 watch list token 等
    1. up_user:使用者編號
    2. up_property:屬性
    3. up_value:屬性值
    屬性名、值對:時區調整:('timecorrection','ZoneInfo|480|Asia/Taipei');('gender','female'or'male');('language','zh-hant');字體(variant):繁體(zh-hant)、台灣正體(zh-tw);('rememberpassword','1');('watchlisttoken',隨機長字串)
  • wiki_user_newtalk:記錄使用者討論頁面的討論使用者編號或IP以用來提醒有新訊息。
    1. user_id:使用者編號
    2. user_ip:使用者IP
  • wiki_watchlist:記錄使用者列入觀察的頁面。
    1. wl_user:使用者編號。
    2. wl_namespace:觀察頁的名字空間。
    3. wl_title:觀察頁的頁名。
    4. wl_notificationtimestamp:通知更新時間。

新增使用者

  1. wiki_user 加一筆
  2. wiki_user_groups 可能不加,要管理員以上(bureaucrat,sysop)的人才會加。
  3. wiki_user_properties 加0筆、一筆至數筆,如要不要記住密碼
  4. wiki_recentchanges 加1筆,記newusers這個動作,但不重要。
  5. wiki_logging 加1筆,記newusers這個動作,但不重要。

系統管理

  • wiki_logging 登入日誌
  • wiki_site_stats 網站統計資訊
  • wiki_job 待處理工作

次要資料表

共 6 表。

  • wiki_l10n_cache 各種語言中 lc_key 的多值定義
  • wiki_module_deps 使用模組、布景、參數
  • wiki_msg_resource 19種功能資源(如jquery)的文字編碼及參數陣列
  • wiki_msg_resource_links 10種mediawiki自行開發功能資源之訊息
  • wiki_objectcache 各種臨時性操作物件的生命週期
  • wiki_archive 記錄刪除的頁面資訊。

空值資料表

目前 17 表。

  • wiki_change_tag
  • wiki_external_user:追蹤外部用戶帳戶,如果使用 ExternalAuth 時。使用版本在 1.16 – 1.21 版期間。隨著 ExternalAuth 功能被廢止,本表在 MediaWiki1.22 後被去除。應該使用 AuthPlugin 。
  • wiki_filearchive:記錄刪除的檔案資訊,必須要將$wgFileStore參數啟動才會記錄。
  • wiki_hitcounter
  • wiki_ipblocks
  • wiki_log_search
  • wiki_math:記錄數學公式相關資訊,主要為原始的數學公式語法及解析後的數學公式語法。
  • wiki_oldimage:記錄舊版的上傳檔案資訊,其中舊版檔案放置於/image/archive目錄。
  • wiki_protected_titles
  • wiki_querycache
  • wiki_querycache_info
  • wiki_querycachetwo
  • wiki_tag_summary
  • wiki_trackbacks
  • wiki_transcache
  • wiki_updatelog
  • wiki_valid_tag