[БЕЗ_ЗВУКА]
[БЕЗ_ЗВУКА] Всем привет!
В этом видео мы попробуем создавать базы данных и таблицы в них.
Для этого у пользователя, под которым мы будем это делать,
должно быть право CREATE для баз данных.
Пользователь uroot вполне вам подойдет.
uroot в MySQL я имею в виду.
Давайте приступим.
Я захожу в mysql пользователем uroot.
Без пароля.
И сразу создаю базу данных «книги».
Я бы мог указать дополнительные опции, такие
как кодировку по умолчанию или способ сравнения, но я этого делать не буду.
Вот база данных создана.
Если я хочу посмотреть более детально, как выглядит команда создания базы данных,
для какой-то базы данных, я могу написать show create database и какую-то
уже из существующих баз данных, ну вот в частности books,
а он мне покажет, что мы создали базу данных create database books,
и также, что кодировка по умолчанию у нее utf8.
Можем удалить эту базу данных.
Для этого достаточно написать drop database books.
Все, базы данных книг больше нет.
Давайте создадим ее заново,
и все-таки укажем [БЕЗ_ЗВУКА]
кодировку по умолчанию не utf8,
как у нас получилось, когда мы ничего не указали, а utf8mb4.
...только просто create.
Кодировка utf8mb4 отличается от
кодировки utf8 тем, что в utf8 нельзя хранить эмоджи,
а в utf8mb4 можно, поэтому мы будем использовать ее для нашей базы данных.
Дальше мы перейдем в эту базу данных.
Это позволит нам писать имена всех таблиц, не указывая базу данных дополнительно,
то есть просто имя таблицы без полного имени с именем базы данных.
Напишем use books.
И мы как бы перешли в эту базу данных, и теперь можем создавать таблицы внутри нее.
Давайте создадим таблицу издателей create table `publisher`.
Здесь у нас в скобочках, как мы узнали в предыдущем видео, должно идти
create definition, то есть перечисление всех столбцов и ограничение этой таблицы.
Давайте создадим первый столбец.
Это будет первичный ключ `publisher_id`.
Он будет целочисленный, без знака,
и в нем не может быть пустых значений: not null.
Также мы скажем, что это поле автоинкремент,
то есть увеличить свое значение при вставке данных сюда.
Если не указывать это поле, то все строчки будут нумероваться по порядку.
А также скажем, что это первичный ключ.
Как видите, все достаточно просто.
Я фактически записываю то, что я вам проговариваю.
Этого достаточно.
Дальше у издателя будет название `name`.
Это будет строка переменной длины,
максимум 512 символов, и она тоже не может быть пустой not null.
Больше никаких дополнительных ограничений мы не наложим.
А также сайт.
Сайт у нас тоже будет строка, varchar, такая же,
но, допустим, 128 символов максимум,
и она может быть, ну потому что у издателя, возможно, нет сайта.
Я думаю, что нам хватит пока колонок в этой таблице,
и мы можем указать какие-то дополнительные опции для таблицы,
например движок InnoDB.
И попробуем создать.
Вот у нас создалась таблица издательств.
Все довольно-таки просто.
Пойдем дальше.
Давайте теперь создадим таблицу жанров.
Если в таблице издателей мы указали, например,
что колонка является первичным ключом прямо в описании колонки,
давайте в таблице издательств укажем это отдельной конструкцией,
а также добавим уникальный ключ и комментарии.
Давайте попробуем.
...create table `genre`...
Точно так же открываемся и начинаем, собственно, с первичного ключа,
только здесь мы не будем писать, что это первичный ключ.
Это у нас будет просто колонка, id.
Она у нас будет также целочисленная,
десять символов, без знака,
не может быть нулем, null-ом точнее,
автоинкремент, но мы не напишем, что она primary key.
Дальше у нас будет имя, точно так же, как и в предыдущей таблице,
и она у нас будет просто varchar.
Допустим, имя издательства — это 64 символа, и нам хватит.
И оно пусть тоже не может быть пустым,
все-таки у издательства должно быть имя, но мы еще добавим комментарий.
Просто достаточно написать слово comment, и это будет
'название жанра', чтобы всем было понятно,
что же у нас одначает поле `name` в таблице жанров.
А теперь давайте добавим отдельно указание,
что у нас есть первичный ключ и что у нас есть уникальный ключ.
Для этого мы просто напишем primary key и укажем,
какая колонка у нас является первичным ключом.
Это у нас `genre_id`.
Вот и все, собственно.
Ну и также мы укажем, что имя у нас является уникальным ключом.
Для этого мы напишем unique key,
укажем название ключа, допустим, назовем `uq_name`,
сокращение от unique — это просто название, и укажем,
какая колонка у нас уникальная — это колонка `name`.
Вот так мы создадим уникальный ключ.
Я думаю, что больше нам ничего здесь не надо.
Также можем указать какие-нибудь дополнительные опции,
например, указать, что,
когда мы вставим первую строчку в эту табличку,
у нее айдишник будет десять, а не один, как по умолчанию.
Например, вот так.
Вот у нас создалась таблица жанров.
Давайте создадим теперь таблицу авторов и будем крайне лениться
— опустим все косые черточки, которые мы там экранировали, опустим какие-то
дополнительные параметры, попробуем как-то так ленивенько все сделать.
...create table author...
заметьте, я не экранирую никак имя...
author_id у нас будет int,
не указываем, сколько длина, без знака.
Все-таки, потому что если не указать unsigned, можно не указывать,
но он тогда будет знаковым, все-таки он не может быть null,
если мы не укажем not null, то он по умолчанию null — лучше указать.
А также мы оставим автоинкремент для первичного ключа,
просто чтобы был, и здесь мы напишем, что это первичный ключ сразу.
Тоже чтобы не писать отдельно.
Вот так вот, покороче чуть.
Дальше мы оставим то же самое имя varchar,
varchar нельзя опустить, длину максимальную, это обязательно,
поэтому не можем опустить, мы все-таки хотим, чтобы имя у автора было, поэтому
not null, я думаю, что все-таки стоит указать, но больше мы ничего не будем.
Дальше давайте добавим автору пол, и это у нас будет перечисление.
Это может быть мужчина и женщина.
И мы не будем указывать, что оно not null, зато мы напишем,
что по умолчанию, если мы не передадим сюда никакого значения, это будет мужчина.
А дальше давайте добавим день рождения,
birthday, и это будет просто дата, тоже никаких дополнительных.
Она может быть null, поскольку мы не указали иначе,
то есть мы не знаем когда автор родился.
Почему бы и нет.
Ну и никаких других опций мы не будем добавлять.
Вот у нас создалась таблица авторов.
Видите, мы тут Дальше давайте считирим.
Таблица книг, основная таблица, она очень большая.
Я вам заодно покажу, как создавать одну таблицу на основе другой.
У меня есть отдельная база данных, в которой я готовился к этому курсу,
и там уже создана эта таблица.
Поэтому мы напишем create table book
like и с указанием базы данных, у меня есть таблица базы данных course,
и в ней есть таблица book.
Оп! У нас создалась на основе таблицы из
другой базы данных таблица в нашей.
Давайте посмотрим, что же там появилось.
show create table book.
Или даже можем добавить так вот ключ G, который более красиво форматирует.
Вот мы создали таблицу book.
Но, смотрите, как раз то, о чём я говорил в предыдущем видео,
у нас здесь создались первичный ключ, уникальный ключ, описание всех колонок,
ключи на publisher и на genre.
Но, на самом деле, исходная таблица, если я напишу show create table course book,
то мы заметим, что у меня были ещё и ограничения на той таблице.
Но они при создании копии с неё, копии структуры, не перенеслись.
Но это ничего страшного.
В следующем видео мы как раз будем смотреть изменения таблиц с помощью SQL и
поправим это недоразумение.
И давайте в конце создадим последнюю табличку связи
между книгами и авторами, это будет book author.
Как раз мы сделаем там ограничения сами.
table book author У нас в ней
не будет первичного ключа, что интересно.
Она будет только ссылаться, с одной стороны, на книги,
соответственно, у неё будет book_id.
И сразу мы добавим,
наверное, поле author_id.
Это, с другой стороны, она ссылается на авторов,
на такое же по сути тоже беззнаковое и тоже not null.
Аллотируем и добавим ограничения.
Напишем constraint,
назовём его,
это у нас будет внешний ключ, fk_book мы его назовём, и он,
напишем, что это foreign key, собственно, внешний ключ, foreign key.
И дальше мы указываем, с какого поля ссылается наша таблица.
Это поле book_id нашей таблицы, book_id.
И укажем, куда оно ссылается.
Для этого мы используем ключевое слово references и указываем,
на какую таблицу и на какое поле в ней наше поле book_id ссылается.
Ссылается оно на таблицу book и поле
book_id уже в той таблице.
Заодно мы укажем,
что случается, если мы удалим книгу, на которую эта таблица ссылается.
То есть on delete напишем cascade, то есть мы удалим
записи в нашей таблице, если удалится книга, на которую эти записи ссылаются.
Вот так.
И в случае обновления мы тоже запишем on update тоже cascade.
И то же самое мы сделаем для автора.
Напишем.
[БЕЗ_ЗВУКА] Создадим
внешний ключ, назовём его fk_author.
Укажем, что это именно внешний ключ.
Укажем, с какого поля нашей таблицы,
и укажем, куда.
Это будет на таблицу
авторов на поле author_id в ней.
Также укажем,
что on deleta cascade.
[БЕЗ_ЗВУКА] on
update cascade.
И теперь мы можем закрывать наше create definition.
Вот у нас создалась таблица авторов.
Таким образом мы создали пять таблиц, подготовились к следующему занятию,
в котором мы будем экспериментировать с этими таблицами, добавлять поля,
редактировать их всячески, изменять структуру этих таблиц.
[БЕЗ_ЗВУКА]