Template:SchemaDiagram/sql/mediawiki-1.36.0.txt

-- maintenance/tables.sql -- SQL to create the initial tables for the MediaWiki database. -- This is read and executed by the install script; you should -- not have to run it by itself unless doing a manual install.

-- This is a shared schema file used for both MySQL and SQLite installs. -- -- For more documentation on the database schema, see -- https://www.mediawiki.org/wiki/Manual:Database_layout -- -- General notes: -- -- If possible, create tables as InnoDB to benefit from the -- superior resiliency against crashes and ability to read -- during writes (and write during reads!) -- -- Only the 'searchindex' table requires MyISAM due to the -- requirement for fulltext index support, which is missing -- from InnoDB. -- -- -- The MySQL table backend for MediaWiki currently uses -- 14-character BINARY or VARBINARY fields to store timestamps. -- The format is YYYYMMDDHHMMSS, which is derived from the -- text format of MySQL's TIMESTAMP fields. -- -- Historically TIMESTAMP fields were used, but abandoned -- in early 2002 after a lot of trouble with the fields -- auto-updating. -- -- The Postgres backend uses TIMESTAMPTZ fields for timestamps, -- and we will migrate the MySQL definitions at some point as -- well. -- -- -- The /*_*/ comments in this and other files are -- replaced with the defined table prefix by the installer -- and updater scripts. If you are installing or running -- updates manually, you will need to manually insert the -- table prefix if any when running these scripts. --

-- -- The user table contains basic account information, -- authentication keys, etc. -- -- Some multi-wiki sites may share a single central user table -- between separate wikis using the $wgSharedDB setting. -- -- Note that when an external authentication plugin is used, -- user table entries still need to be created to store -- preferences and to key tracking information in the other -- tables. -- CREATE TABLE /*_*/user ( user_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,

-- Usernames must be unique, must not be in the form of -- an IP address. _Shouldn't_ allow slashes or case -- conflicts. Spaces are allowed, and are _not_ converted -- to underscores like titles. See the User::newFromName for -- the specific tests that usernames have to pass. user_name varbinary(255) NOT NULL default '',

-- Optional 'real name' to be displayed in credit listings user_real_name varbinary(255) NOT NULL default '',

-- Password hashes, see User::crypt and User::comparePasswords -- in User.php for the algorithm user_password tinyblob NOT NULL,

-- When using 'mail me a new password', a random -- password is generated and the hash stored here. -- The previous password is left in place until -- someone actually logs in with the new password, -- at which point the hash is moved to user_password -- and the old password is invalidated. user_newpassword tinyblob NOT NULL,

-- Timestamp of the last time when a new password was -- sent, for throttling and expiring purposes -- Emailed passwords will expire $wgNewPasswordExpiry -- (a week) after being set. If user_newpass_time is NULL -- (eg. created by mail) it doesn't expire. user_newpass_time binary(14),

-- Note: email should be restricted, not public info. -- Same with passwords. user_email tinytext NOT NULL,

-- If the browser sends an If-Modified-Since header, a 304 response is -- suppressed if the value in this field for the current user is later than -- the value in the IMS header. That is, this field is an invalidation timestamp -- for the browser cache of logged-in users. Among other things, it is used -- to prevent pages generated for a previously logged in user from being -- displayed after a session expiry followed by a fresh login. user_touched binary(14) NOT NULL,

-- A pseudorandomly generated value that is stored in -- a cookie when the "remember password" feature is  -- used (previously, a hash of the password was used, but  -- this was vulnerable to cookie-stealing attacks) user_token binary(32) NOT NULL default '',

-- Initially NULL; when a user's e-mail address has been -- validated by returning with a mailed token, this is -- set to the current timestamp. user_email_authenticated binary(14),

-- Randomly generated token created when the e-mail address -- is set and a confirmation test mail sent. user_email_token binary(32),

-- Expiration date for the user_email_token user_email_token_expires binary(14),

-- Timestamp of account registration. -- Accounts predating this schema addition may contain NULL. user_registration binary(14),

-- Count of edits and edit-like actions. -- -- *NOT* intended to be an accurate copy of COUNT(*) WHERE rev_actor refers to a user's actor_id -- May contain NULL for old accounts if batch-update scripts haven't been -- run, as well as listing deleted edits and other myriad ways it could be -- out of sync. -- -- Meant primarily for heuristic checks to give an impression of whether -- the account has been used much. -- user_editcount int,

-- Expiration date for user password. user_password_expires varbinary(14) DEFAULT NULL

) /*$wgDBTableOptions*/;

CREATE UNIQUE INDEX /*i*/user_name ON /*_*/user (user_name); CREATE INDEX /*i*/user_email_token ON /*_*/user (user_email_token); CREATE INDEX /*i*/user_email ON /*_*/user (user_email(50));

