DbDelta() - Створює чи змінює таблиці бази даних на основі переданого SQL запиту на створення

Створює або змінює таблиці бази даних на основі переданого запиту SQL на створення таблиці.

У функцію передається SQL запит створення таблиці (CREATE TABLE) і якщо таблиці ще немає, вона буде створена, якщо вона вже є, то буде оновлена.

При оновленні таблиці, переданий запит створення таблиці розбирається на частини і його основі вносяться зміни у існуючу таблицю.

Вимоги

Оскільки функція розбирає запит, він повинен відповідати вимогам:

Кожне поле має бутина новому рядку.

У запитіне повинно бути подвійних переносів рядків, наприклад, не можна відокремлювати поля від індексів порожнім рядком.

При створенні складових індексів розділяти назви полів потрібно лише комою без пропуску. Вірно: KEY field (field,field2). Не так: KEY field (field, field2)

Не можна використовуватиапострофи або зворотні лапки ( ' ` ) для імен таблиць або імен полів таблиць: $wpdb->table , а не `$wpdb->table`

Потрібновказувати довжину поля, полям яких може бути довжина. Наприклад: int(11).

  • Рекомендується вказувати тип поля малими літерами: varchar(50) , а чи не VARCHAR(50) , int(10) , а чи не INT(10) .
  • Нотатки по роботі функції

    При поновленні структури не враховується порядок полів. Тобто. якщо у запиті поле стоїть на другому місці і воно додається в існуючу таблицю, воно буде додано в кінець (перевіряв на WP 4.4).

    Також не вдасться додати головне поле auto increment з PRIMARY KEY до вже існуючої таблиці.

    Якщо індексу немає в новій структурі, то він не вийде з вже існуючої таблиці.

    Якщо поля немає в новій структурі, то воно не відійде з вже існуючоїтаблиці.

    Якщо індекс змінено, наприклад, до нього додалося ще одне поле, але назва не змінилася, то функція викличе помилку (індекс вже існує).

  • Для оновлення індексів краще робити окремі ALTER TABLE запити.
  • Для поля можна вказати ключ 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() дозволяє зробити це найбільш зручно.