Same name and namespace in other branches
  1. 10 core/lib/Drupal/Core/Extension/module.api.php \hook_install()
  2. 5.x developer/hooks/install.php \hook_install()
  3. 6.x developer/hooks/install.php \hook_install()
  4. 7.x modules/system/system.api.php \hook_install()
  5. 8.9.x core/lib/Drupal/Core/Extension/module.api.php \hook_install()
  6. 9 core/lib/Drupal/Core/Extension/module.api.php \hook_install()

Install the current version of the database schema.

The hook will be called the first time a module is installed, and the module's schema version will be set to the module's greatest numbered update hook. Because of this, anytime a hook_update_N() is added to the module, this function needs to be updated to reflect the current version of the database schema.

Table names in the CREATE queries should be wrapped with curly braces so that they're prefixed correctly, see db_prefix_tables() for more on this.

Note that since this function is called from a full bootstrap, all functions (including those in modules enabled by the current page request) are available when this hook is called. Use cases could be displaying a user message, or calling a module function necessary for initial setup, etc.

Implementations of this hook should be placed in a mymodule.install file in the same directory as mymodule.module.

Related topics

File

developer/hooks/install.php, line 36
Documentation for the update system.

Code

function hook_install() {
  switch ($GLOBALS['db_type']) {
    case 'mysql':
    case 'mysqli':
      db_query("CREATE TABLE {event} (\n                  nid int(10) unsigned NOT NULL default '0',\n                  event_start int(10) unsigned NOT NULL default '0',\n                  event_end int(10) unsigned NOT NULL default '0',\n                  timezone int(10) NOT NULL default '0',\n                  PRIMARY KEY (nid),\n                  KEY event_start (event_start)\n                ) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */;");
      break;
    case 'pgsql':
      db_query("CREATE TABLE {event} (\n                  nid int NOT NULL default '0',\n                  event_start int NOT NULL default '0',\n                  event_end int NOT NULL default '0',\n                  timezone int NOT NULL default '0',\n                  PRIMARY KEY (nid)\n                );");
      break;
  }
}