-- -- Every edit of a page creates also a revision row. -- This stores metadata about the revision, and a reference -- to the text storage backend. -- CREATE TABLE /*_*/revision ( -- Unique ID to identify each revision  rev_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,

-- Key to page_id. This should _never_ be invalid. rev_page int unsigned NOT NULL,

-- Key to comment.comment_id. Comment summarizing the change. rev_comment_id bigint unsigned NOT NULL default 0,

-- Key to actor.actor_id of the user or IP who made this edit. rev_actor bigint unsigned NOT NULL default 0,

-- Timestamp of when revision was created rev_timestamp binary(14) NOT NULL default '',

-- Records whether the user marked the 'minor edit' checkbox. -- Many automated edits are marked as minor. rev_minor_edit tinyint unsigned NOT NULL default 0,

-- Restrictions on who can access this revision rev_deleted tinyint unsigned NOT NULL default 0,

-- Length of this revision in bytes rev_len int unsigned,

-- Key to revision.rev_id -- This field is used to add support for a tree structure (The Adjacency List Model) rev_parent_id int unsigned default NULL,

-- SHA-1 text content hash in base-36 rev_sha1 varbinary(32) NOT NULL default '' ) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=1024; -- In case tables are created as MyISAM, use row hints for MySQL <5.0 to avoid 4GB limit

-- The index is proposed for removal, do not use it in new code: T163532. -- Used for ordering revisions within a page by rev_id, which is usually -- incorrect, since rev_timestamp is normally the correct order. It can also -- be used by dumpBackup.php, if a page and rev_id range is specified. CREATE INDEX /*i*/rev_page_id ON /*_*/revision (rev_page, rev_id);

-- Used by ApiQueryAllRevisions CREATE INDEX /*i*/rev_timestamp ON /*_*/revision (rev_timestamp);

-- History index CREATE INDEX /*i*/page_timestamp ON /*_*/revision (rev_page,rev_timestamp);

-- User contributions index CREATE INDEX /*i*/rev_actor_timestamp ON /*_*/revision (rev_actor,rev_timestamp,rev_id);

-- Credits index. This is scanned in order to compile credits lists for pages, -- in ApiQueryContributors. Also for ApiQueryRevisions if rvuser is specified. CREATE INDEX /*i*/rev_page_actor_timestamp ON /*_*/revision (rev_page,rev_actor,rev_timestamp);

-- -- When using the default MySQL search backend, page titles -- and text are munged to strip markup, do Unicode case folding, -- and prepare the result for MySQL's fulltext index. -- -- This table must be MyISAM; InnoDB does not support the needed -- fulltext index. -- CREATE TABLE /*_*/searchindex ( -- Key to page_id  si_page int unsigned NOT NULL,

-- Munged version of title si_title varchar(255) NOT NULL default '',

-- Munged version of body text si_text mediumtext NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE UNIQUE INDEX /*i*/si_page ON /*_*/searchindex (si_page); CREATE FULLTEXT INDEX /*i*/si_title ON /*_*/searchindex (si_title); CREATE FULLTEXT INDEX /*i*/si_text ON /*_*/searchindex (si_text);

-- vim: sw=2 sts=2 et

