Работа с таблицей (полями) базы данных

Работа с таблицей (полями) базы данных

Drupal имеет достаточно инструментов для модификации существующей таблицы (добавление колонок, индексов и т.д), создание новых, удаление существующих и пр. Для многих эта информация абсолютно не нова, просто возникла острая необходимость собрать все воедино.
Итак рассмотрим следующие возможности:

Содержание

Добавление/удаление столбца

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');

Дополнительная информация по статье

  1. Schema API - оригинальное описание функций, аргументов и классов для работы со схемой