SQL-Урок 14. Создание таблиц (CREATE TABLE)
Язык SQL используется не только для обработки информации, но и предназначен для выполнения всех операций с базами данных и таблицами, включая создание таблиц и работу с ними.
Существует два способа создания таблиц, используя:
Следует отметить, что, когда вы используете интерактивный инструментарий СУБД, на самом деле вся работа выполняется операторами SQL, то есть интерфейс сам создает эти команды незаметно для пользователя (это подобно записи макроса в Excel, когда макрорекодер записывает ваши действия и превращает их в команды VBA).
1. Создание таблиц
Для создания таблиц программным способом используют оператор CREATETABLE. Для этого нужно указать следующие данные:
Давайте создадим новую таблицу и назовем ее Customers:
CREATE TABLE Customers ( ID CHAR(10) NOT NULL Primary key, Custom_name CHAR(25) NOT NULL, Custom_address CHAR(25) NULL, Custom_city CHAR(25) NULL, Custom_Country CHAR(25) NULL, ArcDate CHAR(25) NOT NULL, DEFAULT NOWO)
Да, мы сначала указываем название новой таблицы, затем в скобках перечисляем столбцы, которые будем создавать, причем их названия не могут повторяться в пределах одной таблицы. После названий столбцов указывается тип данных для каждого поля (CHAR(10)), затем указываем может поле содержать пустые значения (NULL или NOT NULL), а также нужно указать поле, которое будет первичным ключом (Primary keytbl.
Язык SQL также позволяет определять для каждого поля значение по умолчанию, то есть если пользователь не укажет значение для определенного поля — оно будет автоматически проставлено СУБД. Значение по умолчанию определяется ключевым словом DEFAULT при определении столбцов оператором CREATE TABLE.
2. Обновление таблиц
Для того чтобы изменить таблицу в SQL используется оператор ALTER TABLE. При использовании данного оператора следует ввести следующую информацию:
Например, давайте добавим новую колонку в таблицу Sellers, в которой будем указывать телефон реализатора:
ALTER TABLE Sellers ADD Phone CHAR (20)

Помимо добавления столбцов мы также можем их удалять. Давайте теперь удалим поле Phone. Для этого пропишем следующий запрос:
ALTER TABLE Sellers DROP COLUMN Phone

3. Удаление таблиц
Удаление таблиц осуществляется с помощью оператора DROP TABLE. Чтобы удалить таблицу Sellers_new, мы можем прописать следующий запрос:
DROP TABLE Sellers_new
Во многих СУБД применяются правила, предотвращающие удаление таблиц, которые уже связаны с другими таблицами. Если эти правила действуют и вы удаляете такую таблицу, то СУБД блокирует операцию удаления до тех пор пока не будет удалена связь. Такие меры предотвращают случайное удаление нужных таблиц.
- Изменение регистра букв в тексте
- Сумма прописью на украинском языке
- Поиск латиницы в кириллице и наоборот
- Транслитерация с украинского на английский
Как выполнить создание таблицы средствами языка sql
На данном уроке мы познакомимся еще с одной возможностью создания таблиц — через посылку SQL-запросов. Как Вы, наверное, могли заметить на предыдущем уроке, Database Desktop не обладает всеми возможностями по управлению SQL-серверными базами данных. Поэтому с помощью Database Desktop удобно создавать или локальные базы данных или только простейшие SQL-серверные базы данных, состоящие из небольшого числа таблиц, не очень сильно связанных друг с другом. Если же Вам необходимо создать базу данных, состоящую из большого числа таблиц, имеющих сложные взаимосвязи, можно воспользоваться языком SQL (вообще говоря, для этих целей лучше всего использовать специализированные CASE-средства, которые позволяют в интерактивном режиме сгенерировать всю структуру базы данных и сформировать все связи; описание двух наиболее удачных CASE-средств — System Architect и S-Designor — дано в дополнительных уроках). При этом можно воспользоваться компонентом Query в Delphi, каждый раз посылая по одному SQL-запросу, а можно записать всю последовательность SQL-предложений в один так называемый скрипт и послать его на выполнение, используя, например, Windows Interactive SQL (WISQL.EXE) — интерактивное средство посылки SQL-запросов к InterBase (в том числе и локальному InterBase), входящее в поставку Delphi. Конечно, для этого нужно хорошо знать язык SQL, но, уверяю Вас, сложного в этом ничего нет! Конкретные реализации языка SQL незначительно отличаются в различных SQL-серверах, однако базовые предложения остаются одинаковыми для всех реализаций. Практика показывает, что если нет необходимости создавать таблицы во время выполнения программы, то лучше воспользоваться WISQL.
Создание таблиц с помощью SQL
Если Вы хотите воспользоваться компонентом TQuery, сначала поместите его на форму. После этого настройте свойство DatabaseName на нужный Вам алиас (если базы данных еще не существует, удобней создать ее в WISQL командой File|Create Database. а затем уже настроить на нее новый алиас). После этого можно ввести SQL-предложение в свойство SQL. Для выполнения запроса, изменяющего структуру, вставляющего или обновляющего данные на сервере, нужно вызвать метод ExecSQL компонента TQuery. Для выполнения запроса, получающего данные с сервера (т.е. запроса, в котором основным является оператор SELECT), нужно вызвать метод Open компонента TQuery. Это связано с тем, что BDE при посылке запроса типа SELECT открывает так называемый курсор, с помощью которого осуществляется навигация по выборке данных (подробней об этом см. в уроке, посвященном TQuery).
Как показывает опыт, проще воспользоваться утилитой WISQL. Для этого в WISQL выберите команду File|Run an ISQL Script. и выберите файл, в котором записан ваш скрипт, создающий базу данных. После нажатия кнопки «OK» ваш скрипт будет выполнен, и в нижнее окно будет выведен протокол его работы.
Приведем упрощенный синтаксис SQL-предложения для создания таблицы на SQL-сервере InterBase (более полный синтаксис можно посмотреть в online-справочнике по SQL, поставляемом с локальным InterBase):
CREATE TABLE table ( [, | . ]);
где
table — имя создаваемой таблицы,
— описание поля,
— описание ограничений и/или ключей (квадратные скобки [] означают необязательность, вертикальная черта | означает «или»).
Описание поля состоит из наименования поля и типа поля (или домена — см. урок 9), а также дополнительных ограничений, накладываемых на поле:
= col ) | domain> [DEFAULT ] [NOT NULL] [] [COLLATE collation]
Здесь
col — имя поля;
datatype — любой правильный тип SQL-сервера (для InterBase такими типами являются — см. урок 11 — SMALLINT, INTEGER, FLOAT, DOUBLE PRECISION, DECIMAL, NUMERIC, DATE, CHAR, VARCHAR, NCHAR, BLOB), символьные типы могут иметь CHARACTER SET — набор символов, определяющий язык страны. Для русского языка следует задать набор символов WIN1251;
COMPUTED BY () — определение вычисляемого на уровне сервера поля, где — правильное SQL-выражение, возвращающее единственное значение;
domain — имя домена (обобщенного типа), определенного в базе данных;
DEFAULT — конструкция, определяющая значение поля по умолчанию;
NOT NULL — конструкция, указывающая на то, что поле не может быть пустым;
COLLATE — предложение, определяющее порядок сортировки для выбранного набора символов (для поля типа BLOB не применяется). Русский набор символов WIN1251 имеет 2 порядка сортировки — WIN1251 и PXW_CYRL. Для правильной сортировки, включающей большие буквы, следует выбрать порядок PXW_CYRL.
Описание ограничений и/или ключей включает в себя предложения CONSTRAINT или предложения, описывающие уникальные поля, первичные, внешние ключи, а также ограничения CHECK (такие конструкции могут определяться как на уровне поля, так и на уровне таблицы в целом, если они затрагивают несколько полей):
= [CONSTRAINT constraint ]
= (col[,col. ]) | FOREIGN KEY (col [, col . ]) REFERENCES other_table | CHECK ()> search_condition = operator | ()> | [NOT] BETWEEN AND | [NOT] LIKE [ESCAPE ] | [NOT] IN ( [, . ] | = < col [array_dim] | | | | NULL | USER | RDB$DB_KEY > [COLLATE collation] = num | "string" | charsetname "string" = < COUNT (* | [ALL] | DISTINCT ) | SUM ([ALL] | DISTINCT ) | AVG ([ALL] | DISTINCT ) | MAX ([ALL] | DISTINCT ) | MIN ([ALL] | DISTINCT ) | CAST ( AS ) | UPPER () | GEN_ID (generator, ) > = |= | ! < | !>| <> | !=>
= выражение SELECT по одному полю, которое возвращает в точности одно значение.
Приведенного неполного синтаксиса достаточно для большинства задач, решаемых в различных предметных областях. Проще всего синтаксис SQL можно понять из примеров. Поэтому мы приведем несколько примеров создания таблиц с помощью SQL.
Пример A: Простая таблица с конструкцией PRIMARY KEY на уровне поля
CREATE TABLE REGION ( REGION REGION_NAME NOT NULL PRIMARY KEY, POPULATION INTEGER NOT NULL);
Предполагается, что в базе данных определен домен REGION_NAME, например, следующим образом:
CREATE DOMAIN REGION_NAME AS VARCHAR(40) CHARACTER SET WIN1251 COLLATE PXW_CYRL;
Пример B: Таблица с предложением UNIQUE как на уровне поля, так и на уровне таблицы
CREATE TABLE GOODS ( MODEL SMALLINT NOT NULL UNIQUE, NAME CHAR(10) NOT NULL, ITEMID INTEGER NOT NULL, CONSTRAINT MOD_UNIQUE UNIQUE (NAME, ITEMID));
Пример C: Таблица с определением первичного ключа, внешнего ключа и конструкции CHECK, а также символьных массивов
CREATE TABLE JOB ( JOB_CODE JOBCODE NOT NULL, JOB_GRADE JOBGRADE NOT NULL, JOB_REGION REGION_NAME NOT NULL, JOB_TITLE VARCHAR(25) CHARACTER SET WIN1251 COLLATE PXW_CYRL NOT NULL, MIN_SALARY SALARY NOT NULL, MAX_SALARY SALARY NOT NULL, JOB_REQ BLOB(400,1) CHARACTER SET WIN1251, LANGUAGE_REQ VARCHAR(15) [5], PRIMARY KEY (JOB_CODE, JOB_GRADE, JOB_REGION), FOREIGN KEY (JOB_REGION) REFERENCES REGION (REGION), CHECK (MIN_SALARY < MAX_SALARY));
Данный пример создает таблицу, содержащую информацию о работах (профессиях). Типы полей основаны на доменах JOBCODE, JOBGRADE, REGION_NAME и SALARY. Определен массив LANGUAGE_REQ, состоящий из 5 элементов типа VARCHAR(15). Кроме того, введено поле JOB_REQ, имеющее тип BLOB с подтипом 1 (текстовый блоб) и размером сегмента 400. Для таблицы определен первичный ключ, состоящий из трех полей JOB_CODE, JOB_GRADE и JOB_REGION. Далее, определен внешний ключ (JOB_REGION), ссылающийся на поле REGION таблицы REGION. И, наконец, включено предложение CHECK, позволяющее производить проверку соотношения для двух полей и вызывать исключительное состояние при нарушении такого соотношения.
Пример D: Таблица с вычисляемым полем
CREATE TABLE SALARY_HISTORY ( EMP_NO EMPNO NOT NULL, CHANGE_DATE DATE DEFAULT "NOW" NOT NULL, UPDATER_ID VARCHAR(20) NOT NULL, OLD_SALARY SALARY NOT NULL, PERC_CHANGE DOUBLE PRECISION DEFAULT 0 NOT NULL CHECK (PERC_CHANGE BETWEEN -50 AND 50), NEW_SALARY COMPUTED BY (OLD_SALARY + OLD_SALARY * PERC_CHANGE / 100), PRIMARY KEY (EMP_NO, CHANGE_DATE, UPDATER_ID), FOREIGN KEY (EMP_NO) REFERENCES EMPLOYEE (EMP_NO));
Данный пример создает таблицу, где среди других полей имеется вычисляемое (физически не существующее) поле NEW_SALARY, значение которого вычисляется по значениям двух других полей (OLD_SALARY и PERC_CHANGE).
На диске приведен пример скрипта, создающего базу данных, осуществляющую ведение контактов между людьми и организациями.
Заключение
Итак, мы рассмотрели, как создавать таблицы с помощью SQL-выражений. Этот процесс, хотя и не столь удобен, как интерактивное средство Database Desktop, однако обладает наиболее гибкими возможностями по настройке Вашей системы и управления ее связями.
Вводная
Ознакомиться с возможностями СУБД MySQL и создать с его помощью базу данных, набор таблиц в ней и заполнить таблицы данными для последующей работы.
Изучить набор команд языка SQL, связанный с созданием базы данных, созданием, модификацией структуры таблиц и их удалением, вставкой, модификацией и удалением записей таблиц.
Команды
- create database DB_name создание базы данных
- Use database выбор существующей базы данных
- close database закрытие файлов текущей базы данных
- drop database удаление базы данных
- create table создание таблицы базы данных
- alter table модификация структуры базы данных
- drop table удаление таблицы базы данных
- insert добавление одной или нескольких строк в таблицу
- delete удаление одной или нескольких строк из таблицы
- update модификация одной или нескольких строк таблицы
- LOAD DATA INFILE загрузка данных в таблицы из файла
Создать базу данных.
Создание базы данных в MySQL производится с помощью утилиты mysqladmin. Изначально существует только БД mysql для администратора и БД test, в которую может войти любой пользователь и которая по умолчанию пуста. Приведенный ниже пример иллюстрирует создание базы данных.
Mysql/bin>mysqladmin -u root -p create data_name Enter password:****** Database "data_name" created. mysqlbin>
Где data_name – имя создаваемой БД. Проверить, что БД создана можно ранее рассмотренной командой Show databases или утилитой mysqlshow.
По умолчанию, root имеет доступ ко всем базам данных и таблицам. Перейти в созданную базу данных можно, используя команду mysql Use database.
Mysql/bin>mysql -u root -p data1 Enter password:****** Welcome to MySQL monitor.
Или, находясь в другой базе данных, например в mysql ввести команду:
mysql>use data1 Database changed.
Создать базу данных можно непосредственно находясь в клиентском приложении MySQL, вводом команды:
CREATE DATABASE Base_name
Где Base_name имя создаваемой базы данных. В созданной базе можно создавать таблицы и вводить информацию. Указанные операции можно выполнить, используя специализированное программное обеспечение, например MySQL-Front, Mysql Workbench или SQLyog.
- Имя;
- Хост;
- Пароль;
- Порт;
- Имя БД (при необходимости).
После задания активной БД можно с помощью средств, предоставляемых программой изменять структуру БД, вводить данные, задавать ключевые поля. Помимо этого можно в специально отведенном окне напрямую вводить инструкции, используя синтаксис языка SQL.
Средствами языка SQL необходимо создать четыре таблицы в базе данных
Используйте команду CREATE TABLE. Для таблицы products:
CREATE TABLE products ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name varchar(20) NOT NULL, city varchar(20) default NULL );
- поля номер_поставщика, номер_детали, номер_изделия во всех таблицах имеет тип INTEGER
- поля рейтинг, вес и количество имеют целочисленный тип (integer);
- поля фамилия, город (поставщика, детали или изделия), название (детали или изделия) имеют символьный тип и длину 20 (varchar(20));
Обеспечить ссылочную целостность вашей базы данных при помощи FOREIGN KEY
Ссылочная целостность—это состояние реляционной базы данных в которой записи не могут ссылаться на несуществующие записи в этой базе данных.
FOREIGN KEY—особый вид ограничения(constraint) MySQL, которое позволяет предотвратить нарушение ссылочной целостности при удалении/изменении информации в таблицах предках. Поддержка FOREIGN KEY поддерживается только для таблиц типа InnoDB
Пример нарушения ссылочной целостности
Пусть существуют две таблицы. Catalogs, являющаяся таблицей-предком, содержащие в себе упоминания о категориях товаров в интернет магазине и таблица products являющаяся таблицей-потомком, со всеми товарами этого магазина
mysql> SELECT * FROM catalogs; +------------+-------------------------------------+ | id_catalog | name | +------------+-------------------------------------+ | 1 | Процессоры | | 2 | Материнские платы | | 3 | Видеоадаптеры | | 4 | Жёсткие диски | | 5 | Оперативная память | +------------+-------------------------------------+ mysql> SELECT * FROM products; +------------+-------------------------------+------------+ | id_product | name | id_catalog | +------------+-------------------------------+------------+ | 1 | Celeron 1.8 | 1 | | 2 | Celeron 2.0GHz | 1 | | 3 | Celeron 2.4GHz | 1 | | 4 | Celeron D 320 2.4GHz | 1 | | 5 | Celeron D 325 2.53GHz | 1 | | 6 | Celeron D 315 2.26GHz | 1 | | 7 | Intel Pentium 4 3.2GHz | 1 | | 8 | Intel Pentium 4 3.0GHz | 1 | | 9 | Intel Pentium 4 3.0GHz | 1 | | 10 | Gigabyte GA-8I848P-RS | 2 | | 11 | Gigabyte GA-8IG1000 | 2 | | 12 | Gigabyte GA-8IPE1000G | 2 | | 13 | Asustek P4C800-E Delux | 2 | | 14 | Asustek P4P800-VM\L i865G | 2 | | 15 | Epox EP-4PDA3I | 2 | | 16 | ASUSTEK A9600XT/TD | 3 | | 17 | ASUSTEK V9520X | 3 | | 18 | SAPPHIRE 256MB RADEON 9550 | 3 | | 19 | GIGABYTE AGP GV-N59X128D | 3 | | 20 | Maxtor 6Y120P0 | 4 | | 21 | Maxtor 6B200P0 | 4 | | 22 | Samsung SP0812C | 4 | | 23 | Seagate Barracuda ST3160023A | 4 | | 24 | Seagate ST3120026A | 4 | | 25 | DDR-400 256MB Kingston | 5 | | 26 | DDR-400 256MB Hynix Original | 5 | | 27 | DDR-400 256MB PQI | 5 | | 28 | DDR-400 512MB Kingston | 5 | | 29 | DDR-400 512MB PQI | 5 | | 30 | DDR-400 512MB Hynix | 5 | +------------+-------------------------------+------------+
При удалении категории из таблицы catalogs, в таблице products останутся товары которые не привязаны ни к одной из категорий, что может повлечь массу проблем для магазина.
mysql> DELETE FROM catalogs WHERE name = 'Процессоры'; mysql> SELECT * FROM catalogs; +------------+-------------------------------------+ | id_catalog | name | +------------+-------------------------------------+ | 2 | Материнские платы | | 3 | Видеоадаптеры | | 4 | Жёсткие диски | | 5 | Оперативная память | +------------+-------------------------------------+ mysql> SELECT * FROM products WHERE id_catalog = 1; +------------+------------------------+------------+ | id_product | name | id_catalog | +------------+------------------------+------------+ | 1 | Celeron 1.8 | 1 | | 2 | Celeron 2.0GHz | 1 | | 3 | Celeron 2.4GHz | 1 | | 4 | Celeron D 320 2.4GHz | 1 | | 5 | Celeron D 325 2.53GHz | 1 | | 6 | Celeron D 315 2.26GHz | 1 | | 7 | Intel Pentium 4 3.2GHz | 1 | | 8 | Intel Pentium 4 3.0GHz | 1 | | 9 | Intel Pentium 4 3.0GHz | 1 | +------------+------------------------+------------+
Это явление называется нарушением ссылочной целостности
На ссылочную целостность базы данных как правило оказывают четыре типа изменений:
- Добавление новой записи в таблице-потомке. Например добавление новой товарной позиции в таблицу products. Важно заметить что важную роль играет изменение именно таблицы-потомка, т.к изменение таблицы-предка (catalogs) не приведет к нарушению ссылочной целостности, т.к наличие пустой категории товаров допустимо
- Обновление внешнего ключа в таблице-потомке. Эта ситуация похожа на первую и может произойти при изменении у товара ссылки на несуществующий раздел каталога, например товар с id_catalog равным 50
- Удаление записи из таблицы-предка. Эта ситуация рассмотрена выше.
- Изменение записи в таблице-предке. Эта ситуация отличается от рассмотренной выше тем что категория каталога не удаляется а принимает новый id
Обработка изменений при помощи FOREIGN KEY
Для того что бы контролировать ссылочную целостность в базе данных необходимо что бы таблицы были связаны при помощи конструкции FOREIGN KEY, которая имеет вид:
FOREIGN KEY [index_name] (index_col_name, …) REFERENCES tbl_name (index_col_name,…) [ON DELETE ] [ON UPDATE ]
FOREIGN KEY — используется при создании/изменении таблиц-потомков таблицах. В рамках данной статьи FOREIGN KEY, следует использовать в таблице products. Данная конструкция позволяет задать в таблице-потомке внешний ключ с именем index_name на столбцах таблицы которые перечисляется в круглых скобках. Можно использовать один или несколько столбцов.
Ключевое слово REFERENCES задаёт таблицу-предка tbl_name на которую будет ссылаться внешний ключ. Поля таблицы-предка задаются в круглых скобках, один или несколько.
Необязательные конструкции ON DELETE и ON UPDATE, определяют поведение MySQL при удалении/обновлении записей из таблицы-предка.
Допустимые параметры для ключевых слов ON DELETE и ON UPDATE:
- RESTRICT — Если в таблице-потомке существуют записи ссылающиеся на первичный ключ таблицы-предка то при удалении или обновлении записей с этим первичным ключом в таблице предке, будет возвращена ошибка. Ошибка будет возвращаться до тех пор пока не останется ни одной ссылки в таблице потомке. В MySQL данный параметр означает то же самое что и NO ACTION
- CASCADE — При удалении/обновлении записей в таблице-предке, будут так же обновлены/удалены записи из таблицы-потомка с существующим первичным ключом
- SET NULL — При удалении/обновлении записей в таблице-предке, записи из таблицы-потомка с существующим первичным ключом будут обновлены на NULL
- NO ACTION — При удалении/обновлении записей в таблице-предке, записи из таблицы-потомка с существующим первичным ключом изменены не будут. В MySQL данный параметр означает то же самое что и RESTRICT
- SET DEFAULT — Это действие зарезервировано но не обрабатывается в InnoDB
Добавление для таблицы products из примера статьи конструкции:
ALTER TABLE products ADD CONSTRAINT fk_catalog FOREIGN KEY (id_catalog) REFERENCES catalogs (id_catalog) ON DELETE CASCADE ON UPDATE CASCADE
приведет к тому что изменения таблицы catalogs приведет к автоматическому изменению таблицы products.
Загрузка данных вручную
(, используя команду insert into;) После создания пустых таблиц их необходимо наполнить данными. Вводить данные в нее можно несколькими способами (ознакомьтесь со всеми, выберите один для исопльзования):
Пример ввода данных вручную (команда INSERT):
insert into products (name, city)values ('Жесткий диск','Париж');
insert into products values (NULL,'Жесткий диск','Париж');
//т.е в случае если вы вставляете данные во все поля таблицы то их перечислять не обязательно.
Таким образом SQL инструкция имеет следующий вид
INSERT INTO table_name (id, name) VALUES ('id_value', 'name_value');
Записать и выполнить совокупность запросов для занесения нижеприведенных данных в созданные таблицы
insert into имя_таблицы [(поле [,поле]. )] values (константа [,константа]. )
Загрузить данные из текстового файла
Это является более предпочтительным, особенно если нужно ввести несколько тысяч записей.
Синтаксис команды LOAD DATA INFILE.
DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name [FIELDS [TERMINATED BY 't'] [OPTIONALLY] ENCLOSED BY ''] [ESCAPED BY '' ]] [LINES TERMINATED BY 'n'] [IGNORE number LINES] [(col_name. )]
LOAD DATA LOCAL INFILE '/MyDocs/categories.txt' REPLACE INTO TABLE category FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'
- REPLACE В SQL запросе означает, что необходимо замещать записи с совпадающими значениями ключей.
- INTO TABLE указывает имя таблицы, куда будут импортированы данные.
- FIELDS TERMINATED BY ';' указывает разделители полей, порядок полей должен быть таким же, как и в таблице назначения,
- OPTIONALLY ENCLOSED BY '\"' указывает, что поля VARCHAR взяты в двойные кавычки
- LINES TERMINATED BY '\r' указывает разделители строк.
Программно
Можно использовать утилиту mysqlimport для загрузки данных из текстового файла, или использовать программы MySQL-Front, Mysql Workbench или SQLyog.
Данные для создания базы
Таблица поставщиков (shippers aka S)
| Hомеp поставщика | Фамилия | Рейтинг | Город |
| 1 | Смит | 20 | Лондон |
| 2 | Джонс | 10 | Париж |
| 3 | Блейк | 30 | Париж |
| 4 | Кларк | 20 | Лондон |
| 5 | Адамс | 30 | Афины |
Таблица деталей (details aka P)
| Номер детали | Название | Цвет | Вес | Город |
| 1 | Гайка | Красный | 12 | Лондон |
| 2 | Болт | Зеленый | 17 | Париж |
| 3 | Винт | Голубой | 17 | Рим |
| 4 | Винт | Красный | 14 | Лондон |
| 5 | Кулачок | Голубой | 12 | Париж |
| 6 | Блюм | Красный | 19 | Лондон |
Таблица изделий (products aka J)
| Номер изделия | Название | Город |
| 1 | Жесткий диск | Париж |
| 2 | Перфоратор | Рим |
| 3 | Считыватель | Афины |
| 4 | Принтер | Афины |
| 5 | Флоппи-диск | Лондон |
| 6 | Терминал | Осло |
| 7 | Лента | Лондон |
Таблица поставок (supplies aka SPJ)
| Номер поставщика | Номер детали | Номер изделия | Количество |
| 1 | 1 | 1 | 200 |
| 1 | 1 | 4 | 700 |
| 2 | 3 | 1 | 400 |
| 2 | 3 | 2 | 200 |
| 2 | 3 | 3 | 200 |
| 2 | 3 | 4 | 500 |
| 2 | 3 | 5 | 600 |
| 2 | 3 | 6 | 400 |
| 2 | 3 | 7 | 800 |
| 2 | 5 | 2 | 100 |
| 3 | 3 | 1 | 200 |
| 3 | 4 | 2 | 500 |
| 4 | 6 | 3 | 300 |
| 4 | 6 | 7 | 300 |
| 5 | 2 | 2 | 200 |
| 5 | 2 | 4 | 100 |
| 5 | 5 | 5 | 500 |
| 5 | 5 | 7 | 100 |
| 5 | 6 | 2 | 200 |
| 5 | 1 | 4 | 100 |
| 5 | 3 | 4 | 200 |
| 5 | 4 | 4 | 800 |
| 5 | 5 | 4 | 400 |
| 5 | 6 | 4 | 500 |
Завершение работы
Убедиться в успешности выполненных действий. При необходимости исправить ошибки.
5. Выполнить модификацию структуры таблицы supplies (SPJ), добавив поле с датой поставки. Убедиться в успешности выполненных действий. При необходимости исправить ошибки (команда Alter table).
6. Уничтожить созданные таблицы, предварительно сохранив инструкции для восстановления структуры БД и информационного наполнения, используя средства работы СУБД. Убедиться в успешности выполненных действий.
7. Выполнить необходимые действия, написав и выполнив соответствующие запросы для модификации таблиц, чтобы структура соответствовала концептуальной модели учебной базы данных (рисунок ниже). Убедиться в успешности выполненных действий. При необходимости исправить ошибки.

