Перед изучением данной темы рекомендуется ознакомиться с темой:
- Microsoft SQL Server Management Studio 2018. Пример создания простейшего запроса
Содержание
- 1. Оператор CREATE TABLE. Создание таблицы. Общая форма
- 2. Примеры создания таблиц
- 2.1. Пример создания простейшей таблицы учета товаров в магазине
- 2.2. Пример создания таблицы учета телефонов абонентов
- 2.3. Пример создания таблицы учета заработной платы и отчислений в организации
- Связанные темы
Поиск на других ресурсах:
1. Оператор CREATE TABLE. Создание таблицы. Общая форма
Таблица является основным элементом любой реляционной базы данных. Вся необходимая информация, которая должна храниться в базе данных, размещается в таблицах. Таблицы могут быть связаны между собой. Количество таблиц в базе данных не ограничено и зависит от сложности решаемой задачи.
Для создания таблицы в языке SQL используется оператор CREATE TABLE. В простейшем случае общая форма оператора CREATE TABLE следующая
CREATE TABLE Table_Name (
Field_Name_1 Type_1,
Field_Name_2 Type_2,
...
Field_Name_N Type_N
)
здесь
- Table_Name – имя таблицы базы данных. Если в базе данных есть таблица с таким именем, то возникнет ошибка;
- Field_Name_1, Field_Name_2, Field_Name_N – имена полей (столбцов) таблицы базы данных. Имя каждого поля должно быть уникальным. В разных таблицах имена полей могут совпадать;
- Type_1, Type_2, Type_N – соответственно типы полей Field_Name_1, Field_Name_2, Field_Name_N такие как INTEGER, DECIMAL, DATE и другие.
На поля Field_Name_1, Field_Name_2, Field_Name_N могут накладываться ограничения. Каждое ограничение указывается после имени поля. В этом случае общая форма оператора CREATE TABLE выглядит примерно следующим образом:
CREATE TABLE Table_Name (
Field_Name_1 Type_1 Attribute_1,
Field_Name_2 Type_2 Attribute_2,
...
Field_Name_N Type_N Attribute_N
)
здесь
- Attribute_1, Attribute_2, Attribute_N – ограничения, накладываемые на поля Field_Name_1, Field_Name_2, Field_Name_N. Ограничения задаются одним из возможных слов: NULL, NOT NULL, UNIQUE, CHECK, PRIMARY KEY, FOREIGN KEY и других.
Рассмотрение существующих полей атрибутов в языке SQL не является предметом изучения данной темы.
⇑
2. Примеры создания таблиц
2.1. Пример создания простейшей таблицы учета товаров в магазине
Условие задачи.
- Используя средства языка SQL создать таблицу с именем Product, которая будет отображать следующую информацию об учете товаров в магазине
Название товара | Стоимость закупки, грн. | Количество, штук | Дата получения | Примечание |
… | … | … | … | … |
- Таблица обязана содержать первичный ключ и обеспечивать уникальность записей.
Решение.
- Для обеспечения уникальности записей в таблице нужно создать дополнительное поле, которое будет являться счетчиком (автоинкрементом). Название поля – ID_Product. Это поле есть первичным ключом. Также это поле имеет ограничение NOT NULL (непустое поле).
- Следующим шагом решения есть назначение имен полям таблицы. В связи с тем, что не все системы управления базами данных (СУБД) поддерживают символы кириллицы, имена полей таблицы будут задаваться латинскими символами. В нашем случае формируются имена и типы данных, сформированные в следующей таблице:
Название поля в условии задачи | Название поля на языке SQL | Тип поля | Объяснение |
ID_Product | ID_Product | INTEGER | Первичный ключ, счетчик, NOT NULL |
Название товара | [Name] | VARCHAR(100) | Строковый тип переменной длины максимум до 100 символов |
Стоимость закупки | Price | DECIMAL(15, 2) | Точность равна 15 знакам, масштаб равен 2 знакам после запятой |
Количество штук | [Count] | INTEGER | Целое число |
Дата получения | [Date] | DATE | |
Примечание | Note | VARCHAR(200) |
- Написание кода на языке SQL с учетом особенностей предыдущих шагов. Текст программы создания таблицы на языке SQL следующий
CREATE TABLE [Product] ( [ID_Product] Integer Not Null Primary Key, [Name] VarChar(100) , [Price] Decimal(15, 2), [Count] Integer, [Date] Date, [Note] VarChar(200) )
В Microsoft SQL Server допускается задавать имена полей без их обрамления в квадратные скобки []. То есть, предыдущая команда может быть переписана следующим образом
CREATE TABLE Product ( ID_Product Integer Not Null Primary Key, Name VarChar(100) , Price Decimal(15, 2), Count Integer, Date Date, Note VarChar(200) )
В приведенном выше коде для поля ID_Product задаются ограничения Not Null и Primary Key. В результате запуска программы на SQL будет создана следующая таблица
ID_Product | Name | Price | Count | Date | Note |
… | … | … | … | … | … |
На рисунке 1 отображаются поля созданной таблицы в Microsoft SQL Server Management Studio.
Рисунок 1. Этапы создания таблицы Product в Microsoft SQL Server Management Studio 18: 1 – создание файла; 2 – набор SQL-запроса; 3 – запуск запроса на выполнение; 4 – результирующая таблица
Конечно, можно создать таблицу, в которой нет поля ID_Product и нету первичного ключа. Такая таблица не будет обеспечивать уникальность записей, поскольку возможна ситуация, когда данные в двух записях могут совпасть. В этом случае SQL код программы имеет вид
CREATE TABLE Product ( Name VarChar(100) , Price Decimal(15, 2), Count Integer, Date Date, Note VarChar(200) )
⇑
2.2. Пример создания таблицы учета телефонов абонентов
Условие задачи.
Используя средства языка SQL (T-SQL) создать таблицу учета телефонов абонентов.
Name | Address | Phone Number 1 | Phone Number 2 | Phone Number 3 |
Ivanov I.I. | New York | 123456 | 067-1234567 | – |
Johnson J. | Kiev | 789012 | 033-7777778 | 102 |
Petrenko P.P. | Warshaw | 044-2521412 | – | – |
… | … | … | … | … |
Обеспечить уникальность и корректное сохранение записей таблицы.
Решение.
Для обеспечения уникальности записей нужно создать дополнительное поле – счетчик. Это поле будет увеличивать свое значение на 1 при каждом добавлении новой записи. Если запись будет удаляться, текущее максимальное значение счетчика не будет уменьшаться. Таким образом, все числовые значения этого поля будут различаться между собой (будут уникальными). В нашем случае добавляется поле ID_Subscriber. Это поле не допускает нулевые значения (NULL).
Для полей Name и [Phone Number 1] целесообразно задать ограничение (атрибут) NOT NULL. Это означает, что в эти поля обязательно нужно ввести значение. Это логично, поскольку абонент в базе данных должен иметь как минимум имя и хотя бы один номер телефона.
После внесенных изменений поля таблицы будут иметь следующие свойства
Название поля | Тип данных | Объяснение |
ID_Subscriber | INTEGER | Первичный ключ, счетчик, NOT NULL |
Name | VARCHAR(50) | Фамилия и имя абонента |
Address | VARCHAR(100) | Адрес |
[Phone Number 1] | VARCHAR(20) | NOT NULL |
[Phone Number 2] | VARCHAR(20) | |
[Phone Number 3] | VARCHAR(20) |
Учитывая вышесказанное, команда CREATE TABLE на языке Transact-SQL (T-SQL) будет выглядеть следующим образом
Create Table Subscriber ( ID_Subscriber Int Not Null Primary Key, [Name] VarChar(50) Not Null, [Address] VarChar(100), [Phone Number 1] VarChar(20) Not Null, [Phone Number 2] VarChar(20), [Phone Number 3] VarChar(20) )
В запросе имена полей
[Phone Number 1] [Phone Number 2] [Phone Number 3]
обязательно должны быть в квадратных скобках [], поскольку имена состоят из нескольких слов (между словами есть символ пробела).
На рисунке 2 показаны этапы создания таблицы в системе Microsoft SQL Server Management Studio.
Рисунок 2. Окно Microsoft SQL Server Management Studio. Этапы формирования запроса: 1 — создание файла «SQL Query 2.sql»; 2 — набор SQL-запроса; 3 — выполнение; 4 — результирующая таблица
⇑
2.3. Пример создания таблицы учета заработной платы и отчислений в организации
Условие задачи
Используя язык SQL сделать таблицу Account, в которой ведется учет начисленной заработной платы в некой организации. Образец таблицы следующий
Name | Position | Accrued salary | Date of employment | Gender |
Johnson J. | Manager | 3200.00 | 01.02.2128 | M |
Petrova M.P. | Clerk | 2857.35 | 02.03.2125 | F |
Williams J. | Secretary | 3525.77 | 01.08.2127 | F |
Wilson K. | Recruiter | 1200.63 | 22.07.2125 | F |
… | … | … | … | … |
Таблицу реализовать так, чтобы обеспечивалась уникальность записей.
Решение.
Чтобы обеспечить уникальность записей, создается дополнительное поле-счетчик ID_Account типа Int. Это поле целесообразно выбрать первичным ключом, если нужно будет использовать данные этой таблицы в других связанных таблицах.
После модификации поля таблицы будут иметь следующие свойства.
Название поля (атрибут) | Тип данных | Дополнительные объяснения |
ID_Account | Int | Автоинкремент (счетчик), первичный ключ (Primary Key), ненулевое поле (Not Null), обеспечивает уникальность записей |
[Name] | VARCHAR(50) | Фамилия и имя, не нулевое поле (Not Null) |
Position | VARCHAR(100) | Должность, не нулевое поле (Not Null) |
Salary | DECIMAL | Тип, предназначенный для сохранения денежных величин |
[Employment Date] | DATE | Дата, не нулевое поле (Not Null) |
Gender | CHAR(1) | Стать, не нулевое поле (Not Null) |
В модифицированной таблице поле Salary допускает нулевые (Null) значения. Таким случаем может быть, например, когда человек принят на работу, но заработная плата ему еще не начислена. В данной ситуации временно устанавливается Null-значение. Все остальные поля обязательны для заполнения.
Запрос на язык SQL, создающий вышеприведенную таблицу имеет вид
/* Create the Account table */ Create Table Account ( ID_Account Int Not Null Primary Key, [Name] VarChar(50) Not Null, [Position] VarChar(100) Not Null, Salary Decimal Null, [Employment Date] Date Not Null, Gender Char(1) )
Результат выполнения SQL-запроса показан на рисунке 3
Рисунок 3. Результат выполнения запроса на языке Transact-SQL (T-SQL)
⇑
Связанные темы
- Microsoft SQL Server Management Studio 18. Пример создания простейшего запроса
- Модификация таблиц. Оператор ALTER TABLE. Примеры
⇑
Умение создать таблицу — важный, даже можно сказать фундаментальный навык в работе с SQL.
В этом руководстве я покажу вам синтаксис инструкции CREATE TABLE на примерах с PostgreSQL и MySQL.
Базовый синтаксис CREATE TABLE
Вот синтаксис инструкции CREATE TABLE (букв. «создать таблицу»):
CREATE TABLE table_name( column1 data_type column_constraint, column2 data_type column_constraint, column3 data_type column_constraint, column4 data_type column_constraint, ... etc );
Начинаем с самой инструкции CREATE TABLE. Сразу за ней идет имя таблицы, которую вы хотите создать.
Предположим, я хочу создать таблицу с информацией о преподавателях. Я могу написать следующий запрос:
CREATE TABLE teachers();
В скобках указывается дополнительная информация о столбцах таблицы. Если вы забудете скобки, то получите сообщение об ошибке:
CREATE TABLE teachers;
Точка с запятой после скобок сообщает о том, что это конец SQL-инструкции.
Движки хранения данных MySQL
Согласно документации MySQL, «Движки хранения данных — это компоненты MySQL, управляющие SQL-операциями для разных типов таблиц».
MySQL использует эти движки для осуществления CRUD-операций (создание, чтение, обновление и удаление данных) в базе данных.
В MySQL можно указать тип движка, который вы хотите использовать для вашей таблицы. Для этого используется предложение ENGINE. Если вы его опустите, будет применен дефолтный движок — InnoDB.
CREATE TABLE table_name( column1 data_type column_constraint, column2 data_type column_constraint, column3 data_type column_constraint, column4 data_type column_constraint, ... etc )ENGINE=storage_engine;
От редакции Techrocks. Возможно, вам также будут интересны следующие статьи:
- Запросы SQL: руководство для начинающих
- Оператор UPDATE в SQL: разбираем на примерах
- Выражение CASE в SQL: объяснение на примерах
- Порядок выполнения SQL-операций
Что такое IF NOT EXISTS?
Вы можете добавить в запрос опциональное предложение IF NOT EXISTS. Оно нужно для проверки, не существует ли уже в базе данных та таблица, которую вы хотите создать. Это предложение можно поместить непосредственно перед именем таблицы.
CREATE TABLE IF NOT EXISTS teachers();
Если такая таблица существует, новая не будет создана.
Если не указать IF NOT EXISTS и попытаться создать заново уже существующую таблицу, получите сообщение об ошибке.
В этом примере я создала таблицу teachers. Попытавшись создать такую же таблицу снова, я получила ошибку.
CREATE TABLE IF NOT EXISTS teachers(); CREATE TABLE teachers();
Как создавать столбцы в таблице
В инструкции CREATE TABLE, в круглых скобках после имени таблицы, перечисляются имена столбцов, которые вы хотите создать, а также их типы данных и ограничения.
В этом примере мы добавим в таблицу teachers четыре столбца: school_id, name, email и age. Имена столбцов разделяются запятыми.
CREATE TABLE teachers( school_id data_type column_constraint, name data_type column_constraint, email data_type column_constraint, age data_type column_constraint );
Согласно документации MySQL, «В MySQL установлено жесткое ограничение в 4096 столбцов на таблицу, но эффективный максимум может быть меньше. Реальный лимит количества столбцов зависит от нескольких факторов».
Впрочем, если вы работаете над маленькими личными проектами, маловероятно, что вам понадобится больше столбцов, чем это разрешено.
Согласно документации PostgreSQL, в этой СУБД установлен лимит в 1600 столбцов на таблицу. Так же, как и в MySQL, максимальное число столбцов может варьироваться в зависимости от количества места на диске или ограничений производительности.
Типы данных в SQL
При создании столбцов таблицы нужно указать их тип данных. Типы данных описывают значения, которые будут храниться в столбцах.
В SQL есть шесть популярных категорий типов данных:
- числа (int, float, serial, decimal)
- дата и время (timestamp, data, time)
- символы и строки (char, varchar, text)
- Unicode (ntext, nvarchar)
- бинарные данные (binary)
- смешанные (xml, table и др.)
Здесь мы не будем разбирать все типы, затронем только самые популярные. Полный список возможных типов данных можно посмотреть в документации: для PostgreSQL и для MySQL.
Что такое SERIAL и AUTO_INCREMENT?
В PostgreSQL тип данных SERIAL — это целое число, которое будет автоматически увеличиваться на единицу при каждом создании новой строки.
Мы можем указать тип данных SERIAL сразу после имени столбца school_id в нашей таблице teachers.
school_id SERIAL
В MySQL вместо SERIAL используется инструкция AUTO_INCREMENT. В примере ниже мы использовали ее с типом данных INT, представляющим целые числа.
school_id INT AUTO_INCREMENT
Если мы добавим в таблицу teachers пять строк и выведем содержимое столбца school_id, будут показаны числа 1, 2, 3, 4, 5. Число автоматически возрастает для каждой новой строки.
Что из себя представляет тип данных VARCHAR?
VARCHAR — это строковые данные переменной длины, где можно установить максимальную длину символов.
Ниже показан пример использования типа данных VARCHAR для столбцов name и email в таблице teachers. Здесь установлена максимальная длина в 30 символов.
name VARCHAR(30) column_constraint, email VARCHAR(30) column_constraint,
Ограничения столбцов
Ограничения — это правила, которые должны соблюдаться относительно данных в столбцах таблицы.
Вот список нескольких самых распространенных ограничений столбцов:
- PRIMARY KEY — если для столбца установлено это ограничение, данные в нем становятся уникальными идентификаторами строк в таблице
- FOREIGN KEY — этот ключ связывает данные в одной таблице с данными в другой
- UNIQUE — все значения в столбце должны быть уникальными
- NOT NULL — значения не могут быть NULL. NULL — это отсутствие значения
- CHECK — проверка значения на соответствие логическому выражению
Примеры PRIMARY и FOREIGN ключей
Давайте добавим ограничение PRIMARY KEY (первичный ключ) для столбца school_id в нашей таблице teachers.
В PostgreSQL код будет выглядеть так:
school_id SERIAL PRIMARY KEY
А в MySQL — так:
school_id INT AUTO_INCREMENT PRIMARY KEY
Первичный ключ может быть составным, т. е. строка может уникально идентифицироваться двумя столбцами. Чтобы установить PRIMARY KEY для нескольких столбцов, эту инструкцию нужно добавить сразу после создания самих столбцов:
CREATE TABLE table_name( column1 data_type column_constraint, column2 data_type column_constraint, column3 data_type column_constraint, column4 data_type column_constraint, ... etc PRIMARY KEY (column1, column2) );
Если вы хотите связать одну таблицу с другой, следует использовать FOREIGN KEY (внешний ключ).
Допустим, у нас есть таблица district_employees с первичным ключом district_id. Вот как будет выглядеть код в PostgreSQL:
CREATE TABLE district_employees( district_id SERIAL PRIMARY KEY, employee_name VARCHAR(30) NOT NULL, PRIMARY KEY(district_id) );
В таблице teachers мы можем установить связь с таблицей district_employees при помощи внешнего ключа:
district_id INT REFERENCES district_employees(district_id),
CREATE TABLE teachers( school_id SERIAL PRIMARY KEY, district_id INT REFERENCES district_employees(district_id), column1 data_type column_constraint, column2 data_type column_constraint, column3 data_type column_constraint, column4 data_type column_constraint, ... etc );
Примеры NOT NULL, CHECK и UNIQUE
Если бы нам нужно было обеспечить отсутствие значений NULL в столбцах, мы могли бы прописать ограничение NOT NULL.
name VARCHAR(30) NOT NULL
При помощи ограничения CHECK можно гарантировать, что все учителя в таблице будут старше 18 лет. CHECK проверяет значение на соответствие логическому выражению.
Если одно из значений не соответствует условию, мы получим сообщение об ошибке.
Ограничение UNIQUE мы можем использовать, чтобы обеспечить уникальность всех электронных адресов.
email VARCHAR(30) UNIQUE
Вот так выглядит наша таблица teachers в итоге:
Полный код в PostgreSQL:
CREATE TABLE teachers( school_id SERIAL PRIMARY KEY, name VARCHAR(30) NOT NULL, email VARCHAR(30) UNIQUE, age INT CHECK(age >= 18) );
И в MySQL:
CREATE TABLE teachers( school_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL, email VARCHAR(30) UNIQUE, age INT CHECK(age >= 18) );
Надеюсь, эта статья была вам полезна!
Перевод статьи «How to Create a Table in SQL – Postgres and MySQL Example Query».
Как создавать таблицы в MySQL (Create Table)
О типах данных, атрибутах, ограничениях и об изменениях в уже созданной таблице.
Введение
В данной статье мы рассмотрим, как правильно создавать таблицы в MySQL. Для этого разберем основные типы данных, атрибуты, ограничения, и что можно исправить в уже созданной таблице. Чтобы сократить последующие изменения, стоит заранее продумать структуру таблицы и ее содержимое. Наиболее важные пункты:
- Названия таблиц и столбцов.
- Типы данных столбцов.
- Атрибуты и ограничения.
Ниже разберем подробнее, как реализовать этот короткий список для MySQL наиболее эффективно.
Синтаксис Create table в MySQL и создание таблиц
Поскольку наш путь в базы данных только начинается, стоит вспомнить основы. Реляционные базы данных хранят данные в таблицах, и каждая таблица содержит набор столбцов. У столбца есть название и тип данных. Команда создания таблицы должна содержать все вышеупомянутое:
CREATE TABLE table_name
(
column_name_1 column_type_1,
column_name_2 column_type_2,
...,
column_name_N column_type_N,
);
table_name — имя таблицы;
column_name — имя столбца;
column_type — тип данных столбца.
Теперь разберем процесс создания таблицы детально.
Названия таблиц и столбцов
Таблицы и столбцы стоит называть осмысленно и прозрачно, чтобы было понятно, как другому разработчику, так и вам самим спустя полгода. Даже если это учебная база только для вашего пользования, рекомендуем сразу привыкать делать правильно.
Имена могут содержать символы подчеркивания для большей наглядности. Классический пример непонятных названий — table1, table2 и т. п. Использование транслита, неясных сокращений и, разумеется, наличие орфографических ошибок тоже не приветствуется. Хороший пример коротких информативных названий: Customers, Users, Orders, так как по названию таблицы должно быть очевидно, какие данные таблица будет содержать. Эта же логика применима и к названию столбцов.
Максимальная длина названия и для таблицы, и для столбцов — 64 символа.
Типы данных столбцов
Для каждого столбца таблицы будет определен тип данных. Неправильное использование типов данных увеличивает как объем занимаемой памяти, так и время выполнения запросов к таблице. Это может быть незаметно на таблицах в несколько строк, но очень существенно, если количество строк будет измеряться десятками и сотнями тысяч, и это далеко не предел для рабочей базы данных. Проведем краткий обзор наиболее часто используемых типов:
Числовые типы
- INT — целочисленные значения от −2147483648 до 2147483647, 4 байта.
- DECIMAL — хранит числа с заданной точностью. Использует два параметра — максимальное количество цифр всего числа (precision) и количество цифр дробной части (scale). Рекомендуемый тип данных для работы с валютами и координатами. Можно использовать синонимы NUMERIC, DEC, FIXED.
- TINYINT — целые числа от −127 до 128, занимает 1 байт хранимой памяти.
- BOOL — 0 или 1. Однозначный ответ на однозначный вопрос — false или true. Название столбцов типа boolean часто начинается с is, has, can, allow. По факту это даже не отдельный тип данных, а псевдоним для типа TINYINT (1). Тип настолько востребован на практике, что для него в MySQL создали встроенные константы FALSE (0) или TRUE (1). Можно использовать синоним BOOLEAN.
- FLOAT — дробные числа с плавающей запятой (точкой).
Символьные
- VARCHAR(N) — N определяет максимально возможную длину строки. Создан для хранения текстовых данных переменной длины, поэтому память хранения зависит от длины строки. Наиболее часто используемый тип строковых данных.
- CHAR(N) — как и с varchar, N указывает максимальную длину строки. Char создан хранить данные строго фиксированной длины, и каждая запись будет занимать ровно столько памяти, сколько требуется для хранения строки длиной N.
- TEXT — подходит для хранения большого объема текста до 65 KB, например, целой статьи.
Дата и время
- DATE — только дата. Диапазон от 1000-01-01 по 9999-12-31. Подходит для хранения дат рождения, исторических дат, начиная с 11 века. Память хранения — 3 байта.
- TIME — только время — часы, минуты, секунды — «hh:mm:ss». Память хранения — 3 байта.
- DATETIME — соединяет оба предыдущих типа — дату и время. Использует 8 байтов памяти.
- TIMESTAMP — хранит дату и время начиная с 1970 года. Подходит для большинства бизнес-задач. Потребляет 4 байта памяти, что в два раза меньше, чем DATETIME, поскольку использует более скромный диапазон дат.
Бинарные
Используются для хранения файлов, фото, документов, аудио и видеоконтента. Все это хранится в бинарном виде.
- BLOB — до 65 КБ бинарных данных
- LARGEBLOB — до 4 ГБ.
Подробный разбор типов данных, включая более специализированные типы, например, ENUM, SET или BIGINT UNSIGNED, будет в отдельной тематической статье.
Практика с примерами
Для лучшего понимания приведем пример, создав простую таблицу для хранения данных сотрудников, где
- id — уникальный номер,
- name — ФИО,
- position — должность
- birthday — дата рождения
Синтаксис create table с основными параметрами:
CREATE TABLE Staff
(
id INT,
name VARCHAR(255) NOT NULL,
position VARCHAR(30),
birthday Date
);
Тут могут появиться вопросы. Откуда MySQL знает, что номер уникален? Если еще нет должности для этого сотрудника, что будет, если оставить поле пустым?
Все это (как и многое другое) придtтся указать с помощью дополнительных параметров — атрибутов.
Часто таблицы создаются и заполняются скриптами. Если мы вызовем команду CREATE TABLE Staff, а таблица Staff уже есть в базе, команда выдаст ошибку. Поэтому перед созданием разумно проверить, содержит ли уже база таблицу Staff. Достаточно добавить IF NOT EXISTS, чтобы выполнить эту проверку в MySQL, то есть вместо
CREATE TABLE Staff
напишем
CREATE TABLE IF NOT EXISTS Staff
Повторный запуск команды выведет предупреждение:
1050 Table 'Staff' already exists
Если таблица уже создана и нужно создать таблицу с тем же именем с «чистого листа», старую таблицу можно удалить командой:
DROP TABLE table_name;
Атрибуты (ATTRIBUTES) и ограничения (CONSTRAINTS)
PRIMARY KEY
Предназначение индексов — обеспечить быстрый доступ к табличным данным. Основная идея — существенное ускорение поиска. Создание первичного ключа, внешних ключей, определение уникальных значений в столбце — во всех этих случаях будут созданы индексы. Существуют определенные ограничения на построения индексов в зависимости от типов данных, но разбор этих нюансов будет в других статьях.
Пользы индексов на примерах: для поиска уникального значения среди 10000 строк придется проверить, в худшем случае, все 10000 без индекса, с индексом — всего 14. Поиск по миллиону записей займет не больше в 20 проверок — это реализация идеи бинарного поиска.
Создадим таблицу Staff с номером сотрудника в качестве первичного ключа. Первичный ключ гарантирует нам, что номер точно будет уникальным, а поиск по нему — быстрым.
CREATE TABLE Staff (
id INT PRIMARY KEY,
name VARCHAR(255),
position VARCHAR(30),
birthday Date,
has_children BOOLEAN
);
NOT NULL
При заполнении таблицы мы утверждаем, что значение этого столбца должно быть установлено. Если нет явного указания NOT NULL, и этот столбец не PRIMARY KEY, то столбец позволяет хранить NULL, то есть хранение NULL — поведение по умолчанию. Для первичного ключа это ограничение можно не указывать, так как первичный ключ всегда гарантирует NOT NULL.
Изменим команду CREATE TABLE, добавив NOT NULL ограничения: таким образом, мы обозначим обязательные для заполнения столбцы (т.е. столбцы, поля в которых не могут оставаться пустыми при наличии записи в таблице):
CREATE TABLE Staff (
id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
position VARCHAR(30),
birthday DATE NOT NULL,
has_children BOOLEAN NOT NULL
);
DEFAULT
Можно указать значение по умолчанию, т.е. текст или число, которые будут сохранены, если не указано другое значение. Применяется не ко всем типам: BLOB, TEXT, GEOMETRY и JSON не поддерживают это ограничение.
Эта величина должна быть константой, функция или выражение не допустимы.
Продолжим изменять команду, установив ограничение DEFAULT для поля BOOLEAN.
CREATE TABLE Staff (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
position VARCHAR(30),
birthday DATE NOT NULL,
has_children BOOLEAN DEFAULT(FALSE) NOT NULL
);
Для типа данных BOOLEAN можно использовать встроенные константы FALSE и TRUE. Вместо DEFAULT(FALSE) можно указать DEFAULT(0) — эти записи эквивалентны.
AUTO_INCREMENT
Каждый раз, когда в таблицу будет добавлена запись, значение этого столбца автоматически увеличится. На всю таблицу этот атрибут применим только к одному столбцу, причем этот столбец должен быть ключом. Рекомендуется использовать для целочисленных значений. Нельзя сочетать с DEFAULT.
CREATE TABLE Staff (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
position VARCHAR(30),
birthday DATE NOT NULL,
has_children BOOLEAN DEFAULT(FALSE) NOT NULL
);
Теперь номер сотрудника будет автоматически последовательно увеличиваться при каждой новой записи в таблицу.
Интересно, что при CREATE TABLE MySQL не позволяет установить стартовое значение для AUTO_INCREMENT. Можно назначить стартовое значение для счетчика AUTO_INCREMENT уже созданной таблицы.
Синтаксис:
ALTER TABLE Staff AUTO_INCREMENT=10001;
Первая запись после такой модификации получит id = 10001.
UNIQUE
Это ограничение устанавливает, что все значения данного столбца будут уникальны в пределах таблицы, и создает индекс. Можно применять к столбцам с поддержкой NULL, но так как NULL будет считаться уникальным значением, возможна только одна NULL-запись.
CREATE TABLE Staff (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
position VARCHAR(30),
birthday DATE NOT NULL,
has_child BOOLEAN DEFAULT(0) NOT NULL,
phone VARCHAR(20) UNIQUE NOT NULL
);
CHECK
Позволяет установить дополнительную проверку данных для столбца или набора столбцов. Это тоже CONSTRAINT, так как накладывает ограничение.
На примере ограничим дату рождения сотрудника.
Синтаксис позволяет устанавливать CHECK как в описании столбца при CREATE TABLE:
birthday DATE NOT NULL CHECK (birthday > ‘1900-01-01’),
так отдельно от описания столбцов:
CHECK (birthday > ‘1900-01-01’),
В этих случаях название проверки будет определено автоматически. При вставке данных, не прошедших проверку, будет сообщение об ошибке Check constraint ‘staff_chk_1’ is violated. Ситуация усложняется, когда установлено несколько CHECK, поэтому рекомендуется давать понятное имя.
Воспользуемся полной командой для создания CHECK и определим не только ограничение даты рождения, но и допустимые форматы телефона через регулярное выражение.
CREATE TABLE Staff (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
position VARCHAR(30),
birthday DATE NOT NULL,
has_child BOOLEAN DEFAULT(0) NOT NULL,
phone VARCHAR(20) UNIQUE NOT NULL,
CONSTRAINT staff_chk_birthday CHECK (birthday > '1900-01-01'),
CONSTRAINT staff_chk_phone CHECK (phone REGEXP '[+]?[0-9]{1,3} ?\(?[0-9]{3}\)? ?[0-9]{2}[0-9 -]+[0-9]{2}')
);
Для добавления ограничений используем оператор CONSTRAINT, при этом, все названия уникальны, как и имена таблиц. Учитывая, что по умолчанию названия включают в себя и имя таблицы, рекомендуем придерживаться этого правила. Если используется CONSTRAINT, мы обязаны дать имя ограничению, которое вводим.
FOREIGN KEY или внешний ключ
Внешний ключ — это ссылка на столбец или группу столбцов другой таблицы. Это тоже ограничение (CONSTRAINT), так как мы сможем использовать только значения, для которых есть соответствие по внешнему ключу. Создает индекс. Таблицу с внешним ключом называют зависимой.
Синтаксис:
FOREIGN KEY (column_name1, column_name2)
REFERENCES external_table_name(external_column_name1, external_column_name2)
Сначала указывается выражение FOREIGN KEY и набор столбцов таблицы, откуда строим FOREIGN KEY. Затем ключевое слово REFERENCES указывает на имя внешней таблицы и набор столбцов этой внешней таблицы. В конце можно добавить операторы ON DELETE и ON UPDATE, с помощью которых настраивается поведение при удалении или обновлении данных в главной таблице. Это делать не обязательно, так как предусмотрено поведение по умолчанию. Поведение по умолчанию запрещает удалять или изменять записи из внешней таблицы, если на эти записи есть ссылки по внешнему ключу.
Возможные опции для ON DELETE и ON UPDATE:
CASCADE: автоматическое удаление/изменение строк зависимой таблицы при удалении/изменении связанных строк главной таблицы.
SET NULL: при удалении/изменении связанных строк главной таблицы будет установлено значение NULL в строках зависимой таблицы. Столбец зависимой таблицы должен поддерживать установку NULL, т.е. параметр NOT NULL в этом случае устанавливать нельзя.
RESTRICT: не даёт удалить/изменить строку главной таблицы при наличии связанных строк в зависимой таблице. Если не указана иная опция, по умолчанию будет использовано NO ACTION, что, по сути, то же самое, что и RESTRICT.
Рассмотрим пример:
Для таблицы Staff было определено текстовое поле position для хранения должности.
Так как список сотрудников в компании обычно больше, чем список занимаемых должностей, есть смысл создать справочник должностей.
CREATE TABLE Positions (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL
);
Поскольку из Staff мы будем ссылаться на Positions, таблица персонала Staff будет зависимой от Positions. Изменим синтаксис CREATE TABLE для таблицы Staff, чтобы должность была ссылкой на запись в таблице Positions.
CREATE TABLE Staff (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
position_id int,
birthday DATE NOT NULL,
has_child BOOLEAN DEFAULT(0) NOT NULL,
phone VARCHAR(20) UNIQUE NOT NULL,
FOREIGN KEY (position_id) REFERENCES Positions (id)
);
При CREATE TABLE, чтобы не усложнять описание столбца, рекомендуется указывать внешний ключ и все его атрибуты после перечисления создаваемых столбцов.
Можно ли добавить внешний ключ, если таблица уже создана и в ней есть данные? Можно! Для внесения изменений в таблицу используем ALTER TABLE.
Синтаксис:
ALTER TABLE Staff
ADD FOREIGN KEY (position_id) REFERENCES Positions(id);
Или в развернутой форме, определяя имя ключа fk_position_id явным образом:
ALTER TABLE Staff
ADD CONSTRAINT fk_position_id FOREIGN KEY (position_id) REFERENCES Positions(id);
Главное условие в этом случае — согласованность данных. Это значит, что для всех записей внешнего ключа position_id должно найтись соответствие в целевой таблице Positions по столбцу id.
Создание таблиц на основе уже существующих, временные таблицы
Мы рассмотрели создание таблицы с «чистого листа», но есть два других способа:
- LIKE
- SELECT
LIKE
Создание таблицы на основе уже существующей таблицы. Копирует структуру — количество, названия и типы столбцов, индексы, все ограничения, кроме внешних ключей. Как мы помним, внешний ключ создает индекс. При создании через LIKE индексы в новой таблице будут построены также, как и в старой, но внешние ключи не скопируются. Таблица будет создана без записей и без счетчиков AUTO_INCREMENT.
Синтаксис:
CREATE TABLE new_table LIKE source_table;
SELECT
Можно создать таблицу на основе SELECT-запроса — результат этой выборки будет записан в новую таблицу. Такая таблица не будет иметь индексов, ограничений и ключей. Все столбцы, с учетом порядка, типов данных и названий, будут взяты из запроса — поля из SELECT станут столбцами новой таблицы. При этом можно переопределить изначальные названия полей, что особенно актуально, когда в выборку попадают столбцы с одинаковыми названиями (на уровне таблицы названия столбцов всегда уникальны).
Синтаксис:
CREATE TABLE new_table [AS] SELECT * FROM source_table;
Разберем пример создания новой таблицы через SELECT, используя две таблицы в выборке — Staff и Positions. В запросе определим три поля: id, staff, position — это будут столбцы новой таблицы StaffData211015 (срез сотрудников на определённую дату). Без присвоения псевдонимов (name as staff, name as position) в выборке получилось бы два одинаковых поля name, что не позволило бы создать таблицу из-за duplicate column name ошибки.
CREATE TABLE StaffData211015
SELECT s.Id,
s.name as staff,
p.name as position
FROM Staff s
JOIN Positions p ON s.position_id = p.id
TEMPORARY
При подготовке отчетов или обработке данных на стороне базы, нередко может потребоваться сохранять промежуточные результаты в отдельные таблицы.
После завершения всех вычислений внутри скрипта эти вспомогательные таблицы нам будут уже не нужны. В таких ситуациях удобно использовать временные таблицы, которые будут существовать до завершения работы скрипта.
Чтобы обозначить таблицу как временную, нужно добавить TEMPORARY в CREATE TABLE:
CREATE TEMPORARY TABLE table_name;
Работа с уже созданной таблицей
Когда таблица создана, работа с ней только начинается. Операторы и команды для работы с данными рассмотрены в другой статье, а сейчас посмотрим, что же можно исправить, если потребовалось внести изменения.
Переименование
Ключевая команда — RENAME.
- Изменить имя таблицы:
RENAME TABLE old_table_name TO new_table_name;
- Изменить название столбца:
ALTER TABLE table_name
RENAME COLUMN old_column_name TO new_column_name;
Удаление данных
- DELETE FROM Staff; — удалит все записи из таблицы. Условие в WHERE позволит удалить только определенные строки, в примере ниже удалим только одну строку с id = 1. DELETE FROM Staff WHERE id = 1;
- TRUNCATE TABLE Staff; — используется для полной очистки всей таблицы. При TRUNCATE счетчики AUTO_INCREMENT сбросятся. Если бы мы удалили все в строки командой DELETE, то новые строки учитывали бы накопленный за время жизни таблицы AUTO_INCREMENT.
- DROP TABLE Staff; — команда удаления таблицы.
Изменение структуры таблицы
Команда ALTER TABLE включает в себя множество опций, рассмотрим основные вместе с примерами на таблице Staff.
Добавление столбцов
Добавим три столбца: электронную почту, возраст и наличие автомобиля. Так как в таблице уже есть записи, мы не можем пока что отметить эти поля как NOT NULL, по умолчанию они будут позволять хранить NULL.
ALTER TABLE Staff
ADD email VARCHAR(50),
ADD age INT,
ADD has_auto BOOLEAN;
Удаление столбцов
Удалим столбец с возрастом, так как сейчас возраст сотрудников в базе всегда статичен, а должен быть вычисляемым полем в зависимости от текущей даты.
ALTER TABLE Staff
DROP COLUMN age;
Значение по умолчанию
Выставим значение по умолчанию для столбца has_auto:
ALTER TABLE Staff
ALTER COLUMN has_auto SET DEFAULT(FALSE);
Изменение типа данных столбца
Для столбца name изменим тип данных:
ALTER TABLE Staff
MODIFY COLUMN name VARCHAR(500) NOT NULL;
Максимальная длина поля была увеличена. Если не указать NOT NULL явно, то поле станет NULL по умолчанию.
Установка CHECK
Добавим ограничение формата для email через регулярное выражение:
ALTER TABLE Staff
ADD CONSTRAINT staff_chk_email CHECK (email REGEXP '^[^@]+@[^@]+\.[^@]{2,}$');
Заключение
Любой путь начинается с первых шагов. В работе с базами данных этими шагами является создание структуры таблиц. Продуманная композиция сущностей (таблиц) и связей между ними — основа проектирования любого вашего приложения от интернет-магазинов до мощных систем управления предприятиями.
И уже через пару минут сможете арендовать сервер, развернуть базы данных или обеспечить быструю доставку контента.
Содержание
- 1 Создание таблицы
- 2 Синтаксис
- 3 Типы данных в MySQL
- 4 Создание таблицы базы данных
- 5 Значения NULL и NOT NULL
- 6 Первичные ключи
- 7 AUTO_INCREMENT
- 8 Определение значений по умолчанию при создании таблицы
- 9 Типы движков баз данных MySQL
- 10 Пишем SQL запрос для создания таблицы базы данных
- 11 Сначала проверьте разрешения!
- 12 С помощью конструктора таблиц
- 13 С помощью редактора запросов
- 14 Предусловия
- 15 Исходные данные
- 16 Создание table в Management Studio
- 17 Инструкция CREATE TABLE
- 18 Числовые типы данных в MySQL
- 19 Строковые типы данных в MySQL
- 20 Комплексные типы данных в MySQL
- 21 Временные типы данных в MySQL
Создание таблицы
В предыдущем уроке мы узнали, как создать базу данных на сервере базы данных MySQL. Теперь пришло время создать в нашей базе данных несколько таблиц, которые будут содержать данные. Таблица базы данных просто организует информацию в строки и столбцы.
Для создания таблицы используется оператор CREATE TABLE.
Синтаксис
Основной синтаксис для создания таблицы может быть дан с помощью:
CREATE TABLE table_name ( column1_name data_type constraints, column2_name data_type constraints, …. );
Чтобы понять этот синтаксис, давайте создадим таблицу в нашей демонстрационной базе данных demo. Введите следующую инструкцию в инструменте командной строки MySQL и нажмите enter:
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 ); блок 1
Приведенный выше пример создает таблицу с четырьмя столбцами id, name, birth_date и phone. Обратите внимание, что за каждым именем столбца следует объявление типа данных; в этом объявлении указывается, какой тип данных будет хранить столбец: целое число, строка, дата и т.д.
Некоторые типы данных могут быть объявлены с параметром длины, который указывает, сколько символов можно сохранить в столбце. Например, VARCHAR(50) может содержать до 50 символов.
Типы данных в MySQL
В следующей таблице приведены наиболее часто используемые типы данных, поддерживаемые MySQL.
INT | Хранит числовые значения в диапазоне от -2147483648 до 2147483647. |
DECIMAL | Хранит десятичные значения. |
CHAR | Хранит строки фиксированной длины с максимальным размером 255 символов. |
VARCHAR | Хранит строки переменной длины с максимальным размером 65 535 символов. |
TEXT | Хранит строки с максимальным размером 65 535 символов. |
DATE | Сохраняет значения даты в формате ГГГГ-ММ-ДД. |
DATETIME | Сохраняет объединенные значения даты/времени в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС. |
TIMESTAMP | Хранит значения меток времени. Значения TIMESTAMP хранятся в виде количества секунд с начала эпохи Unix (1970-01-01 00:00:01 UTC). |
Существует несколько дополнительных ограничений (также называемых модификаторами), которые установлены для столбцов таблицы в предыдущем выражении. Ограничения определяют правила, касающиеся значений, разрешенных в столбцах.
- Ограничение NOT NULL гарантирует, что поле не может принять значение NULL.
- Ограничение PRIMARY KEY помечает соответствующее поле как первичный ключ таблицы.
- Атрибут AUTO_INCREMENT является расширением MySQL для стандартного SQL, который сообщает MySQL, что нужно автоматически присваивать значение этому полю, если оно не указано, путем увеличения предыдущего значения на 1. Доступно только для числовых полей.
- Ограничение UNIQUE гарантирует, что каждая строка для столбца должна иметь уникальное значение.
Создание таблицы базы данных
Есть оператор sql, который используется для создания таблиц баз данных. Оператор: CREATE TABLE.
Вспоминаем, что реляционная таблица базы данных должна иметь уникальные:
- Уникальное имя;
- Столбцы (атрибуты);
- Первичный ключ.
- Строки (записи);
Для начала, мы создаем, только таблицу и не заполняем её данными.
По-хорошему, общий вид таблицы с уникальными именами строк и столбцов задается при создании концептуальной модели БД. Мы для примера создадим простенькую таблицу БД и обойдемся без концептуальной модели.
В этой статье создадим таблицу БД с покупателями. Покупатели взяты для примера.
Чем идентифицируется покупатель? Решаем, что каждый покупатель идентифицируется следующими данными:
- Имя;
- Фамилия;
- Логин;
- Пароль;
- Email;
- телефон.
Помним, что в таблице обязательно нужно задать первичный ключ.
Чтобы создать таблицу базы данных, используем оператор sql CREATE TABLE.
Синтаксис оператора такой:
CREATE TABLE имя таблицы (столбец 1, тип столбца (пробел) параметр столбца (пробел), столбец 2, тип столбца (пробел) параметр столбца (пробел), столбец 3, тип столбца (пробел) параметр столбца (пробел), и т.д.)
В нашем варианте, имя таблицы: clients. Даем данным покупателей обозначения столбцов:
- Имя: пусть будет client_customer;
- Фамилия: client_subclient;
- Логин: client_login;
- Пароль: client_password;
- eMail: client_mail;
- Телефон: client_telefon.
Думаем, какой тип данных будет храниться в этих столбцах, и выбираем типы данных CHAR(длина поля постоянно) или VARCHAR(длинна поля переменное). В нашем случае подходит тип данных VARCHAR.
Особое внимание уделяем первичному ключу. Делаем первичным ключом id покупателя. В параметрах ключа задаем, что это первичный ключ, он не может быть нулём и что для следующей записи увеличивается на единицу. Последнее свойство называется автоинкремент. Смотрим подсказку в справочнике (ссылка выше) и получаем столбец с первичным ключом:
client_id integer not null auto_increment primary key
Значения NULL и NOT NULL
Если для столбца указано значение NULL, тогда пустые строки будут добавляться в таблицу. И наоборот, если столбец определяется как NOT NULL, тогда пустые строки не будут добавлены.
Первичные ключи
Первичный ключ — это столбец, используемый для идентификации записей в таблице. Значение столбца первичного ключа должно быть уникальным. Если несколько столбцов объединены в первичный ключ, то комбинация значений ключей должна быть уникальной для каждой строки.
Первичный ключ определяется с помощью оператора PRIMARY KEY во время создания таблицы. Если используется несколько столбцов, они разделяются запятой:
PRIMARY KEY (имя_столбца, имя_столбца … )
В следующем примере создается таблица с использованием двух столбцов в качестве первичного ключа:
CREATE TABLE product ( prod_code INT NOT NULL AUTO_INCREMENT, prod_name char(30) NOT NULL, prod_desc char(60) NULL, PRIMARY KEY (prod_code, prod_name) ) ENGINE=InnoDB; Руководство по разработке структуры и проектированию базы данных
AUTO_INCREMENT
Когда столбец определяется с помощью AUTO_INCREMENT, его значение автоматически увеличивается каждый раз, когда в таблицу добавляется новая запись. Это удобно при использовании столбца в качестве первичного ключа. Благодаря AUTO_INCREMENTне нужно писать инструкции SQL для вычисления уникального идентификатора для каждой строки.
AUTO_INCREMENT может быть присвоен только одному столбцу в таблице. И он должен быть проиндексирован (например, объявлен в качестве первичного ключа).
Значение AUTO_INCREMENT для столбца можно переопределить, указав новое при выполнении инструкции INSERT.
Можно запросить у MySQL самое последнее значение AUTO_INCREMENT, используя функцию last_insert_id() следующим образом:
SELECT last_insert_value();
Определение значений по умолчанию при создании таблицы
Значения по умолчанию используются, когда значение не определено при вставке в базу данных.
Значения по умолчанию задаются с помощью ключевого слова DEFAULT в операторе CREATE TABLE. Например, приведенный ниже запрос SQL задает значение по умолчанию для столбца sales_quantity:
CREATE TABLE sales { sales_number int NOT_NULL, sales_quantity int NOT_NULL DEFAULT 1, sales_desc char(20) NOT_NULL, PRIMARY KEY (sales_number) ) ENGINE=MyISAM; Лабораторная работа: MySQL
Типы движков баз данных MySQL
Каждый из примеров создания таблицы в этой статье до этого момента включал в себя определение ENGINE= . MySQL поставляется с несколькими различными движками баз данных, каждый из которых имеет свои преимущества. Используя директиву ENGINE =, можно выбрать, какой движок использовать для каждой таблицы. В настоящее время доступны следующие движки баз данных MySQL:
- InnoDB — был представлен вMySQL версии 4.0 и классифицирован как безопасная среда для транзакций.Ее механизм гарантирует, что все транзакции будут завершены на 100%. При этом частично завершенные транзакции (например, в результате отказа сервера или сбоя питания) не будут записаны. Недостатком InnoDB является отсутствие поддержки полнотекстового поиска.
- MyISAM — высокопроизводительный движок с поддержкой полнотекстового поиска. Эта производительность и функциональность обеспечивается за счет отсутствия безопасности транзакций.
- MEMORY— с точки зрения функционала эквивалентен MyISAM, за исключением того, что все данные хранятся в оперативной памяти, а не на жестком диске. Это обеспечивает высокую скорость обработки. Временный характер данных, сохраняемых в оперативной памяти, делает движок MEMORY более подходящим для временного хранения таблиц.
Движки различных типов могут сочетаться в одной базе данных. Например, некоторые таблицы могут использовать движок InnoDB, а другие — MyISAM. Если во время создания таблицы движок не указывается, то по умолчанию MySQL будет использовать MyISAM.
Чтобы указать тип движка, который будет использоваться для таблицы, о поместите соответствующее определение ENGINE= после определения столбцов таблицы:
CREATE TABLE tmp_orders { tmp_number int NOT_NULL, tmp_quantity int NOT_NULL, tmp_desc char(20) NOT_NULL, PRIMARY KEY (tmp_number) ) ENGINE=MEMORY;
Пожалуйста, опубликуйте ваши комментарии по текущей теме статьи. За комментарии, отклики, лайки, дизлайки, подписки низкий вам поклон!
Данная публикация является переводом статьи «Creating Databases and Tables Using SQL Commands» , подготовленная редакцией проекта.
Суммируем все исходные данные и получаем такой SQL запрос:
/*Таблица пользователей clients*/ create table clients ( /*client_id будет первичный ключ (обязательно целое число) с автоинкрементом (+1), который никогда не будет равен нулю*/ client_id integer not null auto_increment primary key, client_customer varchar(13), /*имя */ client_surclient varchar(22), /*фамилия */ client_login varchar(21), /*логин*/ client_passwd varchar(7), /*пароль*/ client_email varchar(44) /*email*/ client_telefon varchar(26) /*телефон*/ );
Примечание: SQL запрос для создания таблицы создаем в текстовом редакторе типа Notepad++. В скобках ограничиваем длину поля, может быть от 1 до 255.
Сначала проверьте разрешения!
Эта задача требует разрешения CREATE TABLE в базе данных и разрешения ALTER на схему, в которой создается таблица.
Если какие-либо столбцы в инструкции CREATE TABLE определены как принадлежащие к определяемому пользователем типу данных CLR, необходимо быть владельцем данного типа либо иметь разрешение REFERENCES на него.
Если какие-либо столбцы в инструкции CREATE TABLE имеют связанную коллекцию схем XML, необходимо быть владельцем этого набора схем или иметь разрешение REFERENCES на него.
С помощью конструктора таблиц
-
В SSMS в обозревателе объектов подключитесь к экземпляру Компонент Database Engine , который содержит изменяемую базу данных.
-
В обозревателе объектов разверните узел Базы данных , а затем базу данных, в которой будет размещена новая таблица.
-
В обозревателе объектов щелкните правой кнопкой мыши узел Таблицы базы данных и выберите Создать таблицу.
-
Введите имена столбцов, выберите типы данных и определите для каждого столбца, могут ли в нем присутствовать значения NULL.
-
Вы также можете задать другие свойства столбца, например является ли этот столбец столбцом идентификаторов или вычисляемым столбцом. Для этого щелкните столбец на вкладке свойств столбцов. Дополнительные сведения о свойствах столбцов см. в разделе Свойства столбца таблицы (среда SQL Server Management Studio).
-
Чтобы указать, что столбец является столбцом первичного ключа, щелкните его правой кнопкой мыши и выберите Задать первичный ключ. Дополнительные сведения см. в статье Create Primary Keys.
-
Чтобы создать связи по внешнему ключу, проверочные ограничения или индексы, щелкните правой кнопкой мыши панель конструктора таблиц и выберите в списке объект, как показано на следующей иллюстрации:
Дополнительные сведения об этих объектах см. в разделах Create Foreign Key Relationships, Create Check Constraints и Indexes.
-
По умолчанию таблица содержится в схеме dbo . Чтобы указать другую схему для таблицы, щелкните правой кнопкой мыши панель конструктора таблиц и выберите Свойства , как показано на следующей иллюстрации. Выберите нужную схему из раскрывающегося списка Схема .
Дополнительные сведения о схемах см. в разделе Create a Database Schema.
-
В меню Файл выберите команду Сохранитьимя_таблицы.
-
В диалоговом окне Выбор имени введите имя таблицы и нажмите кнопку OK.
-
Чтобы просмотреть новую таблицу, в обозревателе объектов разверните узел Таблицы , а затем нажмите клавишу F5 , чтобы обновить список объектов. Новая таблица будет отображена в списке таблиц.
С помощью редактора запросов
-
В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine.
-
На стандартной панели выберите пункт Создать запрос.
-
Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.
CREATE TABLE dbo.PurchaseOrderDetail ( PurchaseOrderID int NOT NULL ,LineNumber smallint NOT NULL ,ProductID int NULL ,UnitPrice money NULL ,OrderQty smallint NULL ,ReceivedQty float NULL ,RejectedQty float NULL ,DueDate datetime NULL );
Дополнительные сведения см. в разделе CREATE TABLE (Transact-SQL).
Предусловия
Перед началом работы у вас должен быть установлен как сам MS SQL Server, так и SSMS. Версию сервера следует выбирать, исходя из технических характеристик своего компьютера и установленной операционной системы. В статье используется MS SQL Server 2017 Express.
Также таблицы (tables) не могут существовать без базы данных. Поэтому, прежде чем приступить к созданию таблиц, следует создать пустую БД. Это делается очень просто – достаточно запустить среду SSMS и выполнить несколько простых действий: 1) кликаем правой кнопкой мыши по контейнеру «Базы данных» и выбираем «Создать базу данных»; 2) в появившемся поле прописываем имя БД; 3) нажимаем «ОК».
Исходные данные
База создана, поэтому можно подумать о её структуре. Планируется создание двух таблиц: 1. Goods – table с информацией о товарах. Будет содержать несколько столбцов: — ProductId. Представляет собой идентификатор товара. Значение не должно быть NULL. Также здесь будет первичный ключ; — Category. Это ссылка на категорию товара. Не NULL. Если товар не распределён в нужную категорию, ему присваивается категория по умолчанию («Не указана», «Не определена»); — ProductName. В этом столбце будет наименование товара. Не NULL; — Price. Речь идёт о стоимости. Если цена ещё не определена, возможен NULL. 2. Categories — вторая table. В ней будет описание категорий реализуемых товаров, представленное двумя столбцами: — CategoryId. Представляет собой идентификатор категории. Не NULL, первичный ключ; — CategoryName. Название категории, не NULL.
Для того чтобы нельзя было внести товар с несуществующей категорией, будет добавлено ограничение внешнего ключа.
Создание table в Management Studio
Когда структура ясна, можно приступать к созданию: 1) откройте контейнер «Базы данных»; 2) откройте только что созданную тестовую БД; 3) щёлкните правой кнопкой мыши по категории «Таблицы» и выберите пункт «Таблица».
В результате будет открыт специальный конструктор таблиц с тремя колонками: • имя столбца; • тип данных (подробнее о типах данных читайте здесь); • значения NULL (если да – ставим галочку).
Колонки заполняются с учётом спроектированной ранее структуры для table Categories.
Далее определяем первичный ключ (primary key), щелкая по требуемому столбцу правой кнопкой мыши (у нас это CategoryId). Также выбираем пункт «Задать первичный ключ».
Теперь надо обеспечить, чтобы в столбце автоматически генерировался уникальный ID-записи. Для этого идентификатору надо задать свойство IDENTITY. Делается путём включения пункта «Спецификация идентификатора».
Теперь пользователь может сохранить table (правая кнопка мыши -> «Сохранить» либо известное сочетание «Ctrl+S»). Останется ввести название таблицы и нажать «OK».
На очереди таблица Goods. Здесь осуществляются те же действия с той лишь разницей, что для столбца Category дополнительно задаётся дефолтное значение и создаётся ограничение внешнего ключа. Для этого в свойствах соответствующего столбца в значении по умолчанию пишем 1.
А для создания FOREIGN KEY щёлкните правой кнопкой мыши в любой области конструктора и выберите пункт «Отношения…».
Далее жмём кнопку «Добавить».
Теперь зададим спецификацию таблиц и столбцов:
В открывшемся окне указываем: • таблицу первичного ключа – Categories; • таблицу внешнего ключа – это текущая таблица, которая пока не создана, поэтому отображается в качестве Table_1. Тут следует выбирать столбец Category из текущей таблицы — именно он и станет выполнять роль внешнего ключа (сопоставление будет CategoryId = Category); • имя связи — название ограничения. Можно написать FK_Category.
Останется определить правила обновления и удаления. Правило обновления оставляем как есть (изменять идентификатор — не лучшая идея). А чтобы при удалении категории всем товарам присваивалось дефолтное значение, определим правило удаления как «Присвоить значение по умолчанию».
Останется сохранить созданную (created) таблицу, назвав её Goods. Может появиться предупреждающее сообщение — оно не должно вас смутить.
Созданные таблицы станут видны в обозревателе объектов.
Теперь с ними можно работать и добавлять данные, используя инструкцию INSERT.
Инструкция CREATE TABLE
Создать новую таблицу можно и с помощью инструкции CREATE TABLE. CREATE TABLE является ключевым словом, которое сообщает СУБД, что именно вы хотите выполнить. Синтаксис создания в языке (language) SQL следующий:
Как видите, после оператора CREATE TABLE надо указать имя либо идентификатор таблицы, потом список столбцов и тип данных для каждого столбца, а также первичный ключ.
Для примера создадим table CUSTOMERS. В качестве первичного ключа укажем столбец ID. Также установим ограничения для полей, которые не могут иметь нулевое значение при создании записей (NOT NULL):
Увидеть структуру созданной table можно, если сделать соответствующий запрос (query) командой DESC:
Числовые типы данных в MySQL
Тип данныхРазмерОпределение
INT(Size) | 4 байта |
Целое число от -2,147,483,648 до 2,147,483,647 |
INT UNSIGNED(Size) | 4 байта | Целое число от 0 до 4,294,967,295 |
INTEGER(Size) | 4 байта | Синоним для INT |
TINYINT(Size) | 1 байт | Целое число от -128 до 127 |
TINYINT UNSIGNED(Size) | 1 байт | Целое число от 0 до 256 |
SMALLINT(Size) | 2 байта | Целое число от -32,768 до 32,767 |
SMALLINT UNSIGNED(Size) | 2 байта | Целое число от 0 до 465,535 |
MEDIUMINT(Size) | 3 байта | Целое число от -8,388,608 до 8,388,607 |
MEDIUMINT UNSIGNED(Size) | 3 байта | Целое число от 0 до 16777215 |
BIGINT(Size) | 8 байт | Целое число от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 |
BIGINT UNSIGNED(Size) | 8 байт | Целое число от 0 до 18,446,744,073,709,551,615 |
FLOAT(M,D) | 4 байта |
Десятичное число от -3.402823466E+38 до -1.175494351E-38, 0 и от 1.175494351E-38 до 3.402823466E+38, где M — количество выводимых цифр в числе (<=25), D — количество цифр после точки. М и D — не обязательны. По умолчанию M=10, D=2. Пример: для FLOAT(5,2) промежуток допустимых значений будет от-999.99 до 999,99. |
FLOAT(M,D) UNSIGNED | 4 байта | Тоже что и FLOAT только без отрицательных значений |
DOUBLE(M,D) | 8 байт |
Десятичное число от -1.7976931348623157E+308 до -2.2250738585072014E-308, 0, и от 2.2250738585072014E-308 до 1.7976931348623157E+308, где M — количество выводимых цифр в числе (25 <= M <= 53), D — количество цифр после точки. М и D — не обязательны. По умолчанию M=16, D=4. Пример: для DOUBLE(5,2) промежуток допустимых значений будет от-999.99 до 999,99. |
DOUBLE(M,D) UNSIGNED | 8 байт | Тоже что и DOUBLE, только не допускает отрицательные значения |
REAL(M,D) |
8 байт | Синоним для DOUBLE |
DECIMAL(M,D) | зависит от количества цифр | Тоже что и DOUBLE, только число хранится в виде строки. По умолчанию M=10, D=0. |
DECIMAL(M,D) UNSIGNED | 8 байт | Тоже что и DECIMAL, только не допускает отрицательные значения |
DEC(M,D) NUMERIC(M,D) |
8 байт | Синонимы для DECIMAL |
Строковые типы данных в MySQL
Тип данныхРазмерОпределение
CHAR(Size) | Зависит от кодировки | Строка неизменяемой длины. Длина строки (Size) от 0 до 255 |
CHARACTER(Size) | Зависит от кодировки | Синоним для CHAR |
BINARY(Size) | 0-255 байт | Версия CHAR для хранения бинарных данных |
VARCHAR(Size) | Зависит от кодировки | Строка переменной длины. Длина строки (Size) от 0 до 65,532 (0-255 для версий ниже MySQL 5). Если значение будет большее 65,532 (255), то оно сконвертируется в тип TEXT |
CHARACTER VARYING(Size) | Зависит от кодировки | Синоним для VARCHAR |
VARBINARY(Size) | 0-65,532 байт | Версия VARCHAR для хранения бинарных данных. |
TEXT | Длина строки + 2 байта | Строка с максимальной длинной в 65,535 символов |
TINYTEXT | Длина строки + 1 байт | Строка с максимальной длинной в 255 символов |
MEDIUMTEXT | Длина строки + 3 байта | Строка с максимальной длинной в 16,777,215 символов |
LONGTEXT | Длина строки + 4 байта | Строка с максимальной длинной в 4,294,967,295 символов |
BLOB | 0-65,535 байт | Binary Large OBjects. Может хранить до 65,535 байт бинарных данных (например картинки). Также используется наравне с TEXT для хранения текста. |
TINYBLOB | 0-255 байт | Binary Large OBjects. Может хранить до 255 байт бинарных данных (например картинки). Также используется наравне с TINYTEXT для хранения текста. |
MEDIUMBLOB | 0-16,777,215 байт | Binary Large OBjects. Может хранить до 16,777,215 байт бинарных данных (например картинки). Также используется наравне с MEDIUMTEXT для хранения текста. |
LONGBLOB | 0-4,294,967,295 байт | Binary Large OBjects. Может хранить до 4,294,967,295 байт бинарных данных (например картинки). Также используется наравне с LONGTEXT для хранения текста. |
Комплексные типы данных в MySQL
Тип данныхРазмерОпределение
ENUM(a,b,c,…,n) |
1-255 значений: 256-65,535 значений: |
Список. Максимальное количество значений в списке — 65,535. Поле может принимать только одно значение из списка. При неверном значении оставляет поле пустым. Пример поля: Gender ENUM(«male»,»female»). |
SET(a,b,c,…,n) |
1-8 значений: 9-16 значений: 17-24 значений: 25-32 значений: 33-64 значений: |
Список. Похож на ENUM, но поле может принимать несколько значений из списка. Максимальное количество значений в списке — 64. Пример поля: Fruits SET(«orange»,»apple»,»kiwi»). |
Временные типы данных в MySQL
Тип данныхРазмерОпределение
DATE | 3 байта | Дата. Формат — YYYY-MM-DD. Допустимое значение от 1000-01-01 до 9999-12-31 |
DATETIME | 8 байт | Дата и время. Формат — YYYY-MM-DD HH:MM:SS. Допустимое значение от 1000-01-01 00:00:00 до 9999-12-31 23:59:59 |
TIMESTAMP | 4 байт | Дата и время. Реагирует на изменения таблицы, устанавливает дату и время последнего изменения таблицы. Формат — YYYYMMDD HHMMSS. Допустимое значение от 1970-01-01 00:00:01 до 2038-01-09 03:14:07 |
TIME | 3 байт | Время. Формат — HH:MM:SS. Допустимое значение от 00:00:00 до 23:59:59 |
YEAR(Size) | 1 байт | Год. Формат — YYYY или YY. Допустимое значение от 1901 до 2155 или от 70 до 69 (1970 — 2069) |
Источники
- https://programfiles.info/mysql/sozdanie-tablitsy-v-mysql-create-table/
- https://webonto.ru/sql-zapros-dlya-sozdaniya-tablitsyi-bazyi-dannyih/
- https://www.internet-technologies.ru/articles/sozdanie-baz-dannyh-i-tablic-s-pomoschyu-komand-sql.html
- https://docs.microsoft.com/ru-ru/sql/relational-databases/tables/create-tables-database-engine?view=sql-server-ver15
- https://otus.ru/nest/post/1713/
- https://meliorem.ru/backend/mysql/tipy-dannyx-v-mysql/
Всем привет! В этом уроке разберем пошаговое создание таблиц в базе данных Access. От вас потребуется только читать и повторять. Поехали!
Цель: научиться создавать таблицы базы данных, задавать их структуру, выбирать типы полей и управлять их свойствами; освоить приемы наполнения таблиц конкретным содержанием.
Руководитель малого предприятия, выполняющего сборку персональных компьютеров из готовых компонентов, заказал разработку базы данных, основанной на двух таблицах комплектующих. Одна таблица содержит данные, которые могут отображаться для клиентов при согласовании спецификации изделия, — в ней указаны розничные цены на компоненты. Вторая таблица предназначена для анализа результатов деятельности предприятия – в ней содержаться оптовые цены на компоненты и краткая информация о поставщиках (клиенты предприятия не имеют доступа к данным этой таблицы).
1. Запустите программу Microsoft Access (Пуск — Программы — Microsoft Office — Microsoft Access).
2. В окне Microsoft Access включите переключатель Новая база данных.
Создание БД Access — Пошаговое создание таблиц в базе данных Access
3. На боковой панели выберите место, где будет храниться база данных, дайте файлу имя: Комплектующие. Убедитесь, что в качестве типа файла выбрано Базы данных Microsoft Access и щелкните по кнопке Создать. В результате на экране должно появиться окно новой базы данных. Автоматически будет запущен режим создания первой таблицы:
4. Перейти из режима таблицы в режим конструктора, выбрав его в меню:
Когда программа запросит имя таблицы, ввести название: Комплектующие и нажать Ok. Откроется окно конструктора, в котором мы будем создавать структуру таблицы:
Создание Таблицы Access — Пошаговое создание таблиц в базе данных Access
5. Для первой таблицы введите следующие поля:
Обратите внимание на то, что в данном случае поле Цена задано не денежным типом, а числовым. Данные, относящиеся к денежному типу, имеют размерность, выраженную в рублях (если работа выполняется с версией Microsoft Access, локализованной в России). Но стоимость компонентов вычислительной техники выражать в этой единице измерения не принято. Для сравнимости цен разных поставщиков обычно используют “условные единицы”. В таких случаях удобно использовать поле числового типа, чтобы не перенастраивать всю СУБД.
Таблица «Комплектующие» — Пошаговое создание таблиц в базе данных Access
6. Щелкните на поле Цена. В нижней части бланка задайте свойство Число десятичных знаков, равным 2.
7. Для связи с будущей таблицей поставщиков надо задать ключевое поле. Поскольку здесь ни одно поле явно не претендует на “уникальность”, используем комбинацию полей Компонент и Модель. Выделите оба поля в верхней части бланка (при нажатой клавише SHIFT). Щелчком правой кнопки мыши откройте контекстное меню и выберите в нем пункт Ключевое поле.
После этого рядом с этими полями будет отображаться «ключ».
8. Закройте окно Конструктора (обычное закрытие – через «крест» в верхнем правом углу окна конструктора).
На запрос сохранения изменённой структуры таблицы ответить согласием.
9. Повторив действия пунктов 4-8, создайте таблицу Поставщики, в которую входят следующие поля:
Для этого нужно выполнить следующее: меню Создать — Таблица.
Выбрать режим Конструктора.
Обратите внимание на то, что поле номера телефона является текстовым, несмотря на то, что обычно номера телефонов записывают цифрами. Это связано с тем, что они не имеют числового содержания. Номера телефонов не сравнивают по величине, не вычитают из одного номера другой и т.д. Это типичное текстовое поле.
Ключевое поле можно не задавать – для текущей задачи оно не требуется.
10. В левой боковой панели окна базы данных двойным щелчком откройте по очереди созданные таблицы и наполните их экспериментальным содержанием (по 10 записей).
11. Закончив работу, закройте таблицы и завершите работу с программой.
В этом уроке на простом примере было показано Пошаговое создание таблиц в базе данных Access. Если было интересно, то рекомендую посмотреть видеоурок ниже.
Продолжение следует…
УРОК 1: Пошаговое создание таблиц в базе данных Access
УРОК 2: Создание межтабличных связей в базе Access
УРОК 3: Создание запроса на выборку данных в базе Access
УРОК 4: Создание запросов с параметром в базе Access
УРОК 5: Создание перекрёстного запроса в базе Access
УРОК 6: Создание запросов на изменение в базе Access
УРОК 7: Создание и заполнение форм в базе Access