-- maintenance/tables-generated.sql -- This file is automatically generated using maintenance/generateSchemaSql.php. -- Source: maintenance/tables.json -- Do not modify this file directly. -- See https://www.mediawiki.org/wiki/Manual:Schema_changes CREATE TABLE /*_*/site_identifiers ( si_type VARBINARY(32) NOT NULL,  si_key VARBINARY(32) NOT NULL,  si_site INT UNSIGNED NOT NULL,  INDEX si_site (si_site),  INDEX si_key (si_key),  PRIMARY KEY(si_type, si_key) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/updatelog ( ul_key VARCHAR(255) NOT NULL,  ul_value BLOB DEFAULT NULL,  PRIMARY KEY(ul_key) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/actor ( actor_id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,  actor_user INT UNSIGNED DEFAULT NULL,  actor_name VARBINARY(255) NOT NULL,  UNIQUE INDEX actor_user (actor_user),  UNIQUE INDEX actor_name (actor_name),  PRIMARY KEY(actor_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/user_former_groups ( ufg_user INT UNSIGNED DEFAULT 0 NOT NULL,  ufg_group VARBINARY(255) DEFAULT '' NOT NULL,  PRIMARY KEY(ufg_user, ufg_group) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/bot_passwords ( bp_user INT UNSIGNED NOT NULL,  bp_app_id VARBINARY(32) NOT NULL,  bp_password TINYBLOB NOT NULL,  bp_token BINARY(32) DEFAULT '' NOT NULL,  bp_restrictions BLOB NOT NULL,  bp_grants BLOB NOT NULL,  PRIMARY KEY(bp_user, bp_app_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/comment ( comment_id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,  comment_hash INT NOT NULL,  comment_text BLOB NOT NULL,  comment_data BLOB DEFAULT NULL,  INDEX comment_hash (comment_hash),  PRIMARY KEY(comment_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/slots ( slot_revision_id BIGINT UNSIGNED NOT NULL,  slot_role_id SMALLINT UNSIGNED NOT NULL,  slot_content_id BIGINT UNSIGNED NOT NULL,  slot_origin BIGINT UNSIGNED NOT NULL,  INDEX slot_revision_origin_role ( slot_revision_id, slot_origin, slot_role_id ), PRIMARY KEY(slot_revision_id, slot_role_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/site_stats ( ss_row_id INT UNSIGNED NOT NULL,  ss_total_edits BIGINT UNSIGNED DEFAULT NULL,  ss_good_articles BIGINT UNSIGNED DEFAULT NULL,  ss_total_pages BIGINT UNSIGNED DEFAULT NULL,  ss_users BIGINT UNSIGNED DEFAULT NULL,  ss_active_users BIGINT UNSIGNED DEFAULT NULL,  ss_images BIGINT UNSIGNED DEFAULT NULL,  PRIMARY KEY(ss_row_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/user_properties ( up_user INT UNSIGNED NOT NULL,  up_property VARBINARY(255) NOT NULL,  up_value BLOB DEFAULT NULL,  INDEX up_property (up_property),  PRIMARY KEY(up_user, up_property) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/log_search ( ls_field VARBINARY(32) NOT NULL,  ls_value VARCHAR(255) NOT NULL,  ls_log_id INT UNSIGNED DEFAULT 0 NOT NULL,  INDEX ls_log_id (ls_log_id),  PRIMARY KEY(ls_field, ls_value, ls_log_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/change_tag ( ct_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  ct_rc_id INT UNSIGNED DEFAULT NULL,  ct_log_id INT UNSIGNED DEFAULT NULL,  ct_rev_id INT UNSIGNED DEFAULT NULL,  ct_params BLOB DEFAULT NULL,  ct_tag_id INT UNSIGNED NOT NULL,  UNIQUE INDEX change_tag_rc_tag_id (ct_rc_id, ct_tag_id),  UNIQUE INDEX change_tag_log_tag_id (ct_log_id, ct_tag_id),  UNIQUE INDEX change_tag_rev_tag_id (ct_rev_id, ct_tag_id),  INDEX change_tag_tag_id_id ( ct_tag_id, ct_rc_id, ct_rev_id, ct_log_id ), PRIMARY KEY(ct_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/content ( content_id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,  content_size INT UNSIGNED NOT NULL,  content_sha1 VARBINARY(32) NOT NULL,  content_model SMALLINT UNSIGNED NOT NULL,  content_address VARBINARY(255) NOT NULL,  PRIMARY KEY(content_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/l10n_cache ( lc_lang VARBINARY(35) NOT NULL,  lc_key VARCHAR(255) NOT NULL,  lc_value MEDIUMBLOB NOT NULL,  PRIMARY KEY(lc_lang, lc_key) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/module_deps ( md_module VARBINARY(255) NOT NULL,  md_skin VARBINARY(32) NOT NULL,  md_deps MEDIUMBLOB NOT NULL,  PRIMARY KEY(md_module, md_skin) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/redirect ( rd_from INT UNSIGNED DEFAULT 0 NOT NULL,  rd_namespace INT DEFAULT 0 NOT NULL,  rd_title VARBINARY(255) DEFAULT '' NOT NULL,  rd_interwiki VARCHAR(32) DEFAULT NULL,  rd_fragment VARBINARY(255) DEFAULT NULL,  INDEX rd_ns_title (rd_namespace, rd_title, rd_from),  PRIMARY KEY(rd_from) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/pagelinks ( pl_from INT UNSIGNED DEFAULT 0 NOT NULL,  pl_namespace INT DEFAULT 0 NOT NULL,  pl_title VARBINARY(255) DEFAULT '' NOT NULL,  pl_from_namespace INT DEFAULT 0 NOT NULL,  INDEX pl_namespace (pl_namespace, pl_title, pl_from),  INDEX pl_backlinks_namespace ( pl_from_namespace, pl_namespace, pl_title, pl_from ), PRIMARY KEY(pl_from, pl_namespace, pl_title) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/templatelinks ( tl_from INT UNSIGNED DEFAULT 0 NOT NULL,  tl_namespace INT DEFAULT 0 NOT NULL,  tl_title VARBINARY(255) DEFAULT '' NOT NULL,  tl_from_namespace INT DEFAULT 0 NOT NULL,  INDEX tl_namespace (tl_namespace, tl_title, tl_from),  INDEX tl_backlinks_namespace ( tl_from_namespace, tl_namespace, tl_title, tl_from ), PRIMARY KEY(tl_from, tl_namespace, tl_title) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/imagelinks ( il_from INT UNSIGNED DEFAULT 0 NOT NULL,  il_to VARBINARY(255) DEFAULT '' NOT NULL,  il_from_namespace INT DEFAULT 0 NOT NULL,  INDEX il_to (il_to, il_from),  INDEX il_backlinks_namespace ( il_from_namespace, il_to, il_from ), PRIMARY KEY(il_from, il_to) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/langlinks ( ll_from INT UNSIGNED DEFAULT 0 NOT NULL,  ll_lang VARBINARY(35) DEFAULT  NOT NULL,  ll_title VARBINARY(255) DEFAULT  NOT NULL,  INDEX ll_lang (ll_lang, ll_title),  PRIMARY KEY(ll_from, ll_lang) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/iwlinks ( iwl_from INT UNSIGNED DEFAULT 0 NOT NULL,  iwl_prefix VARBINARY(32) DEFAULT  NOT NULL,  iwl_title VARBINARY(255) DEFAULT  NOT NULL,  INDEX iwl_prefix_title_from (iwl_prefix, iwl_title, iwl_from),  INDEX iwl_prefix_from_title (iwl_prefix, iwl_from, iwl_title),  PRIMARY KEY(iwl_from, iwl_prefix, iwl_title) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/category ( cat_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  cat_title VARBINARY(255) NOT NULL,  cat_pages INT DEFAULT 0 NOT NULL,  cat_subcats INT DEFAULT 0 NOT NULL,  cat_files INT DEFAULT 0 NOT NULL,  UNIQUE INDEX cat_title (cat_title),  INDEX cat_pages (cat_pages),  PRIMARY KEY(cat_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/watchlist_expiry ( we_item INT UNSIGNED NOT NULL,  we_expiry BINARY(14) NOT NULL,  INDEX we_expiry (we_expiry),  PRIMARY KEY(we_item) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/change_tag_def ( ctd_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  ctd_name VARBINARY(255) NOT NULL,  ctd_user_defined TINYINT(1) NOT NULL,  ctd_count BIGINT UNSIGNED DEFAULT 0 NOT NULL,  UNIQUE INDEX ctd_name (ctd_name),  INDEX ctd_count (ctd_count),  INDEX ctd_user_defined (ctd_user_defined),  PRIMARY KEY(ctd_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/ipblocks_restrictions ( ir_ipb_id INT NOT NULL,  ir_type TINYINT(4) NOT NULL,  ir_value INT NOT NULL,  INDEX ir_type_value (ir_type, ir_value),  PRIMARY KEY(ir_ipb_id, ir_type, ir_value) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/querycache ( qc_type VARBINARY(32) NOT NULL,  qc_value INT UNSIGNED DEFAULT 0 NOT NULL,  qc_namespace INT DEFAULT 0 NOT NULL,  qc_title VARBINARY(255) DEFAULT '' NOT NULL,  INDEX qc_type (qc_type, qc_value) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/querycachetwo ( qcc_type VARBINARY(32) NOT NULL,  qcc_value INT UNSIGNED DEFAULT 0 NOT NULL,  qcc_namespace INT DEFAULT 0 NOT NULL,  qcc_title VARBINARY(255) DEFAULT  NOT NULL,  qcc_namespacetwo INT DEFAULT 0 NOT NULL,  qcc_titletwo VARBINARY(255) DEFAULT  NOT NULL,  INDEX qcc_type (qcc_type, qcc_value),  INDEX qcc_title ( qcc_type, qcc_namespace, qcc_title ), INDEX qcc_titletwo ( qcc_type, qcc_namespacetwo, qcc_titletwo ) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/page_restrictions ( pr_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  pr_page INT NOT NULL,  pr_type VARBINARY(60) NOT NULL,  pr_level VARBINARY(60) NOT NULL,  pr_cascade TINYINT NOT NULL,  pr_user INT UNSIGNED DEFAULT NULL,  pr_expiry VARBINARY(14) DEFAULT NULL,  UNIQUE INDEX pr_pagetype (pr_page, pr_type),  INDEX pr_typelevel (pr_type, pr_level),  INDEX pr_level (pr_level),  INDEX pr_cascade (pr_cascade),  PRIMARY KEY(pr_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/user_groups ( ug_user INT UNSIGNED DEFAULT 0 NOT NULL,  ug_group VARBINARY(255) DEFAULT '' NOT NULL,  ug_expiry VARBINARY(14) DEFAULT NULL,  INDEX ug_group (ug_group),  INDEX ug_expiry (ug_expiry),  PRIMARY KEY(ug_user, ug_group) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/querycache_info ( qci_type VARBINARY(32) DEFAULT '' NOT NULL,  qci_timestamp BINARY(14) DEFAULT '19700101000000' NOT NULL,  PRIMARY KEY(qci_type) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/watchlist ( wl_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  wl_user INT UNSIGNED NOT NULL,  wl_namespace INT DEFAULT 0 NOT NULL,  wl_title VARBINARY(255) DEFAULT '' NOT NULL,  wl_notificationtimestamp BINARY(14) DEFAULT NULL,  UNIQUE INDEX wl_user (wl_user, wl_namespace, wl_title),  INDEX wl_namespace_title (wl_namespace, wl_title),  INDEX wl_user_notificationtimestamp ( wl_user, wl_notificationtimestamp ), PRIMARY KEY(wl_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/sites ( site_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  site_global_key VARBINARY(64) NOT NULL,  site_type VARBINARY(32) NOT NULL,  site_group VARBINARY(32) NOT NULL,  site_source VARBINARY(32) NOT NULL,  site_language VARBINARY(35) NOT NULL,  site_protocol VARBINARY(32) NOT NULL,  site_domain VARCHAR(255) NOT NULL,  site_data BLOB NOT NULL,  site_forward TINYINT(1) NOT NULL,  site_config BLOB NOT NULL,  UNIQUE INDEX site_global_key (site_global_key),  INDEX site_type (site_type),  INDEX site_group (site_group),  INDEX site_source (site_source),  INDEX site_language (site_language),  INDEX site_protocol (site_protocol),  INDEX site_domain (site_domain),  INDEX site_forward (site_forward),  PRIMARY KEY(site_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/user_newtalk ( user_id INT UNSIGNED DEFAULT 0 NOT NULL,  user_ip VARBINARY(40) DEFAULT '' NOT NULL,  user_last_timestamp BINARY(14) DEFAULT NULL,  INDEX un_user_id (user_id),  INDEX un_user_ip (user_ip) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/interwiki ( iw_prefix VARCHAR(32) NOT NULL,  iw_url BLOB NOT NULL,  iw_api BLOB NOT NULL,  iw_wikiid VARCHAR(64) NOT NULL,  iw_local TINYINT(1) NOT NULL,  iw_trans TINYINT DEFAULT 0 NOT NULL,  PRIMARY KEY(iw_prefix) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/protected_titles ( pt_namespace INT NOT NULL,  pt_title VARBINARY(255) NOT NULL,  pt_user INT UNSIGNED NOT NULL,  pt_reason_id BIGINT UNSIGNED NOT NULL,  pt_timestamp BINARY(14) NOT NULL,  pt_expiry VARBINARY(14) NOT NULL,  pt_create_perm VARBINARY(60) NOT NULL,  INDEX pt_timestamp (pt_timestamp),  PRIMARY KEY(pt_namespace, pt_title) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/externallinks ( el_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  el_from INT UNSIGNED DEFAULT 0 NOT NULL,  el_to BLOB NOT NULL,  el_index BLOB NOT NULL,  el_index_60 VARBINARY(60) NOT NULL,  INDEX el_from ( el_from, el_to(40) ), INDEX el_to ( el_to(60), el_from ), INDEX el_index ( el_index(60) ), INDEX el_index_60 (el_index_60, el_id),  INDEX el_from_index_60 (el_from, el_index_60, el_id),  PRIMARY KEY(el_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/ip_changes ( ipc_rev_id INT UNSIGNED DEFAULT 0 NOT NULL,  ipc_rev_timestamp BINARY(14) NOT NULL,  ipc_hex VARBINARY(35) DEFAULT '' NOT NULL,  INDEX ipc_rev_timestamp (ipc_rev_timestamp),  INDEX ipc_hex_time (ipc_hex, ipc_rev_timestamp),  PRIMARY KEY(ipc_rev_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/revision_comment_temp ( revcomment_rev INT UNSIGNED NOT NULL,  revcomment_comment_id BIGINT UNSIGNED NOT NULL,  UNIQUE INDEX revcomment_rev (revcomment_rev),  PRIMARY KEY( revcomment_rev, revcomment_comment_id ) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/revision_actor_temp ( revactor_rev INT UNSIGNED NOT NULL,  revactor_actor BIGINT UNSIGNED NOT NULL,  revactor_timestamp BINARY(14) NOT NULL,  revactor_page INT UNSIGNED NOT NULL,  UNIQUE INDEX revactor_rev (revactor_rev),  INDEX actor_timestamp ( revactor_actor, revactor_timestamp ), INDEX page_actor_timestamp ( revactor_page, revactor_actor, revactor_timestamp ), PRIMARY KEY(revactor_rev, revactor_actor) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/page_props ( pp_page INT NOT NULL,  pp_propname VARBINARY(60) NOT NULL,  pp_value BLOB NOT NULL,  pp_sortkey FLOAT DEFAULT NULL,  UNIQUE INDEX pp_propname_page (pp_propname, pp_page),  UNIQUE INDEX pp_propname_sortkey_page (pp_propname, pp_sortkey, pp_page),  PRIMARY KEY(pp_page, pp_propname) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/job ( job_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  job_cmd VARBINARY(60) DEFAULT  NOT NULL,  job_namespace INT NOT NULL,  job_title VARBINARY(255) NOT NULL,  job_timestamp BINARY(14) DEFAULT NULL,  job_params MEDIUMBLOB NOT NULL,  job_random INT UNSIGNED DEFAULT 0 NOT NULL,  job_attempts INT UNSIGNED DEFAULT 0 NOT NULL,  job_token VARBINARY(32) DEFAULT  NOT NULL,  job_token_timestamp BINARY(14) DEFAULT NULL,  job_sha1 VARBINARY(32) DEFAULT '' NOT NULL,  INDEX job_sha1 (job_sha1),  INDEX job_cmd_token (job_cmd, job_token, job_random),  INDEX job_cmd_token_id (job_cmd, job_token, job_id),  INDEX job_cmd ( job_cmd, job_namespace, job_title, job_params(128) ), INDEX job_timestamp (job_timestamp),  PRIMARY KEY(job_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/slot_roles ( role_id INT AUTO_INCREMENT NOT NULL,  role_name VARBINARY(64) NOT NULL,  UNIQUE INDEX role_name (role_name),  PRIMARY KEY(role_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/content_models ( model_id INT AUTO_INCREMENT NOT NULL,  model_name VARBINARY(64) NOT NULL,  UNIQUE INDEX model_name (model_name),  PRIMARY KEY(model_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/categorylinks ( cl_from INT UNSIGNED DEFAULT 0 NOT NULL,  cl_to VARBINARY(255) DEFAULT  NOT NULL,  cl_sortkey VARBINARY(230) DEFAULT  NOT NULL,  cl_sortkey_prefix VARBINARY(255) DEFAULT  NOT NULL,  cl_timestamp TIMESTAMP NOT NULL,  cl_collation VARBINARY(32) DEFAULT  NOT NULL,  cl_type ENUM('page', 'subcat', 'file') DEFAULT 'page' NOT NULL,  INDEX cl_sortkey ( cl_to, cl_type, cl_sortkey, cl_from ), INDEX cl_timestamp (cl_to, cl_timestamp),  INDEX cl_collation_ext ( cl_collation, cl_to, cl_type, cl_from ), PRIMARY KEY(cl_from, cl_to) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/logging ( log_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  log_type VARBINARY(32) DEFAULT  NOT NULL,  log_action VARBINARY(32) DEFAULT  NOT NULL,  log_timestamp BINARY(14) DEFAULT '19700101000000' NOT NULL,  log_actor BIGINT UNSIGNED NOT NULL,  log_namespace INT DEFAULT 0 NOT NULL,  log_title VARBINARY(255) DEFAULT '' NOT NULL,  log_page INT UNSIGNED DEFAULT NULL,  log_comment_id BIGINT UNSIGNED NOT NULL,  log_params BLOB NOT NULL,  log_deleted TINYINT UNSIGNED DEFAULT 0 NOT NULL,  INDEX log_type_time (log_type, log_timestamp),  INDEX log_actor_time (log_actor, log_timestamp),  INDEX log_page_time ( log_namespace, log_title, log_timestamp ), INDEX log_times (log_timestamp),  INDEX log_actor_type_time ( log_actor, log_type, log_timestamp ), INDEX log_page_id_time (log_page, log_timestamp),  INDEX log_type_action ( log_type, log_action, log_timestamp ), PRIMARY KEY(log_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/uploadstash ( us_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  us_user INT UNSIGNED NOT NULL,  us_key VARCHAR(255) NOT NULL,  us_orig_path VARCHAR(255) NOT NULL,  us_path VARCHAR(255) NOT NULL,  us_source_type VARCHAR(50) DEFAULT NULL,  us_timestamp BINARY(14) NOT NULL,  us_status VARCHAR(50) NOT NULL,  us_chunk_inx INT UNSIGNED DEFAULT NULL,  us_props BLOB DEFAULT NULL,  us_size INT UNSIGNED NOT NULL,  us_sha1 VARCHAR(31) NOT NULL,  us_mime VARCHAR(255) DEFAULT NULL,  us_media_type ENUM( 'UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE', '3D' ) DEFAULT NULL, us_image_width INT UNSIGNED DEFAULT NULL,  us_image_height INT UNSIGNED DEFAULT NULL,  us_image_bits SMALLINT UNSIGNED DEFAULT NULL,  INDEX us_user (us_user),  UNIQUE INDEX us_key (us_key),  INDEX us_timestamp (us_timestamp),  PRIMARY KEY(us_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/filearchive ( fa_id INT AUTO_INCREMENT NOT NULL,  fa_name VARBINARY(255) DEFAULT  NOT NULL,  fa_archive_name VARBINARY(255) DEFAULT ,  fa_storage_group VARBINARY(16) DEFAULT NULL,  fa_storage_key VARBINARY(64) DEFAULT '',  fa_deleted_user INT DEFAULT NULL,  fa_deleted_timestamp BINARY(14) DEFAULT NULL,  fa_deleted_reason_id BIGINT UNSIGNED NOT NULL,  fa_size INT UNSIGNED DEFAULT 0,  fa_width INT DEFAULT 0,  fa_height INT DEFAULT 0,  fa_metadata MEDIUMBLOB DEFAULT NULL,  fa_bits INT DEFAULT 0,  fa_media_type ENUM( 'UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE', '3D' ) DEFAULT NULL, fa_major_mime ENUM( 'unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical' ) DEFAULT 'unknown', fa_minor_mime VARBINARY(100) DEFAULT 'unknown',  fa_description_id BIGINT UNSIGNED NOT NULL,  fa_actor BIGINT UNSIGNED NOT NULL,  fa_timestamp BINARY(14) DEFAULT NULL,  fa_deleted TINYINT UNSIGNED DEFAULT 0 NOT NULL,  fa_sha1 VARBINARY(32) DEFAULT '' NOT NULL,  INDEX fa_name (fa_name, fa_timestamp),  INDEX fa_storage_group ( fa_storage_group, fa_storage_key ), INDEX fa_deleted_timestamp (fa_deleted_timestamp),  INDEX fa_actor_timestamp (fa_actor, fa_timestamp),  INDEX fa_sha1 ( fa_sha1(10) ), PRIMARY KEY(fa_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/text ( old_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  old_text MEDIUMBLOB NOT NULL,  old_flags TINYBLOB NOT NULL,  PRIMARY KEY(old_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/oldimage ( oi_name VARBINARY(255) DEFAULT  NOT NULL,  oi_archive_name VARBINARY(255) DEFAULT  NOT NULL,  oi_size INT UNSIGNED DEFAULT 0 NOT NULL,  oi_width INT DEFAULT 0 NOT NULL,  oi_height INT DEFAULT 0 NOT NULL,  oi_bits INT DEFAULT 0 NOT NULL,  oi_description_id BIGINT UNSIGNED NOT NULL,  oi_actor BIGINT UNSIGNED NOT NULL,  oi_timestamp BINARY(14) NOT NULL,  oi_metadata MEDIUMBLOB NOT NULL,  oi_media_type ENUM( 'UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE', '3D' ) DEFAULT NULL, oi_major_mime ENUM( 'unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical' ) DEFAULT 'unknown' NOT NULL, oi_minor_mime VARBINARY(100) DEFAULT 'unknown' NOT NULL,  oi_deleted TINYINT UNSIGNED DEFAULT 0 NOT NULL,  oi_sha1 VARBINARY(32) DEFAULT '' NOT NULL,  INDEX oi_actor_timestamp (oi_actor, oi_timestamp),  INDEX oi_name_timestamp (oi_name, oi_timestamp),  INDEX oi_name_archive_name ( oi_name, oi_archive_name(14) ), INDEX oi_sha1 ( oi_sha1(10) ) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/objectcache ( keyname VARBINARY(255) DEFAULT '' NOT NULL,  value MEDIUMBLOB DEFAULT NULL,  exptime BINARY(14) NOT NULL,  INDEX exptime (exptime),  PRIMARY KEY(keyname) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/ipblocks ( ipb_id INT AUTO_INCREMENT NOT NULL,  ipb_address TINYBLOB NOT NULL,  ipb_user INT UNSIGNED DEFAULT 0 NOT NULL,  ipb_by_actor BIGINT UNSIGNED NOT NULL,  ipb_reason_id BIGINT UNSIGNED NOT NULL,  ipb_timestamp BINARY(14) NOT NULL,  ipb_auto TINYINT(1) DEFAULT 0 NOT NULL,  ipb_anon_only TINYINT(1) DEFAULT 0 NOT NULL,  ipb_create_account TINYINT(1) DEFAULT 1 NOT NULL,  ipb_enable_autoblock TINYINT(1) DEFAULT 1 NOT NULL,  ipb_expiry VARBINARY(14) NOT NULL,  ipb_range_start TINYBLOB NOT NULL,  ipb_range_end TINYBLOB NOT NULL,  ipb_deleted TINYINT(1) DEFAULT 0 NOT NULL,  ipb_block_email TINYINT(1) DEFAULT 0 NOT NULL,  ipb_allow_usertalk TINYINT(1) DEFAULT 0 NOT NULL,  ipb_parent_block_id INT DEFAULT NULL,  ipb_sitewide TINYINT(1) DEFAULT 1 NOT NULL,  UNIQUE INDEX ipb_address_unique ( ipb_address(255), ipb_user, ipb_auto ), INDEX ipb_user (ipb_user),  INDEX ipb_range ( ipb_range_start(8), ipb_range_end(8) ), INDEX ipb_timestamp (ipb_timestamp),  INDEX ipb_expiry (ipb_expiry),  INDEX ipb_parent_block_id (ipb_parent_block_id),  PRIMARY KEY(ipb_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/image ( img_name VARBINARY(255) DEFAULT '' NOT NULL,  img_size INT UNSIGNED DEFAULT 0 NOT NULL,  img_width INT DEFAULT 0 NOT NULL,  img_height INT DEFAULT 0 NOT NULL,  img_metadata MEDIUMBLOB NOT NULL,  img_bits INT DEFAULT 0 NOT NULL,  img_media_type ENUM( 'UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE', '3D' ) DEFAULT NULL, img_major_mime ENUM( 'unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical' ) DEFAULT 'unknown' NOT NULL, img_minor_mime VARBINARY(100) DEFAULT 'unknown' NOT NULL,  img_description_id BIGINT UNSIGNED NOT NULL,  img_actor BIGINT UNSIGNED NOT NULL,  img_timestamp BINARY(14) NOT NULL,  img_sha1 VARBINARY(32) DEFAULT '' NOT NULL,  INDEX img_actor_timestamp (img_actor, img_timestamp),  INDEX img_size (img_size),  INDEX img_timestamp (img_timestamp),  INDEX img_sha1 ( img_sha1(10) ), INDEX img_media_mime ( img_media_type, img_major_mime, img_minor_mime ), PRIMARY KEY(img_name) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/recentchanges ( rc_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  rc_timestamp BINARY(14) NOT NULL,  rc_actor BIGINT UNSIGNED NOT NULL,  rc_namespace INT DEFAULT 0 NOT NULL,  rc_title VARBINARY(255) DEFAULT  NOT NULL,  rc_comment_id BIGINT UNSIGNED NOT NULL,  rc_minor TINYINT UNSIGNED DEFAULT 0 NOT NULL,  rc_bot TINYINT UNSIGNED DEFAULT 0 NOT NULL,  rc_new TINYINT UNSIGNED DEFAULT 0 NOT NULL,  rc_cur_id INT UNSIGNED DEFAULT 0 NOT NULL,  rc_this_oldid INT UNSIGNED DEFAULT 0 NOT NULL,  rc_last_oldid INT UNSIGNED DEFAULT 0 NOT NULL,  rc_type TINYINT UNSIGNED DEFAULT 0 NOT NULL,  rc_source VARBINARY(16) DEFAULT  NOT NULL,  rc_patrolled TINYINT UNSIGNED DEFAULT 0 NOT NULL,  rc_ip VARBINARY(40) DEFAULT '' NOT NULL,  rc_old_len INT DEFAULT NULL,  rc_new_len INT DEFAULT NULL,  rc_deleted TINYINT UNSIGNED DEFAULT 0 NOT NULL,  rc_logid INT UNSIGNED DEFAULT 0 NOT NULL,  rc_log_type VARBINARY(255) DEFAULT NULL, rc_log_action VARBINARY(255) DEFAULT NULL, rc_params BLOB DEFAULT NULL, INDEX rc_timestamp (rc_timestamp), INDEX rc_namespace_title_timestamp (   rc_namespace, rc_title, rc_timestamp  ), INDEX rc_cur_id (rc_cur_id), INDEX rc_new_name_timestamp (   rc_new, rc_namespace, rc_timestamp  ), INDEX rc_ip (rc_ip), INDEX rc_ns_actor (rc_namespace, rc_actor), INDEX rc_actor (rc_actor, rc_timestamp), INDEX rc_name_type_patrolled_timestamp (   rc_namespace, rc_type, rc_patrolled,    rc_timestamp  ), INDEX rc_this_oldid (rc_this_oldid), PRIMARY KEY(rc_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/archive ( ar_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  ar_namespace INT DEFAULT 0 NOT NULL,  ar_title VARBINARY(255) DEFAULT  NOT NULL,  ar_comment_id BIGINT UNSIGNED NOT NULL,  ar_actor BIGINT UNSIGNED NOT NULL,  ar_timestamp BINARY(14) NOT NULL,  ar_minor_edit TINYINT DEFAULT 0 NOT NULL,  ar_rev_id INT UNSIGNED NOT NULL,  ar_deleted TINYINT UNSIGNED DEFAULT 0 NOT NULL,  ar_len INT UNSIGNED DEFAULT NULL,  ar_page_id INT UNSIGNED DEFAULT NULL,  ar_parent_id INT UNSIGNED DEFAULT NULL,  ar_sha1 VARBINARY(32) DEFAULT  NOT NULL,  INDEX ar_name_title_timestamp ( ar_namespace, ar_title, ar_timestamp ), INDEX ar_actor_timestamp (ar_actor, ar_timestamp),  UNIQUE INDEX ar_revid_uniq (ar_rev_id),  PRIMARY KEY(ar_id) ) /*$wgDBTableOptions*/;

CREATE TABLE /*_*/page ( page_id INT UNSIGNED AUTO_INCREMENT NOT NULL,  page_namespace INT NOT NULL,  page_title VARBINARY(255) NOT NULL,  page_restrictions TINYBLOB DEFAULT NULL,  page_is_redirect TINYINT UNSIGNED DEFAULT 0 NOT NULL,  page_is_new TINYINT UNSIGNED DEFAULT 0 NOT NULL,  page_random DOUBLE PRECISION UNSIGNED NOT NULL,  page_touched BINARY(14) NOT NULL,  page_links_updated VARBINARY(14) DEFAULT NULL,  page_latest INT UNSIGNED NOT NULL,  page_len INT UNSIGNED NOT NULL,  page_content_model VARBINARY(32) DEFAULT NULL,  page_lang VARBINARY(35) DEFAULT NULL,  UNIQUE INDEX name_title (page_namespace, page_title),  INDEX page_random (page_random),  INDEX page_len (page_len),  INDEX page_redirect_namespace_len ( page_is_redirect, page_namespace, page_len ), PRIMARY KEY(page_id) ) /*$wgDBTableOptions*/;