Проверить результат заполнения таблиц, написав и выполнив простейший запрос:
SELECT * FROM имя_таблицы
При наличии ошибок выполнить корректировку, исправив либо удалив ошибочные строки таблиц
Вопросы
- В каких режимах возможно создание базы данных?
- Какие типы данных допустимы при создании таблицы?
- Как выполнить создание таблицы средствами СУБД?
- Как выполнить создание таблицы средствами языка SQL?
- Как разделяются операторы SQL в случае нескольких операторов в запросе?
- Каким образом выполнить простейшие операции вставки строк данных в таблицу средствами SQL?
- Каким образом выполнить простейшие операции модификации строк таблицы средствами SQL?
- Каким образом выполнить просмотр таблицы?
- Как получить информацию о структуре таблицы в рамках СУБД MySQL?
Создание таблиц в Microsoft SQL Server (CREATE TABLE) – подробная инструкция
Привет, сегодня я Вам расскажу о том, как создаются таблицы в Microsoft SQL Server, при этом мы рассмотрим примеры создания таблиц как с помощью графического интерфейса, специально для начинающих, так и с помощью инструкции CREATE TABLE языка T-SQL.
В прошлой статье «Создание базы данных в Microsoft SQL Server» я рассказывал, как создаются пустые базы данных, в которых еще нет таблиц, поэтому сегодня, в продолжение того материала я покажу, как создаются таблицы, в которые и будут добавляться и храниться все данные.
Как было уже отмечено, создать таблицу в Microsoft SQL Server можно двумя способами: первый — с помощью графического конструктора SQL Server Management Studio (SSMS), и второй — с помощью инструкции на языке T-SQL.
Заметка! Для комплексного изучения языка T-SQL рекомендую посмотреть мои видеокурсы по T-SQL, в которых используется последовательная методика обучения и рассматриваются все конструкции языка SQL и T-SQL.
Исходные данные для примера
Давайте представим, что нам нужно реализовать базу данных со следующую структурой (пример структуры тестовый). В ней у нас будет две таблицы, и они будут содержать следующие столбцы:
- Goods – таблица будет содержать информацию о товарах:
- ProductId – идентификатор товара, столбец не может содержать значения NULL, первичный ключ;
- Category – ссылка на категорию товара, столбец не может содержать значения NULL, но имеет значение по умолчанию, например, для случаев, когда товар еще не распределили в необходимую категорию, в этом случае товару будет присвоена категория по умолчанию («Не определена» или «Не указана»);
- ProductName – наименование товара, столбец не может содержать значения NULL;
- Price – цена товара, столбец может содержать значения NULL, например, с ценой еще не определились.
- CategoryId – идентификатор категории, столбец не может содержать значения NULL, первичный ключ;
- CategoryName – наименование категории, столбец не может содержать значения NULL.
При этом внести товар с несуществующей категорией нельзя, поэтому мы добавим еще и ограничение внешнего ключа.
Примечание! В качестве сервера у меня выступает версия Microsoft SQL Server 2017 Express, как ее установить, можете посмотреть в моей видео-инструкции.
Итак, давайте приступим.
Создание таблицы в Microsoft SQL Server с помощью Management Studio
Запускаем среду SQL Server Management Studio.
В обозревателе объектов открываем контейнер «Базы данных», затем открываем нужную базу данных и щелкаем правой кнопкой мыши по пункту «Таблицы», и выбираем «Таблица».
У Вас откроется конструктор таблиц. В нем будет всего три колонки:
- Имя столбца – сюда пишем название столбца;
- Тип данных – выбираем тип данных для этого столбца, подробней о типах данных можете почитать в статье «Типы данных в Microsoft SQL Server»;
- Разрешить значения NULL – если поставить галочку, то столбец сможет принимать значение NULL.
Заполняем эти колонки, сначала в соответствии с нашей тестовой структурой таблицы Categories.
После этого нам нужно определить первичный ключ, для этого щелкаем правой кнопкой мыши по нужному столбцу (в нашем случае это CategoryId) и выбираем пункт «Задать первичный ключ».
Также для этого столбца давайте определим спецификацию идентификатора, т.е. зададим свойство IDENTITY, для того чтобы данный столбец автоматически генерировал уникальный идентификатор записи.
Чтобы это сделать, в свойствах столбца в нижней части конструктора ищем раздел «Спецификация идентификатора» и включаем его, т.е. ставим «Да». В случае необходимости Вы можете задать начальное значение идентификатора, например, для того чтобы начать идентификацию с определённого значения, а также можете изменить шаг приращения, т.е. на какое значение будет увеличиваться Ваш идентификатор.
Определение нашей таблицы готово, теперь нам ее необходимо сохранить. Для этого щелкаем по вкладке правой кнопкой мыши и нажимаем «Сохранить» или просто нажимаем сочетание клавиш «Ctrl+S», также кнопка «Сохранить» доступна и в меню «Файл».
Далее вводим название таблицы, в нашем случае это Categories, и нажимаем «OK».
Все, конструктор можно закрыть, можете обновить обозреватель объектов, чтобы таблица у Вас отобразилась.
Теперь переходим к таблице Goods. В этом случае делаем все то же самое, т.е. определяем столбцы, задаем первичный ключ и задаем спецификацию идентификатора. Только в данном случае нам нужно дополнительно задать значение по умолчанию для столбца Category и создать ограничение внешнего ключа (FOREIGN KEY).
Для того чтобы задать значение по умолчанию, необходимо выбрать столбец, и в свойствах этого столбца в параметре «Значение по умолчанию или привязка» указать желаемое значение по умолчанию, в нашем случае давайте напишем 1.
Чтобы создать внешний ключ, щелкаем в любом месте конструктора правой кнопкой мыши и выбираем пункт «Отношения…».
Затем нажимаем добавить.
Далее задаем спецификацию таблиц и столбцов, для этого щелкаем на три точки напротив соответствующего свойства.
Потом откроется окно, в котором мы указываем следующее:
- Таблица первичного ключа – выбираем из списка таблицу Categories, а также ее первичный ключ, по которому будет осуществляться связь;
- Таблица внешнего ключа – это как раз наша текущая таблица, пока она еще не создана, поэтому она отображается как Table_1, в этом случае выбираем столбец Category этой таблицы, который будет выполнять роль внешнего ключа, т.е. это и будет ссылка на внешнюю таблицу (т.е. сопоставление таблиц будет осуществляться как CategoryId = Category);
- Имя связи — название ограничения, допустим, у нас это будет FK_Category.
Нам осталось задать правила обновления и удаления, т.е. что будет происходить с записями таблицы Goods (они же ссылаются на таблицу Categories) если категория (запись таблицы Categories) будет изменена или удалена.
Изменять идентификатор категории вряд ли придётся, а если и придётся, то пусть в этих случаях появится ошибка, иными словами, правило обновление просто не задаем. А вот в случае с удалением категории, пусть всем товарам присвоится значение по умолчанию, т.е. неопределенная категория. Для этого определяем правило удаления как «Присвоить значение по умолчанию».
Затем можем сохранить таблицу тем же способом, что и раньше. Называем ее Goods. В случае если появится предупреждающее сообщение о том, что будут затронуты следующие таблицы, отвечаем «Да», т.е. продолжаем.
После обновления объектов в обозревателе, созданная таблица отобразится.
Теперь Вы можете добавлять данные в эти таблицы, например, с помощью инструкции INSERT.
Создание таблицы с помощью инструкции CREATE TABLE языка T-SQL
Теперь давайте я покажу процесс создания тех же самых таблиц, но только на языке T-SQL с использованием инструкции CREATE TABLE.
Упрощённый синтаксис создания таблиц следующий:
CREATE TABLE Название таблицы ( [Название столбца] [Тип данных] [Возможность принятия значения NULL] [Определение ограничения], … )
В реальности синтаксис инструкции CREATE TABLE очень большой и с первого взгляда сложный, поэтому начинающим лучше сначала понять принцип создания таблицы, а потом углубляться в детали.
Чтобы написать и выполнить инструкцию T-SQL, открываем редактор SQL запросов, для этого нажимаем кнопку «Создать запрос» и пишем необходимую инструкцию, она представлена чуть ниже. Эта инструкция эквивалентна всем действиям, которые мы делали в графическом интерфейсе.
Примечание! Если Вы создали таблицы с помощью графического интерфейса и хотите протестировать следующую инструкцию T-SQL по созданию таблиц, то Вам предварительно нужно удалить эти таблицы, так как они уже существуют и сервер выдаст ошибку. Для этого я специально включил в инструкцию команду DROP TABLE IF EXISTS, которая удаляет таблицы, в случае если они существуют. Параметр IF EXISTS доступен, начиная с 2016 версии SQL Server, подробней об этом параметре мы говорили в статье – «Инструкция DROP IF EXISTS».
--Удаление таблиц --Параметр IF EXISTS доступен начиная с 2016 версии SQL Server DROP TABLE IF EXISTS Goods; DROP TABLE IF EXISTS Categories; --Создание таблицы с товарами CREATE TABLE Goods ( ProductId INT IDENTITY(1,1) NOT NULL CONSTRAINT PK_ProductId PRIMARY KEY, Category INT NOT NULL DEFAULT (1), ProductName VARCHAR(100) NOT NULL, Price MONEY NULL, ); GO --Создание таблицы с категориями CREATE TABLE Categories ( CategoryId INT IDENTITY(1,1) NOT NULL CONSTRAINT PK_CategoryId PRIMARY KEY, CategoryName VARCHAR(100) NOT NULL ); GO --Добавление ограничения внешнего ключа (FOREIGN KEY) ALTER TABLE Goods ADD CONSTRAINT FK_Category FOREIGN KEY (Category) REFERENCES Categories (CategoryId) ON DELETE SET DEFAULT ON UPDATE NO ACTION; GO
Выполняем инструкцию (кнопка «Выполнить»), в итоге также будут созданы две таблицы и соответствующие ограничения.
Видео-инструкция по созданию таблиц в Microsoft SQL Server
У меня на этом все, надеюсь, материал был Вам полезен, пока!
