Создание и удаление таблиц

Создание таблицы

Перед созданием таблицы необходимо выбрать базу данных, в которую таблица будет записана. Это делается с помощью оператора USE:

MySQL
USE имя_базы_данных;

Для создания таблицы используется оператор CREATE TABLE. Его базовый синтаксис имеет следующий вид:

MySQL
CREATE TABLE [IF NOT EXIST] имя_таблицы (
     колонка_1 тип_данных,
    [колонка_2 тип_данных,]
    ...
    [колонка_n тип_данных,]
);

Например, создадим таблицу пользователей.

MySQL
CREATE TABLE Users (
    id INT,
    name VARCHAR(255),
    age INT
);

INT, VARCHAR(255) - типы данных: числовой и строковый соответственно. Более подробно о них можно будет узнать в следующих статьях.

Дополнительные параметры определения колонок

Вышеприведенное определение колонок в таблице является упрощенным. Помимо названия колонки и ее типа в определение иногда необходимо добавлять следующие необязательные параметры:

  • PRIMARY KEY

    Указывает колонку или множество колонок как первичный ключ.

  • AUTO_INCREMENT

    Указывает, что значение данной колонки будет автоматически увеличивается при добавление новых записей в таблицу. Каждая таблица имеет максимум одну AUTO_INCREMENT колонку. Стоит отметить, что данный параметр можно применять только к целочисленным типам и к типам с плавающей запятой.

  • UNIQUE

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

  • NOT NULL

    Указывает, что значения в данной колонке должны быть отличными от NULL.

  • DEFAULT

    Указывает значение по умолчанию. Данный параметр не применяется к типам BLOB, TEXT, GEOMETRY и JSON.

Для нашей таблицы пользователей можно указать следующие параметры:

MySQL
CREATE TABLE Users (
    id INT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INT NOT NULL DEFAULT 18
);

Так в данном примере

  • id - поле числового типа, являющееся первичным ключом;
  • name - поле строкового типа с максимальной длиной в 255 символов, являющееся обязательным к заполнению;
  • age - поле числового типа со значением по умолчанию равным 18.

Описание таблицы

Для того, чтобы посмотреть описание созданной таблицы можно воспользоваться оператором DESCRIBE.

MySQL
DESCRIBE Users;
FieldTypeNullKeyDefaultExtra
idint(11)NOPRI<NULL>
namevarchar(255)NO<NULL>
ageint(11)NO18

Дополнительные параметры определения таблицы

Помимо описания колонок при создании таблицы можно дополнительно указать следующие параметры:

  • Первичный ключ

    Если вы не определили ключ с помощью параметров к колонке, то это можно сделать с помощью параметров к таблице.

    MySQL
    CREATE TABLE Users (
        id INT,
        name VARCHAR(255) NOT NULL,
        age INT NOT NULL DEFAULT 18,
        PRIMARY KEY (id)
    );
  • Внешние ключи

    Добавим в таблицу Users поле company - место работы нашего пользователя, которое будет ссылаться на запись в таблице Companies.

    MySQL
    CREATE TABLE Users (
        id INT,
        name VARCHAR(255) NOT NULL,
        age INT NOT NULL DEFAULT 18,
        company INT,
        PRIMARY KEY (id)
    );

    Для такого, чтобы при добавлении новых записей в таблицу Users гарантировать, что в колонке company находится идентификатор, существующий в таблице Companies, используется внешний ключ. Он имеет следующий синтаксис:

    MySQL
    CREATE TABLE Users (
        id INT,
        name VARCHAR(255) NOT NULL,
        age INT NOT NULL DEFAULT 18,
        company INT,
        PRIMARY KEY (id),
        FOREIGN KEY (company) REFERENCES Companies (id)
    );

    При наличии внешних ключей можно определить поведение текущей записи при изменении или удалении записи, на которую запись ссылается.

    MySQL
    CREATE TABLE Users (
        id INT,
        name VARCHAR(255) NOT NULL,
        age INT NOT NULL DEFAULT 18,
        company INT,
        PRIMARY KEY (id),
        FOREIGN KEY (company) REFERENCES Companies (id) 
            ON DELETE RESTRICT ON UPDATE CASCADE
    );

    ON DELETE RESTRICT означает, что если попробовать удалить компанию, у которой в таблице Users есть данные, база данных не даст этого сделать:

    MySQL
    Cannot delete or update a parent row: a foreign key constraint fails

    Если бы было указано ON DELETE CASCADE, то при удалении компании были бы удалены все пользователи, ссылающиеся на эту компанию.

    Есть еще одна опция — ON DELETE SET NULL. При ее использовании база данных запишет NULL в качестве значения поля company для всех пользователей, работавших в удаленной компании.

    ON UPDATE CASCADE означает, что если компания изменить свой идентификатор, то все пользователи (Users) получат новый идентификатор в поле company.

Удаление таблицы

Удаление таблицы производится при помощи оператора DROP TABLE.

MySQL
DROP TABLE [IF EXIST] имя_таблицы;
Создание и удаление баз данных
Строковый тип данных