Работа с таблицей (полями) базы данных
Опубликовано вс, 05/07/2015 - 23:45

Drupal имеет достаточно инструментов для модификации существующей таблицы (добавление колонок, индексов и т.д), создание новых, удаление существующих и пр. Для многих эта информация абсолютно не нова, просто возникла острая необходимость собрать все воедино.
Итак рассмотрим следующие возможности:
Содержание
- Добавление/удаление столбца
- Добавление/удаление индексов
- Изменение структуры столбца
- Добавление/удаление primary key
- Добавление/удаление unique key
- Редактирование поля
- Создание/удаление таблицы
- Проверки на существование
- Переименование таблицы
- Поиск таблиц
- Добавление/удаление значения по умолчанию для поля
Добавление/удаление столбца
1 2 3 4 5 6 7 8 9 10 |
// Добавление нового столбца COLUMN_NAME из таблицы TABLE_NAME. db_add_field('TABLE_NAME', 'COLUMN_NAME', array( 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '', )); // Удаление столбца COLUMN_NAME из таблицы TABLE_NAME. db_drop_field('TABLE_NAME', 'COLUMN_NAME'); |
Добавление/удаление индексов
1 2 3 4 5 6 7 8 |
// Добавление индекса. db_add_index('TABLE_NAME', 'INDEX_NAME', array( 'FIELD_NAME_1', 'FIELD_NAME_2', )); // Удаление индекса. db_drop_index('TABLE_NAME', 'INDEX_NAME'); |
Изменение структуры столбца
1 2 3 4 5 |
db_change_field('TABLE_NAME', 'FIELD_NAME', 'FIELD_NAME_NEW', array( 'type' => 'int', 'not null' => TRUE, 'default' => 0, )); |
Добавление/удаление primary key
1 2 3 4 5 |
// Добавление первичного ключа к столбцам FIELD_NAME_1 и FIELD_NAME_2 таблицы TABLE_NAME. db_add_primary_key('TABLE_NAME', array('FIELD_NAME_1', 'FIELD_NAME_2')); // Удаление первичных ключей из таблицы TABLE_NAME. db_drop_primary_key('TABLE_NAME'); |
Добавление/удаление unique key
1 2 3 4 5 |
// Добавление уникального ключа KEY_NAME для столбцов FIELD_NAME_1 и FIELD_NAME_2 таблицы TABLE_NAME. db_add_unique_key('TABLE_NAME', 'KEY_NAME', array('FIELD_NAME_1', 'FIELD_NAME_2')); // Удаление уникального ключа KEY_NAME из таблицы TABLE_NAME. db_drop_unique_key('TABLE_NAME', 'KEY_NAME'); |
Редактирование поля
1 2 3 4 5 6 |
// Редактирование существующего поля. db_change_field('TABLE_NAME', 'FIELD_NAME', 'FIELD_NAME_NEW', array( 'type' => 'int', 'not null' => TRUE, 'default' => 0, )); |
Создание/удаление таблицы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// Определяем структуру полей таблицы. $schema = array( 'description' => 'Table description.', 'fields' => array( 'id' => array( 'type' => 'serial', 'not null' => TRUE, 'description' => 'Primary Key', ), 'word' => array( 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '', 'description' => 'The word.', ), 'quantity' => array( 'type' => 'int', 'not null' => TRUE, 'default' => 0, 'description' => 'Quantity letters of word.', ), ), 'primary key' => array('id'), 'indexes' => array( 'list' => array('word', 'id'), ), 'unique keys' => array( 'name' => array('word'), ), ); // Создаем таблицу TABLE_NAME. db_create_table('TABLE_NAME', $schema); // Удаляем таблицу TABLE_NAME. db_drop_table('TABLE_NAME'); |
Проверки на существование
1 2 3 4 5 6 7 8 |
// Проверяем существование поля FIELD_NAME в таблице TABLE_NAME. db_field_exists('TABLE_NAME', 'FIELD_NAME'); // Проверяем существование индекса INDEX_NAME в таблице TABLE_NAME. db_index_exists('TABLE_NAME', 'INDEX_NAME'); // Проверяем существование таблицы TABLE_NAME. db_table_exists('TABLE_NAME'); |
Переименование таблицы
1 2 |
// Устанавливаем существующей таблице TABLE_NAME новое имя TABLE_NAME_NEW. db_rename_table('TABLE_NAME', 'TABLE_NAME_NEW'); |
Поиск таблиц
1 2 3 4 5 |
// Строка передается без префиксов (!), поэтому необходимо самим по заботиться об этом. $table_expression = Database::getConnection()->prefixTables('{field_}') . '%'; // Поиск всех таблиц начинающихся с field_. Возвращает ассоциативный массив, // где ключ и значение - имя найденной таблицы. db_find_tables($table_expression); |
Добавление/удаление дефолтного значения для поля
1 2 3 4 5 |
// Устанавливаем дефолтное значение 0 для поля FIELD_NAME в таблице TABLE_NAME. db_field_set_default('TABLE_NAME', 'FIELD_NAME', 0); // Удаляем дефолтное значение для поля FIELD_NAME в таблице TABLE_NAME. db_field_set_no_default('TABLE_NAME', 'FIELD_NAME'); |
Дополнительная информация по статье
- Schema API - оригинальное описание функций, аргументов и классов для работы со схемой