Далее перечислены методы класса Database, предназначенные для операций с таблицами целиком: чтение списка таблиц, чтение и изменение свойств таблицы, выполнение различных обслуживающих функций (таких, как оптимизация таблицы), очистка и удаление таблицы. Рассмотрим их подробнее.
array getTablesList ( [bool full [, bool clearcache]] )
Метод возвращает список имеющихся таблиц в базе данных сайта в виде массива. По умолчанию возвращаются только те таблицы, которые не входят в "черный список", перечисленный в константе DatabaseRestrictedTables. Если указать необязательному параметру full значение true, это ограничение будет снято.
Полученный результат кешируется в памяти, чтобы сэкономить на количестве SQL-запросов при последующих вызовах этого метода. Поскольку обычно количество таблиц в базе не меняется, тем более в пределах жизни одного скрипта, такое кеширование себя оправдывает. Но если после вызова данного метода вы создали, переименовали или удалили таблицу, повторный вызов метода вернет устаревшие данные. Чтобы очистить кеш и заставить метод обновить список таблиц в памяти, достаточно вызвать данный метод, указав ему true в качестве необязательного параметра clearcache. Либо, что то же самое, воспользоваться методом clearCache.
Пример:
// Список таблиц в базе данных
$tables=$database->getTablesList();
foreach($tables as $table) echo $table; // bundlegroups bundles bundlesets ...
bool isTablePresent ( string table )
Метод определяет, присутствует ли в базе данных сайта таблица с именем table, и возвращает true, если такая таблица обнаружена, и false в противном случае.
Пример:
// Установлен ли модуль магазина?
$shopInstalled=$database->isTablePresent("shop");
echo $shopInstalled?"Модуль установлен.":"Модуль не установлен."; array getTablesInformation ( [bool full] )
Метод возвращает подробную информацию о таблицах. Результат имеет вид ассоциативного массива, у которого ключи − это имена таблиц, а значения − детальная информация о таблице, также в виде ассоциативных массивов. Массив, хранящий сведения о конкретной таблице, имеет следующие ключи:
type: тип таблицы (например, MyISAM).
rows: количество записей в таблице.
size: объем в байтах, занимаемый таблицей.
datasize: объем в байтах, занимаемый данными таблицы.
indexsize: объем в байтах, занимаемый индексами таблицы.
counter: текущее значение счетчика таблицы, если он используется.
comment: примечание к таблице.
Как и в случае метода getTablesList, данный метод по умолчанию возвращает сведения только о тех таблицах, которые не входят в "черный список", перечисленный в константе DatabaseRestrictedTables. Если вам нужно отключить это ограничение, и получить сведения о всех таблицах базы данных − укажите необязательному параметру full значение true.
Пример:
// Получаем сведения от таблицах
$information=$database->getTablesInformation();
// Считаем общее количество записей во всех таблицах
$rows=0;
foreach($information as $table=>$info) $rows+=$info["rows"];
echo "Всего записей в таблицах: $rows.";
array getTableInformation ( string table )
Метод возвращает сведения о таблице table. Сюда относится список полей таблицы с детальной информацией о каждом поле, а также список индексов таблицы (как уникальных, так и обычных) с перечислением списка полей, покрываемых каждым индексом. Результат имеет вид ассоциативного массива со следующими ключами:
columns: перечисление полей таблицы, в порядке их следования. Обычный (не ассоциативный) массив, каждый элемент которого соответствует одному полю таблицы и является ассоциативным массивом с ключами name, type, size, attrs и default − название поля, его тип, ограничение по размеру, набор дополнительных атрибутов и значение по умолчанию, соответственно.
uniques: перечисление уникальных индексов таблицы. Уникальный индекс отличается от обычного тем, что он не позволяет индексированным данным повторяться. Ассоциативный массив, содержащий пары "название индекса − список полей", где список полей является обычным (не ассоциативным) массивом с перечислением полей, входящих в данный индекс. Каждому полю, содержащемуся в индексе, соответствует один элемент массива, который также, в свою очередь, является ассоциативным массивом с ключами name и size − название поля и его длина в индексе соответственно.
indexes: перечисление обычных индексов таблицы. Формат такой же, как у списка уникальных индексов.
Метод поддерживает только уникальные и не-уникальные индексы. Индексы прочих типов (такие, как FULLTEXT или SPATIAL) методом не поддерживаются и возвращаются в списке обычных индексов таблицы.
Пример:
// Получаем сведения о таблице music
$table=$database->getTableInformation("music");
// Выводим список полей
foreach($table["columns"] as $column) echo $column["name"]; // id band album year tracks
// Выводим список уникальных индексов, со списком полей у каждого
foreach($table["uniques"] as $name=>$index) {
echo "Уникальный индекс $name покрывает следующие поля:";
foreach($index as $entry) echo $entry["name"];
} bool changeTableType ( string table, string type )
Метод меняет тип таблицы table на новый, указанный параметром type. Например, можно изменить таблицу с типа MyISAM на InnoDB и обратно. В зависимости от типа у таблицы меняется список возможностей, скорость работы, уровень блокировки, потребляемая память и т. д. В большинстве несложных приложений тип MyISAM является наилучшим выбором, в случае необходимости транзакций или очень большого объема данных (гигабайты и более) тип InnoDB подходит лучше. Для хранения сессий идеально подходит тип HEAP, хранящий все данные в памяти.
Метод возвращает true или false в зависимости от того, удалось перейти на новый тип таблицы или нет.
Пример:
// Переключаем таблицу магазина на тип InnoDB
$database->changeTableType("shop","InnoDB"); bool changeTableComment ( string table, string comment )
Метод задает таблице table комментарий (примечание) comment. Впоследствии этот комментарий можно прочитать при помощи метода getTablesInformation, а также увидеть в стандартном плагине "Управление базой данных" или в стороннем приложении типа PhpMyAdmin.
Пример:
// Даем таблице shop читабельный комментарий
$database->changeTableComment("shop","Магазин"); bool renameTable ( string table, string name )
Метод переименовывает таблицу table, давая ей новое имя name, и возвращает true, если таблица была успешно переименована, и false в противном случае.
Пример:
// Переименовываем таблицу shop в таблицу products
$database->renameTable("shop","products"); void optimizeTable ( string table )
Метод оптимизирует таблицу table, а также сбрасывает у нее значение внутреннего счетчика к минимально возможному значению. Для таблиц, содержимое которых меняется интенсивно, рекомендуется вызывать данный метод время от времени, чтобы избавиться от внутренней фрагментации данных.
Пример:
// Оптимизация таблицы shop
$database->optimizeTable("shop"); void arrangeTable ( string table )
Метод сортирует содержимое таблицы согласно порядку, указанному ее первичным ключом. После вызова данного метода все значения первичного ключа в ней будут идти по возрастанию, а кроме того, таблица будет дефрагментирована. Если первичный ключ в таблице не задан, метод не выполняет никаких действий.
Следует заметить, что данный метод влияет только на "неотсортированный" порядок следования записей. Если упорядочить таблицу, то все последующие запросы, не использующие сортировку данных, такие, как getLines или getLinesRange, будут возвращать записи в порядке возрастания первичного ключа. Кроме того, в некоторых случаях выборка по первичному ключу, например, выборка записи по ее ID, может работать несколько быстрее. В остальном же данный метод никак не влияет на поведение таблицы.
Пример:
// Упорядочение таблицы shop
$database->arrangeTable("shop"); void repairTable ( string table )
Метод выполняет починку таблицы table. Это бывает полезно, например, в случае, если на сервере произошел сбой оборудования и таблица перестала работать как следует. Если таблица не была повреждена, метод не выполняет никаких действий.
Пример:
// Починка таблицы shop
$database->repairTable("shop"); void lockTable ( string table )
Метод временно блокирует таблицу table для единоличного использования. До вызова метода unlockTable, либо до завершения работы скрипта, данная таблица будет доступна другим процессам только для чтения, а все операции записи будут поставлены в очередь. Метод удобен для раздачи важных ограниченных ресурсов (например, билетов в кинотеатр или акций в магазине) в высоконагруженных системах, когда возможно одновременное обращение двух или более разных процессов к одной записи в таблице. В этом случае рекомендуется заблокировать таблицу, убедиться, что ресурс все еще доступен, затем выполнить все необходимые действия и только после этого разблокировать таблицу методом unlockTable.
Пример:
// Блокировка таблицы shop
$database->lockTable("shop"); void unlockTable ( string table )
Метод разблокирует (освобождает) таблицу table, которая ранее была заблокирована методом lockTable. В связи с ограничениями синтаксиса SQL, данный метод на самом деле разблокирует все заблокированные таблицы. Поэтому, если вы блокируете несколько таблиц одновременно (что, впрочем, не рекомендуется по соображениям быстродействия базы данных), будьте готовы к тому, что первый же вызов данного метода освободит все занятые таблицы базы, а не только таблицу table.
Пример:
// Освобождение таблицы shop
$database->unlockTable("shop"); void clearTable ( string table )
Метод очищает содержимое таблицы table. Будьте осторожны, вызов данного метода приведет к потере всех данных, которые хранились в таблице! Данный метод работает очень быстро по сравнению с методом deleteLines, поскольку он просто удаляет с диска файл с данными и создает вместо него пустой файл.
Пример:
// Очистка таблицы shop (удаление всех данных, сама таблица останется)
$database->clearTable("shop"); void deleteTable ( string table )
Метод удаляет таблицу table из базы данных проекта. Как и в случае предыдущего метода, будьте осторожны, вызов данного метода приведет к потере всех данных, которые хранились в таблице, кроме того, будет потеряна вся информация о полях и индексах таблицы.
Пример:
// Удаление таблицы shop
$database->deleteTable("shop"); void clearCache ( void )
Метод обновляет внутренний кеш класса Database, в частности, список таблиц в базе данных. Рекомендуется использовать данный метод, если в вашем скрипте подряд выполняются операции чтения списка таблиц, затем создания, переименования или удаления таблицы, а затем снова чтения списка таблиц для дальнейшей работы. Автоматически данный кеш не обновляется, поскольку это требуется крайне редко.
Пример:
// Очистка и обновление кеша для списка таблиц
$database->clearCache();