DbDelta() - Створює чи змінює таблиці бази даних на основі переданого SQL запиту на створення
Створює або змінює таблиці бази даних на основі переданого запиту SQL на створення таблиці.
У функцію передається SQL запит створення таблиці (CREATE TABLE) і якщо таблиці ще немає, вона буде створена, якщо вона вже є, то буде оновлена.
При оновленні таблиці, переданий запит створення таблиці розбирається на частини і його основі вносяться зміни у існуючу таблицю.
Вимоги
Оскільки функція розбирає запит, він повинен відповідати вимогам:
Кожне поле має бутина новому рядку.
У запитіне повинно бути подвійних переносів рядків, наприклад, не можна відокремлювати поля від індексів порожнім рядком.
При створенні складових індексів розділяти назви полів потрібно лише комою без пропуску. Вірно: KEY field (field,field2). Не так: KEY field (field, field2)
Не можна використовуватиапострофи або зворотні лапки ( ' ` ) для імен таблиць або імен полів таблиць: $wpdb->table , а не `$wpdb->table`
Потрібновказувати довжину поля, полям яких може бути довжина. Наприклад: int(11).
Нотатки по роботі функції
При поновленні структури не враховується порядок полів. Тобто. якщо у запиті поле стоїть на другому місці і воно додається в існуючу таблицю, воно буде додано в кінець (перевіряв на WP 4.4).
Також не вдасться додати головне поле auto increment з PRIMARY KEY до вже існуючої таблиці.
Якщо індексу немає в новій структурі, то він не вийде з вже існуючої таблиці.
Якщо поля немає в новій структурі, то воно не відійде з вже існуючоїтаблиці.
Якщо індекс змінено, наприклад, до нього додалося ще одне поле, але назва не змінилася, то функція викличе помилку (індекс вже існує).
Для поля можна вказати ключ UNIQUE:
але цьому цьому полю не потрібно задавати індекс, він створиться автоматично.
Також індекс можна вказати безпосередньо:
В обох випадках при спробі додати не унікальне значення поля, SQL видасть помилку ( Duplicate entry '[email protected]' for key 'email' ) і INSERT запит, наприклад $wpdb->insert() , не спрацює.
Коли потрібно використовувати dbDelta?
Підходить для створення нових таблиць, полів, індексів, зміни структури полів.
Не підходить для зміни структури індексів, видалення полів/індексів. Будь-яке видалення структури полів/індексів, потрібно робити окремим ALTER запитом.
Функція не визначена за промовчанням. Для її роботи необхідно підключити файл:
Хуки з функції
Повертає
Масив. Рядки, що містять результати різних SQL запитів.
Використання
SQL запит. Можна вказати рядок з кількома запитами (розділяються крапкою з комою). Можна вказати масив, де кожен елемент повинен бути окремим SQL запитом.
Внутрішнє використання (зазвичай це взагалі не потрібне). Якщо встановити в цей параметр одне зі значення: '', 'all', 'blog', 'global', 'ms_global'. То $queries отримає запити створення таблиць WordPress, де:
$execute(логічний) Виконувати вказані в $queries запити чи ні. false – не виконувати. За замовчуванням: true
#1 Створення довільної таблиці у базі даних
Створювана таблиця повинна мати префікс, якийзаписаний у wp-config.php отримати його можна ось так з об'єкта класу $wpdb->get_blog_prefix() або $wpdb->prefix . Також можна отримати кодування за замовчуванням вказане там: $wpdb->charset і $wpdb->collate .
Тут функція створює таблицю test_table містить колонки id, address, alert та meta. id – це первинний ключ з автоінкрементом. Поле alert встановлюється як індексоване.
#2 Додаємо колонку до наявної таблиці
У цьому прикладі функція додає ще одну колонку таблицю з назвою 'test_table', функція dbDelta() дозволяє зробити це найбільш зручно.