API to handle database schemas.
A Drupal schema definition is an array structure representing one or more tables and their related keys and indexes. A schema is defined by hook_schema(), which usually lives in a modulename.install file.
By implementing hook_schema() and specifying the tables your module declares, you can easily create and drop these tables on all supported database engines. You don't have to deal with the different SQL dialects for table creation and alteration of the supported database engines.
hook_schema() should return an array with a key for each table that the module defines.
The following keys are defined:
All parameters apart from 'type' are optional except that type 'numeric' columns must specify 'precision' and 'scale', and type 'varchar' must specify the 'length' parameter.
A key column specifier is either a string naming a column or an array of two elements, column name and length, specifying a prefix of the named column.
As an example, here is a SUBSET of the schema definition for Drupal's 'node' table. It show four fields (nid, vid, type, and title), the primary key on field 'nid', a unique key named 'vid' on field 'vid', and two indexes, one named 'nid' on field 'nid' and one named 'node_title_type' on the field 'title' and the first four bytes of the field 'type':
$schema['node'] = array( 'description' => 'The base table for nodes.', 'fields' => array( 'nid' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE), 'vid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE,'default' => 0), 'type' => array('type' => 'varchar','length' => 32,'not null' => TRUE, 'default' => ''), 'language' => array('type' => 'varchar','length' => 12,'not null' => TRUE,'default' => ''), 'title' => array('type' => 'varchar','length' => 255,'not null' => TRUE, 'default' => ''), 'uid' => array('type' => 'int', 'not null' => TRUE, 'default' => 0), 'status' => array('type' => 'int', 'not null' => TRUE, 'default' => 1), 'created' => array('type' => 'int', 'not null' => TRUE, 'default' => 0), 'changed' => array('type' => 'int', 'not null' => TRUE, 'default' => 0), 'comment' => array('type' => 'int', 'not null' => TRUE, 'default' => 0), 'promote' => array('type' => 'int', 'not null' => TRUE, 'default' => 0), 'moderate' => array('type' => 'int', 'not null' => TRUE,'default' => 0), 'sticky' => array('type' => 'int', 'not null' => TRUE, 'default' => 0), 'translate' => array('type' => 'int', 'not null' => TRUE, 'default' => 0), ), 'indexes' => array( 'node_changed' => array('changed'), 'node_created' => array('created'), 'node_moderate' => array('moderate'), 'node_frontpage' => array('promote', 'status', 'sticky', 'created'), 'node_status_type' => array('status', 'type', 'nid'), 'node_title_type' => array('title', array('type', 4)), 'node_type' => array(array('type', 4)), 'uid' => array('uid'), 'translate' => array('translate'), ), 'unique keys' => array( 'vid' => array('vid'), ), // For documentation purposes only; foreign keys are not created in the // database. 'foreign keys' => array( 'node_revision' => array( 'table' => 'node_field_revision', 'columns' => array('vid' => 'vid'), ), 'node_author' => array( 'table' => 'users', 'columns' => array('uid' => 'uid'), ), ), 'primary key' => array('nid'), );
Name | Location | Description |
---|---|---|
db_add_field Deprecated | core/includes/database.inc | Adds a new field to a table. |
db_add_index Deprecated | core/includes/database.inc | Adds an index. |
db_add_primary_key Deprecated | core/includes/database.inc | Adds a primary key to a database table. |
db_add_unique_key Deprecated | core/includes/database.inc | Adds a unique key. |
db_change_field Deprecated | core/includes/database.inc | Changes a field definition. |
db_create_table Deprecated | core/includes/database.inc | Creates a new table from a Drupal table definition. |
db_drop_field Deprecated | core/includes/database.inc | Drops a field. |
db_drop_index Deprecated | core/includes/database.inc | Drops an index. |
db_drop_primary_key Deprecated | core/includes/database.inc | Drops the primary key of a database table. |
db_drop_table Deprecated | core/includes/database.inc | Drops a table. |
db_drop_unique_key Deprecated | core/includes/database.inc | Drops a unique key. |
db_field_exists Deprecated | core/includes/database.inc | Checks if a column exists in the given table. |
db_field_names Deprecated | core/includes/database.inc | Returns an array of field names from an array of key/index column specifiers. |
db_field_set_default Deprecated | core/includes/database.inc | Sets the default value for a field. |
db_field_set_no_default Deprecated | core/includes/database.inc | Sets a field to have no default value. |
db_find_tables Deprecated | core/includes/database.inc | Finds all tables that are like the specified base table name. |
db_index_exists Deprecated | core/includes/database.inc | Checks if an index exists in the given table. |
db_rename_table Deprecated | core/includes/database.inc | Renames a table. |
db_table_exists Deprecated | core/includes/database.inc | Checks if a table exists. |
drupal_get_installed_schema_version | core/includes/schema.inc | Returns the currently installed schema version for a module. |
drupal_get_module_schema | core/includes/schema.inc | Returns a module's schema. |
drupal_get_schema_versions | core/includes/schema.inc | Returns an array of available schema versions for a module. |
drupal_install_schema | core/includes/schema.inc | Creates all tables defined in a module's hook_schema(). |
drupal_schema_get_field_value | core/includes/schema.inc | Typecasts values to proper datatypes. |
drupal_set_installed_schema_version | core/includes/schema.inc | Updates the installed version information for a module. |
drupal_uninstall_schema | core/includes/schema.inc | Removes all tables defined in a module's hook_schema(). |
hook_schema | core/lib/Drupal/Core/Database/database.api.php | Define the current version of the database schema. |
_drupal_schema_initialize | core/includes/schema.inc | Fills in required default values for table definitions from hook_schema(). |
Name | Location | Description |
---|---|---|
SCHEMA_UNINSTALLED | core/includes/schema.inc | Indicates that a module has not been installed yet. |
Name | Location | Description |
---|---|---|
Schema | core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php | PostgreSQL implementation of \Drupal\Core\Database\Schema. |
Schema | core/lib/Drupal/Core/Database/Driver/mysql/Schema.php | MySQL implementation of \Drupal\Core\Database\Schema. |
Schema | core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php | SQLite implementation of \Drupal\Core\Database\Schema. |
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Database!database.api.php/group/schemaapi/8.1.x