Создаем таблицу в SQL

В этой статье вы научитесь создавать таблицу внутри базы данных с помощью SQL.

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

Для создания таблицы используется SQL-оператор CREATE TABLE.

Синтаксис

Базовый синтаксис для создания таблицы выглядит так:

CREATE TABLE имя_таблицы (
    имя_столбца1 тип_данных ограничения,
    имя_столбца2 тип_данных ограничения,
.... );

Чтобы лучше понять синтаксис, давайте создадим таблицу в нашей базе данных demo. Введите следующую инструкцию в командной строке MySQL и нажмите клавишу Enter:

-- Синтаксис для БД MySQL 
CREATE TABLE persons ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, birth_date DATE, phone VARCHAR(15) NOT NULL UNIQUE ); -- Синтаксис для БД SQL Server CREATE TABLE persons ( id INT NOT NULL PRIMARY KEY IDENTITY(1,1), name VARCHAR(50) NOT NULL, birth_date DATE, phone VARCHAR(15) NOT NULL UNIQUE );

Тип данных

Выше мы показали, как создать таблицу persons с четырьмя столбцами id, name, birth_date и phone. Обратите внимание, что за именем каждого столбца указан его тип данных. Так мы указываем, какой тип данных будет храниться в столбце: целое число, строка, дата и т. д.

Некоторые типы данных могут быть объявлены с параметром длины, который указывает, сколько символов может храниться в столбце. Например, VARCHAR(50) будет хранить до 50 символов.

Примечание. Тип данных столбцов может отличаться в зависимости от системы базы данных. Например, целочисленный тип в MySQL и SQL Server называется INT, а в Oracle — NUMBER.

В следующей таблице приведены наиболее часто используемые типы данных, поддерживаемые в MySQL.

Тип данных Хранит
INT Числовые значения в диапазоне от -2147483648 до 2147483647
DECIMAL Десятичные значения.
CHAR Строки фиксированной длины с максимальным размером 255 символов.
VARCHAR Строки переменной длины с максимальным размером 65 535 символов.
TEXT Строки с максимальным размером 65 535 символов.
DATE Значения даты в формате ГГГГ-ММ-ДД.
DATETIME Значения даты и времени в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС.
TIMESTAMP значения временных меток — количество секунд, прошедших с эпохи Unix ('1970-01-01 00:00:01' UTC).

Ограничения

В SQL также существуют ограничения (constraints), их еще называются модификаторами. Ограничения можно установить для столбцов таблицы — они определяют допустимые значения в столбцах.

Некоторые из ограничений мы уже использовали в предыдущем примере:

  • Ограничение NOT NULL гарантирует, что поле не может иметь значение NULL.
  • Ограничение PRIMARY KEY отмечает соответствующее поле как первичный ключ таблицы.
  • Атрибут AUTO_INCREMENT — расширение MySQL, которое предписывает MySQL автоматически присваивать значение этому полю, если оно не определено, путем увеличения предыдущего значения на 1. Доступно только для числовых полей.
  • Ограничение UNIQUE гарантирует, что каждая строка для столбца должна иметь уникальное значение.

Более подробно об ограничениях в SQL мы поговорим в следующей статье.

Примечание. Microsoft SQL Server использует свойство IDENTITY для выполнения функции автоинкремента. Значение по умолчанию — IDENTITY(1,1) — означает, что начальное значение и инкремент равны 1.

Совет. Вы можете выполнить инструкцию DESC имя_таблицы;, чтобы посмотреть информацию о столбцах или структуру любой таблицы в базах данных MySQL и Oracle. Аналогичная инструкция в SQL Server — EXEC sp_columns имя_таблицы;.

Используем IF NOT EXISTS

Если вы попытаетесь создать таблицу, которая уже существует в базе данных, вы получите сообщение об ошибке. Чтобы избежать этого в MySQL, можно использовать IF NOT EXISTS, как показано ниже:

CREATE TABLE IF NOT EXISTS persons (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);

Совет. Если вы хотите увидеть список таблиц внутри выбранной базы данных, используйте команду SHOW TABLES; в командной строке MySQL.

Проверьте себя
1. Какой тип данных в MySQL хранит строки переменной длины до 65 535 символов?
AVARCHAR
BCHAR
CTEXT
DSTRING
2. Что означает атрибут AUTO_INCREMENT в MySQL при создании таблицы?
AMySQL автоматически генерирует значение поля, увеличивая предыдущее на 1, если значение не задано явно
BЗначение столбца автоматически увеличивается на 10 при каждой вставке
CСтолбец автоматически индексируется для ускорения поиска
DЭто синоним PRIMARY KEY
3. Что произойдёт, если выполнить CREATE TABLE persons (...), когда таблица persons уже существует в базе данных (в MySQL, без IF NOT EXISTS)?
AТаблица будет пересоздана с новой структурой
BДанные в таблице будут удалены, структура обновится
CMySQL вернёт ошибку
DСоздастся дубль таблицы с другим именем
4. Какой командой в MySQL можно посмотреть структуру (столбцы и их типы) существующей таблицы persons?
ASHOW TABLE persons;
BINFO persons;
CSELECT STRUCTURE FROM persons;
DDESCRIBE persons;