Создание простой базы данных mysql: Создание базы данных в MySQL, настройка и удаление таблицы

Содержание

Создание базы данных SQL и таблиц базы данных на примере

Связанные темы

Для этого понадобится установленная система управления базами данных (СУБД) DB2. Мы будем использовать диалект языка SQL, который используется именно в этой СУБД.

Первая команда, которую мы будем применять для создании базы данных — это команда CREATE DATABASE. Её синтаксис следующий:

CREATE DATABASE ИМЯ_БАЗЫ ДАННЫХ

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

CREATE TABLE ИМЯ_ТАБЛИЦЫ (имя_первого_столбца тип данных, …, имя_последнего_столбца тип данных, первичный ключ, ограничения (не обязательно))

Так как наша база данных моделирует сеть аптек, то в ней есть такие сущности, как «Аптека» (таблица Pharmacy в нашем примере создания базы данных), «Препарат» (таблица Preparation в нашем примере создания базы данных), «Доступность (препаратов в аптеке)» (таблица Availability в нашем примере создания базы данных), «Клиент» (таблица Client в нашем примере создания базы данных) и другие, которые здесь подробно и разберём.

Разработке модели «сущность-связь» можно посвятить не одну статью, но если нас прежде всего интересуют команды языка SQL для создания базы данных и таблиц в ней, то условимся считать, что связи между сущностями уже нам понятны. На рисунке ниже приведено представление модели нашей базы данных с атрибутами сущностей (таблиц) и связями между таблицами.

Для увеличения рисунка можно нажать на него левой кнопкой мыши.

При создании базы данных, в которой таблицы связаны между собой, важно позаботиться о целостности данных. Это означает, например, что если если удалить препарат из таблицы Preparation, то должны удалиться все записи этого препарата в таблице Availability. Ещё пример ограничения целостности: нужно установить запрет на удаление названия группы препарата из таблицы Group, если существует хотя бы один препарат этой группы. Особый случай составляет изменение данных в одной таблице, когда производятся действия с данными в другой таблице. Об этом поговорим в конце статьи. Можно также углубиться в теорию на уроке

Реляционная модель данных.

Как уже говорилось, в разбираемом здесь примере создания базы данных использовался вариант языка SQL, который используется в системе управления базами данных (СУБД) DB2. Он является регистронезависимым, то есть не имеет значение, набраны ли команды и отдельные слова в них строчными или прописными буквами. Для иллюстрации этой особенности приведены команды без особой системы набранные строчными и прописными буквами.

Теперь приступим к созданию команд. Первая наша команда SQL создаёт базу данных PHARMNETWORK:

Код SQL

CREATE DATABASE PHARMNETWORK

Описание таблицы PHARMACY (Аптека):

Имя поляТип данныхОписание
PH_IDsmallintИдентификационный номер аптеки
Addressvarchar(40)Адрес аптеки

Пишем команду, которая создаёт таблицу PHARMACY (Аптека), значения первичного ключа PH_ID генерируются автоматически от 1 с шагом 1, вносится проверка на то, чтобы значения атрибута Address в этой таблице были уникальными:

Код SQL

CREATE TABLE PHARMACY(PH_ID smallint NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), Address varchar(40) NOT NULL, PRIMARY KEY(PH_ID), CONSTRAINT PH_UNIQ UNIQUE(Address))

Следует обратить внимание на то, что автоматическое генерирование первичного ключа с приращением обеспечено средствами, применяемыми в диалекте SQL для DB2:

Код SQL

PH_ID smallint NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)

Средства автоматического генерирования первичного ключа с приращением (кратко это называется автоинкрементом) в разных диалектах SQL различаются. Так, в MySQL используется ключевое слово AUTO_INCREMENT и соответствующая часть запроса на создание таблицы выглядит следующим образом:

Код SQL

PH_ID int(4) NOT NULL AUTO_INCREMENT

В SQL Server механизм автоинктемента обеспечивается так:

Код SQL

PH_ID int IDENTITY(1, 1) PRIMARY KEY

Запись (1, 1) здесь означает, что значения первичного ключа должны создаваться начиная с 1 с приращением на 1. Итак, помните о том, что в зависимости от СУБД и диалекта SQL механизмы автоинкремента различаются, а далее для краткости будем приводить запросы на создание таблиц в соответствии с синтаксисом для DB2.

Описание таблицы GROUP (Группа препаратов):

Имя поляТип данныхОписание
GR_IDsmallintИдентификационный номер группы препаратов
Namevarchar(40)Название группы препаратов

Пишем команду, которая создаёт таблицу Group (Группа препаратов), значения первичного ключа GR_ID генерируются автоматически от 1 с шагом 1, проводится проверка уникальности наименования группы (для этого используется ключевое слово CONSTRAINT):

Код SQL

CREATE TABLE GROUP(GR_ID smallint NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), Name varchar(40) NOT NULL, PRIMARY KEY(GR_ID), CONSTRAINT GR_UNIQ UNIQUE(Name))

Описание таблицы PREPARATION (Препарат):

Имя поляТип данныхОписание
PR_IDsmallintИдентификационный номер препарата
GR_IDsmallintИдентификационный номер группы препарата
Name
varchar(40)Название препарата

Команда, которая создаёт таблицу PREPARATION, значения первичного ключа PR_ID генерируются автоматически от 1 с шагом 1, определяется, что значения внешнего ключа GR_ID (Группа препаратов) не могут принимать значение NULL, определена проверка уникальности значений атрибута Name:

Код SQL

CREATE TABLE PREPARATION(PR_ID smallint NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), Name varchar(40) NOT NULL, GR_ID int NOT NULL, PRIMARY KEY(PR_ID), constraint PR_UNIQ UNIQUE(Name))

Теперь самое время создать таблицу AVAILABILITY (Доступность или Наличие препарата в аптеке). Её описание:

Имя поляТип данныхОписание
A_IDsmallintИдентификационный номер записи о доступности
PH_IDsmallintИдентификационный номер аптеки
PR_IDsmallintИдентификационный номер препарата
QuantityintКоличество доступного препарата
DateStartvarchar(20)Дата начала работы аптеки с данным препаратом
DateEndvarchar(20)Дата окончания работы аптеки с данным препаратом
Martvarchar(3)Выставлен ли препарат на витрину

Пишем команду, которая создаёт таблицу AVAILABILITY. Определяются даты начала (не может быть NULL) и окончания (по умолчанию NULL).

Код SQL

CREATE TABLE AVAILABILITY(A_ID smallint NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), PH_ID INT NOT NULL, PR_ID INT NOT NULL, DateStart varchar(20) NOT NULL, DateEnd varchar(20) DEFAULT NULL, QUANTITY INT NOT NULL, MART varchar(3) DEFAULT NULL, PRIMARY KEY(A_ID), CONSTRAINT AVA_UNIQ UNIQUE(PH_ID, PR_ID))

Создаём таблицу DEFICIT (Дефицит препарата в аптеке, то есть, неудовлетворённый запрос). Её описание:

Имя поляТип данныхОписание
D_IDsmallintИдентификационный номер записи о дефиците
PH_IDsmallintИдентификационный номер аптеки
PR_IDsmallintИдентификационный номер препарата
Solutionvarchar(40)Решение проблемы дефицита
DateStartvarchar(20)Дата появления проблемы
DateEndvarchar(20)Дата решения проблемы

Пишем команду, которая создаёт таблицу DEFICIT:

Код SQL

CREATE TABLE DEFICIT(D_ID smallint NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), PH_ID INT NOT NULL, PR_ID INT NOT NULL, Solution varchar(40) NOT NULL, DateStart varchar(20) NOT NULL, DateEnd varchar(20) DEFAULT NULL)

Осталось немного. Мы уже дошли до команды, которая создаёт таблицу Employee (Сотрудник). Её описание:

Имя поляТип данныхОписание
E_IDsmallintИдентификационный номер сотрудника
PH_IDsmallintИдентификационный номер аптеки
FNamevarchar(40)Имя сотрудника
LNamevarchar(40)Фамилия сотрудника
Postvarchar(40)Должность

Пишем команду, которая создаёт таблицу Employee (Сотрудник), с первичным ключом, генерируемым по тем же правилам, что и первичные ключи предыдущих таблиц, в которых они существуют. Внешним ключом PH_ID Сотрудник связан с PHARMACY (Аптекой).:

Код SQL

CREATE TABLE EMPLOYEE(E_ID smallint NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), F_Name varchar(40) NOT NULL, L_Name varchar(40) NOT NULL, POST varchar(40) NOT NULL, PH_ID INT NOT NULL, PRIMARY KEY(E_ID))

Очередь дошла до создании таблицы CLIENT (Клиент). Её описание:

Имя поляТип данныхОписание
C_IDsmallintИдентификационный номер клиента
FNamevarchar(40)Имя клиента
LNamevarchar(40)Фамилия клиента
DateRegvarchar(20)Дата регистрации

Пишем команду, создающую таблицу CLIENT (Клиент), в отношении первичного ключа которого справедливо предыдущее описание. Особенность этой таблицы в том, что её атрибуты F_Name и L_Name имеют по умолчанию значение NULL. Это связано с тем, что клиенты могут быть как зарегистрированными, так и незарегистрированными. У последних значения имени и фамилии как раз и будут неопределёнными (то есть NULL):

Код SQL

CREATE TABLE CLIENT(C_ID smallint NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), FName varchar(40) DEFAULT NULL, LName varchar(40) DEFAULT NULL, DateReg varchar(20), PRIMARY KEY(C_ID))

Предпоследняя таблица в нашей базе данных — таблица BASKET (Корзина покупок). Её описание:

Имя поляТип данныхОписание
BS_IDsmallintИдентификационный номер корзины покупок
E_IDsmallintИдентификационный номер сотрудника, оформившего корзину
C_IDsmallintИдентификационный номер клиента

Пишем команду, создающую таблицу BASKET (Корзина покупок), так же с уникальным и инкрементируемым первичным ключом и связанную внешним ключами C_ID и E_ID с Клиентом и Сотрудником соответственно:

Код SQL

CREATE TABLE BASKET(BS_ID smallint NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), C_ID INT NOT NULL, E_ID INT NOT NULL, PRIMARY KEY(BS_ID))

И, наконец, последняя таблица в нашей базе данных — таблица BUYING (покупка). Её описание:

Имя поляТип данныхОписание
B_IDsmallintИдентификационный номер покупки
PH_IDsmallintИдентификационный номер аптеки
PR_IDsmallintИдентификационный номер препарата
BS_IDvarchar(40)Идентификационный номер корзины покупок
Pricevarchar(20)Цена
Datevarchar(20)Дата

Пишем команду, создающую таблицу BUYING (покупка), так же с уникальным и инкрементируемым первичным ключом и связанную внешними ключами BS_ID, PH_ID, PR_ID с Корзиной покупок, Аптекой и Препаратом соответственно:

Код SQL

CREATE TABLE BUYING(B_ID smallint NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), BS_ID INT NOT NULL, PH_ID INT NOT NULL, PR_ID INT NOT NULL, DateB varchar(20) NOT NULL, Price Double NOT NULL, PRIMARY KEY(B_ID))

И совсем уже в завершение темы создания базы данных обещанное отступление о соблюдении ограничений целостности, когда решение — более сложное, чем написание команды. В нашем примере необходимо соблюдать следующее условие: при покупке единицы препарата значение количества этого препарата в таблице AVAILABILITY должно соответственно уменьшиться. Вообще говоря, для таких операций в языке SQL существуют особые средства, называемые триггерами. Но триггеры — вещь капризная: на практике они могут и не сработать или сработать не так, как предусмотрено. Поэтому разработчики по возможности ищут программные средства решения таких задач, пример которых упомянут в этом абзаце.

И действительно, есть программное средство решение обозначенной выше задачи уменьшения значения количества препарата. А именно: в условии добавления соответствующего препарата в таблицу BUYING (Покупка) пишется функция на языке программирования, на котором выполнено приложение, с запросом с ключевым словом UPDATE на замену значения количества этого препарата на единицу меньше в той же аптеке. И таблица BUYING, и таблица AVAILABILITY имеют внешний ключ PH_ID — идентификатор определённой аптеки.

На этом многогранная тема создания баз данных прерывается…

Поделиться с друзьями

Лучшие базы данных для Linux

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

За время развития технологий баз данных было создано много систем управления ими, моделей работы, а также программного обеспечения. В этой статье мы рассмотрим лучшие базы данных Linux, которые вы можете использовать в своих проектах. Вы сможете выбрать какое решение подойдет именно для вас и почему. Все пункты списка базы данных под Linux расположены в случайном порядке. Все базы данных из списка поддерживают стандарт ACID.

Содержание статьи:

1. MySQL

Разработка базы данных MySQL началась в 1995 году, за это время над ней работали несколько компаний, и сейчас она принадлежит Oracle. Кроме версии с открытым исходным кодом, существует несколько коммерческих версий, в которых реализованы дополнительные возможности, такие как кластер гео-репликации и автоматическое масштабирование.

MySQL относиться к типичным реляционным базам данных, все данные хранятся в таблицах и приложения могут очень быстро получить к ним доступ. Для запросов используется стандартный язык SQL, поддерживается большинство возможностей языка, определенных стандартом. При всем этом, она легка в использовании и развертывании.

За время своего развития MySQL получила поддержку различных типов таблиц, интеграцию во многие программы и языки программирования, а также имеет веб и графические интерфейсы для настройки.

2. PostgreSQL

Postgresql появился приблизительно в то же время, что и MySQL. Это объектно-реляционная база данных с открытым исходным кодом, все данные представлены в виде объектов. В отличие от MySQL, эта база данных неукоснительно следует всем стандартам SQL из-за чего она может показаться более сложной. Она разрабатывается программистами со всего мира, а направление развития контролируется советом.

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

3. SQLite

База данных SQLite была впервые выпущена в 2000 году. Она работает не в форме клиент-сервер, как это делают большинство баз данных, а представляет из себя библиотеку, которая встраивается в приложение. Все данные хранятся в одном файле, на том компьютере, где запущена программа. Читать данные из файла могут несколько клиентов одновременно, но записывать только один и если других операций чтения не выполняется.

Благодаря компактности SQLite накладные расходы минимальны, а установка и использование очень просты. В то же время база данных соответствует большинству требований стандарта SQL. Поэтому SQLite используется по умолчанию во многих веб-фреймворках, и программах для рабочего стола, например: Mozilla Firefox, Skype, Thunderbird и многих других.

4. MariaDB

Эта база данных основана на исходном коде MySQL и ее разработка началась после перехода оригинала в собственность Oracle. За работу взялись первоначальные разработчики MySQL. MariaDB сохраняет тесную совместимость с MySQL, поддерживаются все ее команды и синтаксис запросов. Кроме того, из дополнительных возможностей можно отметить поддержку таблиц: XtraDB, Aria, PBXT, FederateX, OQGRAPH, SphinxSE и другие.

Кроме таблиц была очень сильно улучшена производительность  и добавлены новые возможности. Разработка ведется компанией MariaDB Foundation и разработчиками по всему миру, но в развитие проекта инвестируют деньги множество компаний, среди которых Google и Intel. Это лучшая и самая популярная база данных Linux.

5. Percona

Percona DB — это сборка базы данных MySQL со включенным по умолчанию движком таблиц XtraDB. Этот движок основан на InnoDB но дает более высокую производительность и больше статистики.

Движок таблиц XtraDB основан на InnoDB, но включает патчи исправлений от компаний Google и Percona, поэтому дает большую производительность. Здесь улучшен механизм работы с памятью, скорость ввода/вывода, добавлена поддержка работы нескольких потоков и управление пропускной способностью. Вы можете не использовать отдельный сервер баз данных, а включить XtraDB в MariaDB или MySQL.

6. MongoDB

MongoDB — это не реляционная, документарная база данных, которая была выпущена в 2007 году. Основная ее особенность в том, что данные хранятся не в виде строк в таблицах, а в документах, в формате JSON. Запросы на получение и изменение данных тоже оформляются через JavaScript подобный язык.

Эта база данных не подходит для хранения реляционных данных, данных между которыми важны связи. Но она дает очень высокую скорость работы. Над разработкой проекта работают более 1000 партнеров. Дальше, снова базы данных sql.

7. Firebird

Firebird — это реляционная система управления базами данных, основанная на исходном коде базы данных Interbase, которая была выпущена компанией Borland в 2000 году. Поддерживаются все инструкции стандарта SQL 92 и почти все из SQL 99. Поддержка ACID реализована с помощью версий записи, каждый запрос работает со своей версией, а это значит, что ничего не блокируется и не мешает друг-другу. Из дополнительных возможностей поддерживаются тиггеры и процедуры хранения.

8. CUBRID

Это объектно-реляционная система управления базами данных, которая появилась в 2008 году. Она имеет особую архитектуру, специально оптимизированную для быстрой работы веб-приложений. За каждую задачу отвечает отдельный процесс, что дает преимущество в скорости. На данный момент поддерживается стандарт SQL 92.

База данных может интегрироваться со множеством языков программирования, среди которых PHP, Perl, Python и Ruby.

Выводы

В этой статье мы рассмотрели лучшие бесплатные базы данных Linux и других операционных систем, которые вы можете использовать в своих проектах. Все они имеют открытый код и распространяются полностью бесплатно, но каждая из них имеет свои преимущества. Какую базу данных вы используете в своих проектах? Почему именно ее? Напишите в комментариях!

На завершение вы можете посмотреть видео, о том, что такое базы данных:

Оцените статью:

Загрузка…

Быстро создать базу данных | Gadget-apple.ru

На чтение 16 мин Просмотров 6 Опубликовано

Проектирование системы управления базами данных в Delphi.

Что нужно освоить:

1) каким образом подключать базу данных к компонентам Delphi;

2) порядок создания приложения для управления простейшей локальной базой данных;

3) как управлять отображением таблиц баз данных;

4) как организовать сортировку и фильтрацию данных;

5) как использовать язык запросов SQL.

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

ШАГ 1. СОЗДАЕМ ПРОСТЕЙШУЮ БАЗУ ДАННЫХ

Прежде чем приступить к разработке системы управления базой данных (СУБД) следует эту базу создать. Воспользуемся для этой цели приложением Microsoft Office Access, так как офис установлен практически на любом компьютере и Access скорее всего был установлен по умолчанию.

В данном пособии будут рассмотрены возможности доступа к базам данных посредством только одной технологии — ADO (Active Data Objects), разработанной Microsoft. Это современная библиотека, прежде всего, позволяет работать с локальными базами MS Access и клиент-серверными MS SQL Server. Изучение этой библиотеки позволит вам в дальнейшем без затруднений перейти к базам данных, построенным на основе иных технологий.

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

Запустите Microsoft Office Access. В меню нажмите Файл/Создать и далее в мастере выберите Новая база данных. Вам будет предложено выбрать место хранения базы и имя файла. Укажите путь к вашему первому будущему приложению (где в дальнейшем будете сохранять проект Delphi) и осмысленное имя для базы данных магазина компьютерной литературы, например, mkl.mdb.

Откроется окно организации работы с базой данных (см. рис.).

Выберите двойным кликом мыши пункт «Создание таблицы в режиме конструктора» — откроется конструктор таблицы, в котором следует задать наименование полей таблицы и тип данных содержащихся в соответствующих полях.

Пример описания полей таблицы смотрите на рисунке ниже. Пусть в таблице будет шесть полей. В Access именам полей можно давать наименование, как на английском, так и на русском языках. Наименование полей №№2−5 очевидно, так же как и тип данных этих полей. Разберем поле №1. Наименование поля: id_kn — идентификатор книги. Это поле имеет для базы особое значение — это поле ключевое в таблице, оно несет неповторимый идентификатор записи. Установить опцию «Ключевое поле» можно через контекстное меню, возникающее при нажатии правой клавишей мыши на соответствующем поле в конструкторе таблицы. Сохраните таблицу, нажав на клавишу сохранения, вам будет предложено выбрать имя для таблицы — установите имя магазин.

Через меню Вид установите просмотр в Режим таблицы:

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

ШАГ 2. СОЗДАЕМ ПРОСТЕЙШЕЕ ПРИЛОЖЕНИЕ ДЛЯ УПРАВЛЕНИЯ БАЗОЙ ДАННЫХ

Простейшее приложение должно быть способно просмотреть содержимое базы данных (в нашем случае содержимое одной таблицы), кроме того должны быть функции исправления записей, их удаления и добавления. Аналогичную задачу можно, конечно, выполнить и без привлечения технологий обработки баз данных, но разработка такого приложения займет на два-три порядка больше времени.

Итак, запустите Delphi, создайте новое приложение и сохраните проект в папку, где находится файл базы данных. Пусть имя модуля будет magazin.pas, а имя проекта ProjectMagazin.dpr.

Теперь давайте определимся, какие компоненты с палитры необходимы для работы с базой данных. База данных состоит из таблиц, для просмотра которых необходим соответствующий визуальный компонент — DBGrid с вкладки Data Controls. Кроме того должны быть еще компоненты, которые обеспечивают связь приложения с местом расположения базы данных, распознают ее формат, делают выборку из определенной таблицы базы данных. Для этих целей используем следующие три компонента: ADOConnection и ADOTable с вкладки ADO и DataSource с вкладки Data Access.

Настроим свойства всех компонентов на форме.

1. ADOConnection1. Дважды кликните по компоненту (или в инспекторе объектов по строке свойства ConnectionString) — вам представится возможность ввести строку подключения (Use Connection String), запустите мастер нажатием клавиши Build и на вкладке «Поставщик данных» выберите драйвер подключения к базам данных Microsoft Jet OLE DB Provider. Нажмите «Далее» для перехода на вкладку «Подключение» и там, в строке «Выберите или введите имя базы данных», наберите имя файла — в нашем случае это mkl.mdb. Можно, конечно, нажать на клавишу рядом со строкой и непосредственно указать на файл, но, в этом случае, лучше сразу убрать путь к файлу, оставив только имя, чтобы при переносе приложения в другое место не возникло проблем с доступом к базе данных. Нажмите OK в мастере и OK на форме выбора строки подключения. Свойство LoginPromt переключите в False, чтобы каждый раз при подключении к базе данных к пользователю не было запроса о пароле.

2. ADOTable1. В свойстве Connection в выпадающем списке укажите на ADOConnection1, в свойстве TableName выберите таблицу (у нас она пока одна магазин). Свойство Active переведите в положение True (обратите внимание, что в дальнейшем при смене настроек вам часто придется это свойство возвращать в положение True). И, для удобства, переименуйте компонент в TableMagazin.

3. DataSource1. У этого компонента-посредника необходимо свойство DataSet установить в выпадающем списке на таблицу TableMagazin.

4. DBGrid1. Свяжем сетку с DBGrid1 с таблицей магазин из базы данных посредством DataSource1, установив в инспекторе объектов для свойства DataSource в выпадающем списке доступных компонентов DataSource1.

На этом создание простейшей базы данных закончено, а ведь мы не написали ни одной строчки кода. Если бы у вас уже был опыт работы с этими компонентами, то вы бы затратили менее минуты на разработку такой СУБД.

Запустите приложение клавишей F9 и поработайте над наполнением базы данных (клавиши управления: F2 — редактировать ячейку, Ins — добавить запись, Ctrl+Del — удалить запись). Закройте приложение и затем снова запустите — и вы убедитесь, что внесенные вами изменения сохранены.

Пример заполнения базы данных:

Не все предпочитают работать клавиатурой, если есть мышь. Поэтому иногда полезным может оказаться компонент DBNavigator с вкладки Data Controls. Разместите его для пробы (в дальнейшем его следует удалить) на форме по своему усмотрению и подсоедините используя посредник DataSource1 — укажите на него в свойстве DataSource. По необходимости можно некоторые клавиши из панели управления базой данных отключить в свойстве VisibleButtons. И, хотя кнопки управления интуитивно понятны, имеется возможность снабдить их всплывающими подсказками, для чего установите свойство ShowHint в True, а текст подсказок можно установить/изменить в свойстве Hints. Возможный вид приложения после подключения компонента DBNavigator смотри на рисунке:

Не нашли то, что искали? Воспользуйтесь поиском:

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

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

О SQL

SQL — это язык программирования, который применяется для создания баз данных. Если его установить на компьютер и начать создавать базу данных, то будет не совсем удобно. Связано это с тем, что сам по себе SQL не имеет никакой графической оболочки, а запросы к базе данных нужно отправлять вообще через командную строку. По этой причине появились различного рода программы, которые упрощают разработку баз данных. Однако обучиться азам этого языка все же стоит. Вдруг нужно какой-то запрос сделать, а программа работает некорректно.

Microsoft Access

Эта программа для создания баз данных точно знакома многим. Ведь она идет в пакете программ Microsoft Office. Эта программа является одной из самых легких в освоении, ведь знания языка программирования SQL там практически не нужны. Можно лишь обозначить, какой запрос сделать, а программа сама составит SQL-запрос.

Насчет актуальности программы. До сих пор базы данных множества организаций сделаны именно с помощью Microsoft Access. Действительно, сама программа очень легкая, есть интуитивно понятный интерфейс. Более того, основам работы в Access даже обучают в школе и на начальных курсах колледжа!

PhpMyAdmin

Access, конечно, программа хорошая, но если нужна база данных для сайта, она не справится. Тогда на помощь приходит PhpMyAdmin. Это очень полезная программа для создания баз данных. Установка на компьютер занимает некоторое время, да и при инсталляции легко что-то сделать не так, и не будет работать. Поэтому при установке этой программы для создания баз данных нужно четко следовать инструкции. Но плюсом еще PhpMyAdmin является то, что к ней можно получить доступ и через интернет в виде сайта! Например, у вас есть сайт, который работает на WordPress. У него будет база данных. И если у вас сайт на каком-нибудь хорошем хостинге, то, вероятнее всего, работа с базами данных будет осуществляться через PhpMyAdmin, и к нему можно будет получить доступ через панель управления хостинга.

MySQL WorkBench

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

В этой статье были рассмотрены основные программы для создания баз данных. На самом деле их огромное множество, поэтому каждый выбирает инструмент под себя, но если же вы только осваиваетесь и желаете изучить эту область, то рекомендуется работать с MySQL WorkBench. После того как вы изучите основы SQL, для вас уже не будет существенной разницы, где работать, ведь запросы везде одинаковые. Удобно и то, что, создав базу данных в одной программе, можно ее открыть через другой софт, который тоже предназначен для работы с БД. При создании софта с базой данных не обойтись без этих знаний. Более того, освоив SQL, можно даже создать свое программное обеспечение для разработки и редактирования баз данных.

Приветствую всех на сайте Info-Comp.ru! В этой статье я подробно, специально для начинающих программистов, расскажу о том, как создать базу данных в Microsoft SQL Server, а также о том, что Вы должны знать, перед тем как создавать базу данных.

Сегодняшний материал, как я уже сказал, ориентирован на начинающих программистов, которые хотят научиться работать с Microsoft SQL Server. Поэтому я и буду исходить из того, что Вам нужно создать базу данных для обучения, т.е. основной посыл этой статьи направлен на то, чтобы тот, кто хочет создать базу данных в Microsoft SQL Server, после прочтения статьи четко знал, что ему для этого нужно сделать.

Что нужно, для того чтобы создать базу данных в Microsoft SQL Server?

В данном разделе я представлю своего рода этапы создания базы данных в Microsoft SQL Server, т.е. это как раз то, что Вы должны знать и что у Вас должно быть, для того чтобы создать базу данных:

  1. У Вас должна быть установлена СУБД Microsoft SQL Server. Для обучения идеально подходит бесплатная редакция Microsoft SQL Server Express. Если Вы еще не установили SQL сервер, то вот подробная видео-инструкция, там я показываю, как установить Microsoft SQL Server 2017 в редакции Express;
  2. У Вас должна быть установлена среда SQL Server Management Studio (SSMS). SSMS — это основной инструмент, с помощью которого осуществляется разработка баз данных в Microsoft SQL Server. Эта среда бесплатная, если ее у Вас нет, то в вышеупомянутой видео-инструкции я также показываю и установку этой среды;
  3. Спроектировать базу данных. Перед тем как переходить к созданию базы данных, Вы должны ее спроектировать, т.е. определить все сущности, которые Вы будете хранить, определить характеристики, которыми они будут обладать, а также определить все правила и ограничения, применяемые к данным, в процессе их добавления, хранения и изменения. Иными словами, Вы должны определиться со структурой БД, какие таблицы она будет содержать, какие отношения будут между таблицами, какие столбцы будет содержать каждая из таблиц. В нашем случае, т.е. при обучении, этот этап будет скорей формальным, так как правильно спроектировать БД начинающий не сможет. Но начинающий должен знать, что переходить к созданию базы данных без предварительного проектирования нельзя, так как реализовать БД, не имея четкого представления, как эта БД должна выглядеть в конечном итоге, скорей всего не получится;
  4. Создать пустую базу данных. В среде SQL Server Management Studio создать базу данных можно двумя способами: первый — с помощью графического интерфейса, второй — с помощью языка T-SQL;
  5. Создать таблицы в базе данных. К этому этапу у Вас уже будет база данных, но она будет пустая, так как в ней еще нет никаких таблиц. На этом этапе Вам нужно будет создать таблицы и соответствующие ограничения;
  6. Наполнить БД данными. В базе данных уже есть таблицы, но они пусты, поэтому сейчас уже можно переходить к добавлению данных в таблицы;
  7. Создать другие объекты базы данных. У Вас уже есть и база данных, и таблицы, и данные, поэтому можно разрабатывать другие объекты БД, такие как: представления, функции, процедуры, триггеры, с помощью которых реализуется бизнес-правила и логика приложения.

Вот это общий план создания базы данных, который Вы должны знать, перед тем как начинать свое знакомство с Microsoft SQL Server и языком T-SQL.

В этой статье мы рассмотрим этап 4, это создание пустой базы данных, будут рассмотрены оба способа создания базы данных: и с помощью графического интерфейса, и с помощью языка T-SQL. Первые три этапа Вы должны уже сделать, т.е. у Вас уже есть установленный SQL Server и среда Management Studio, и примерная структура базы данных, которую Вы хотите реализовать, как я уже сказал, на этапе обучения этот пункт можно пропустить, а в следующих материалах я покажу, как создавать таблицы в Microsoft SQL Server пусть с простой, но с более-менее реальной структурой.

Создание базы данных в SQL Server Management Studio

Первое, что Вам нужно сделать, это запустить среду SQL Server Management Studio и подключиться к SQL серверу.

Затем в обозревателе объектов щелкнуть по контейнеру «Базы данных» правой кнопкой мыши и выбрать пункт «Создать базу данных».

В результате откроется окно «Создание базы данных». Здесь обязательно нужно заполнить только поле «Имя базы данных», остальные параметры настраиваются по необходимости. После того, как Вы ввели имя БД, нажимайте «ОК».

Если БД с таким именем на сервере еще нет, то она будет создана, в обозревателе объектов она сразу отобразится.

Как видите, база данных создана, и в этом нет ничего сложного.

Создание базы данных на T-SQL (CREATE DATABASE)

Процесс создания базы данных на языке T-SQL, наверное, еще проще, так как для того чтобы создать БД с настройками по умолчанию (как мы это сделали чуть выше), необходимо написать всего три слова в редакторе SQL запросов — инструкцию CREATE DATABASE и название БД.

Сначала открываем редактор SQL запросов, для этого щелкаем на кнопку «Создать запрос» на панели инструментов.

Затем вводим следующую инструкцию, и запускаем ее на выполнение, кнопка «Выполнить».

Где CREATE — это команда языка T-SQL для создания объектов на SQL сервере, командой DATABASE мы указываем, что хотим создать базу данных, а TestDB — это имя новой базы данных.

Конечно же, на данном этапе многие не знают ни Microsoft SQL Server, ни языка T-SQL, многие, наверное, как раз и создают базу данных для того, чтобы начать знакомиться с этой СУБД и начать изучать язык T-SQL. Поэтому чтобы Вам легче было это делать, советую почитать книгу «Путь программиста T-SQL» — это самоучитель по языку Transact-SQL для начинающих, в которой я подробно рассказываю как про основные конструкции, так и про продвинутые конструкции языка T-SQL, и последовательно перехожу от простого к сложному.

С помощью инструкции CREATE DATABASE можно задать абсолютно все параметры, которые отображались у нас в графическом интерфейсе SSMS. Например, если бы мы заменили вышеуказанную инструкцию следующей, то у нас база данных создалась бы в каталоге DataBases на диске D.

Удаление базы данных в Microsoft SQL Server

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

В случае с графическим интерфейсом необходимо в обозревателе объектов щелкнуть правой кнопкой мыши по нужной базе данных и выбрать пункт «Удалить».

Примечание! Удалить базу данных возможно, только если к ней нет никаких подключений, т.е. в ней никто не работает, даже Ваш собственный контекст подключения в SSMS должен быть настроен на другую БД (например, с помощью команды USE). Поэтому предварительно перед удалением необходимо попросить всех завершить сеансы работы с БД, или в случае с тестовыми базами данных принудительно закрыть все соединения.

В окне «Удаление объекта» нажимаем «ОК». Для принудительного закрытия существующих подключений к БД можете поставить галочку «Закрыть существующие соединения».

В случае с T-SQL, для удаления базы данных достаточно написать следующую инструкцию (в БД также никто не должен работать).

Где DROP DATABASE — это инструкция для удаления базы данных, TestDB — имя базы данных. Иными словами, командой DROP объекты на SQL сервере удаляются.

Видео-урок по созданию базы данных в Microsoft SQL Server

На этом наш сегодняшний урок закончен, надеюсь, материал был Вам интересен и полезен, в следующем материале я расскажу про то, как создавать таблицы в Microsoft SQL Server, удачи Вам, пока!

Объяснение оператора создания базы данных MariaDB

Резюме : в этом руководстве вы узнаете, как использовать оператор создания базы данных MariaDB для создания новой базы данных.

Введение в оператор MariaDB

create database

Чтобы создать новую базу данных на сервере MariaDB, вы используете оператор create database со следующим синтаксисом:

 

создать [или заменить] базу данных [если не существует ] имя_базы_данных

Язык кода: SQL (язык структурированных запросов) (sql)

[набор символов = имя_набора_символов]

[сортировка = имя_сопоставления];

В этом синтаксисе:

Сначала укажите имя базы данных, которую вы хотите создать после ключевых слов create database .Имя базы данных должно быть уникальным в экземпляре сервера MariaDB. Если вы создадите базу данных с тем же именем, что и у существующей базы данных, MariaDB выдаст ошибку.

Во-вторых, необязательное предложение или replace предписывает MariaDB сначала удалить базу данных, если она существует, прежде чем создавать новую базу данных. Это ярлык для следующих операторов:

 

удалить базу данных, если существует имя_базы_данных; создать базу данных имя_базы_данных;

Язык кода: SQL (язык структурированных запросов) (sql)

Обратите внимание, что MariaDB поддерживает предложение или заменить , начиная с версии 10.1.3.

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

Наконец, при необходимости укажите набор символов и параметры сортировки для новой базы данных. Набор символов определяет, как и какие символы будут храниться в базе данных для поддержки определенных языков. Сопоставление определяет правило сравнения строк, например, буква a стоит перед буквой b и т. д.

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

Создание новой базы данных с помощью программы командной строки mysql

Чтобы создать новую базу данных с помощью программы командной строки mysql, выполните следующие действия:

Сначала войдите на сервер MariaDB, используя учетную запись пользователя с создать привилегию для базы данных:

 

> mysql -u root -p Введите пароль: ********

Язык кода: SQL (язык структурированных запросов) (sql)

Введите пароль для пользователя root и нажмите клавишу Enter с клавиатуры.

Во-вторых, показать базы данных на текущем сервере с помощью оператора show databases :

 

mysql> show databases; + | База данных | + | информационная_схема | | MySQL | | нация | | представление_схема | | тест | + 5 рядов в сете (0,01 сек)

Язык кода: SQL (язык структурированных запросов) (sql)

В-третьих, создайте новую базу данных с именем crm :

 

mysql> создайте базу данных crm; Запрос выполнен успешно, затронута 1 строка (0.01 сек)

Язык кода: SQL (язык структурированных запросов) (sql)

В-четвертых, снова покажите базы данных:

 

mysql> покажите базы данных; + | База данных | + | крм | | информационная_схема | | MySQL | | нация | | представление_схема | | тест | + 6 рядов в сете (0,00 сек)

Язык кода: SQL (язык структурированных запросов) (sql)

База данных crm есть в списке.

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

В этом руководстве вы узнали, как использовать оператор MariaDB create database для создания новой базы данных.

Было ли это руководство полезным?

Python MySQL — создание базы данных

API базы данных Python (интерфейс прикладной программы) — это интерфейс базы данных для стандартного Python. Этот стандарт поддерживается большинством интерфейсов баз данных Python.Существуют различные серверы баз данных, поддерживаемые базой данных Python, такие как MySQL, GadFly, mSQL, PostgreSQL, Microsoft SQL Server 2000, Informix, Interbase, Oracle, Sybase и т. д. Чтобы подключиться к серверу базы данных MySQL из Python, нам нужно импортировать mysql.connector интерфейс.
Синтаксис:

 CREATE DATABASE DATABASE_NAME 

Пример:

Python

импорт mysql.connector

БАЗА ДАННЫХ = MySQL.connector.connect (

хост = "локальный" ,

пользователь = "пользователь" ,

PASSWD = "GFG"

)

CursorObject = DATABASE.CURSOR ()

CUPSOROBJECT.EXECUTE ( 2

.

Вывод:
 

Вышеприведенная программа иллюстрирует создание базы данных MySQL geeks4geeks, в которой имя хоста — localhost, имя пользователя — user, а пароль — gfg.
Предположим, мы хотим создать таблицу в базе данных, тогда нам нужно подключиться к базе данных. Ниже приведена программа для создания таблицы в базе данных geeks4geeks, которая была создана в вышеуказанной программе.

Python

импорт mysql.connector

БАЗЫ ДАННЫХ = mysql.connector.connect (

хост = "локальный" ,

пользователь = "пользователь" ,

PASSWD = "GFG" ,

базы данных = "geeks4geeks"

 

cursorObject = база данных.курсор ()

studentRecord =

cursorObject.execute (studentRecord)

База данных. Close ()

Выход:


Как создавать и поддерживать Databases MySQL в CPANEL -HISTING

. В этом руководстве описывается процесс создания и управления базами данных MySQL в cPanel.Есть два инструмента cPanel, которые позволяют создавать базы данных MySQL: Базы данных MySQL меню и Мастер базы данных MySQL. Давайте узнаем, как каждый из них работает на самом деле.


Меню баз данных MySQL можно быстро открыть с помощью ярлыков cPanel в учетной записи Namecheap.
Для базовой темы cPanel 1. Для того, чтобы начать, войдите в cPanel и нажмите на меню MySQL Databases в разделе Databases :

2.Оказавшись там, найдите раздел Create New Database , затем просто укажите имя будущей базы данных и нажмите кнопку Create Database :

3. База данных создана и готова к использованию. Теперь, чтобы иметь возможность заполнять и поддерживать базу данных, пользователь MySQL должен быть создан и назначен базе данных с правильными привилегиями.

Чтобы создать пользователя MySQL, найдите раздел Пользователи MySQL > Добавить нового пользователя и выберите имя пользователя, которое вы хотите присвоить своей базе данных.После этого выберите безопасный пароль для пользователя MySQL и введите его в соответствующие поля:

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

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

4. После выбора пароля просто нажмите кнопку «Создать пользователя», чтобы завершить процесс:

5.Теперь у вас есть и база данных MySQL, и пользователь MySQL. Теперь нам нужно назначить пользователя MySQL базе данных и установить соответствующие привилегии. Для этого найдите раздел Добавить пользователя в базу данных и убедитесь, что вы выбрали правильную базу данных и пользователя соответственно. После этого просто нажмите кнопку Добавить :

6. В следующем окне вам нужно будет установить правильные привилегии для пользователя MySQL. В этом примере мы предоставим все привилегии, чтобы иметь возможность поддерживать нашу базу данных MySQL без каких-либо ограничений, поэтому вам просто нужно выбрать опцию «Все привилегии» и нажать кнопку «Внести изменения»:

ПРИМЕЧАНИЕ: Важно помнить, что несколько пользователей MySQL с разными наборами привилегий могут быть назначены одной и той же базе данных MySQL.

7. После завершения вы получите сообщение о том, что пользователь MySQL был успешно добавлен в базу данных:

Чтобы проверить это, вы можете просто вернуться в меню Базы данных MySQL и проверить раздел Текущие базы данных :



Для cPanel Retro Theme

1. Чтобы начать, войдите в cPanel и щелкните меню «Базы данных MySQL» в разделе «Базы данных»:

2.Оказавшись там, найдите раздел Create New Database , затем просто укажите имя будущей базы данных и нажмите кнопку Create Database :

3. База данных создана и готова к использованию. Теперь, чтобы иметь возможность заполнять и поддерживать базу данных, пользователь MySQL должен быть создан и назначен базе данных с правильными привилегиями. Чтобы создать пользователя MySQL, найдите раздел Пользователи MySQL > Добавить нового пользователя и выберите имя пользователя, которое вы хотите присвоить своей базе данных.После этого выберите безопасный пароль для пользователя MySQL и введите его в соответствующие поля:

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

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

4. После выбора пароля просто нажмите кнопку Создать пользователя , чтобы завершить процесс:

5.Теперь у вас есть и база данных MySQL, и пользователь MySQL. Теперь нам нужно назначить пользователя MySQL для базы данных и установить соответствующие привилегии. Для этого найдите раздел Добавить пользователя в базу данных и убедитесь, что вы выбрали правильную базу данных и пользователя соответственно. После этого просто нажмите кнопку Добавить :

6. В следующем окне вам нужно будет установить правильные привилегии для пользователя MySQL. В этом примере мы предоставим все привилегии, чтобы иметь возможность поддерживать нашу базу данных MySQL без каких-либо ограничений, поэтому вам просто нужно выбрать All Privileges и нажмите кнопку Make Change s:

ПРИМЕЧАНИЕ: Важно помнить, что несколько пользователей MySQL с разными наборами привилегий могут быть назначены одной и той же базе данных MySQL.

7. После завершения вы получите сообщение о том, что пользователь MySQL был успешно добавлен в базу данных:

Чтобы проверить это, вы можете просто вернуться в меню баз данных MySQL и проверить раздел Current Databases . :


Создание базы данных с помощью мастера базы данных MySQL


Мастер базы данных MySQL выполняет тот же пошаговый процесс, который описан выше, но в более упрощенном виде.Давайте проверим, как это работает:

1. Чтобы найти инструмент, войдите в cPanel и выберите параметр Мастер базы данных MySQL в разделе Базы данных :

2. После этого укажите имя новой базы данных и нажмите кнопку Next Step :

3. На шаге 2 вам будет предложено указать пользователя MySQL и выбрать для него пароль , в обратном порядке к процессу, описанному ранее:

4.После указания имени пользователя и пароля просто нажмите кнопку Create User :

5. Следующие окна позволят вам установить привилегии для вновь созданного пользователя MySQL аналогично процессу, описанному ранее.

Соответственно вам нужно будет выбрать вариант All Privileges и после этого нажать на кнопку Next Step :

6. После этого вы получите подтверждение того, что пользователь MySQL был успешно добавлен в базу данных MySQL:

Вот оно!

             
                      Нужна помощь? Свяжитесь с нашей службой поддержки

Научитесь использовать базу данных MySQL

MySql — одна из самых популярных баз данных.

Мы только что опубликовали курс по базе данных MySQL на YouTube-канале freeCodeCamp.org.

Этот курс создал Бхарат Рам Манохаран из Execute on Command. Он старший инженер баз данных и отличный преподаватель.

Этот курс начинается с основ SQL. Затем он также переходит к ключевым концепциям базы данных, таким как моделирование данных, блокировки, индексы, объяснение SQL и многое другое.

Вот темы, затронутые в этом курсе:

  • Как создать экземпляр AWS EC2
  • Как установить базу данных MySQL
  • Моделирование данных
  • Основы SQL — Создание таблицы
  • Основы SQL — Вставка данных
  • Основы - Обновление и удаление данных
  • Основы SQL - Данные считывания (Select Operations)
  • СОЕДИНЕНИЯ
  • .

    Посмотрите полный курс ниже или на сайте freeCodeCamp.org YouTube канал (2 часа просмотра).

    Стенограмма

    (сгенерирована автоматически)

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

    Добро пожаловать на этот базовый курс MySQL. Я хочу начать с того, что поблагодарю вас за попытку освоить новый навык.

    Позвольте представиться.

    Меня зовут Барбара, и я работаю в Salesforce в качестве старшего инженера по базам данных, у меня более 12 лет опыта работы с различными базами данных, основной из которых является Oracle, у меня есть опыт работы с такими компаниями, как Chase, PayPal, Wells, Fargo, Стабхаб и др.

    Позвольте мне сначала ответить на несколько основных вопросов: кто, что и почему.

    Итак, кому следует пройти этот курс Этот курс предназначен для специалистов по базам данных, которые хотят расширить свой набор навыков.

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

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

    Так зачем вам изучать MySQL, MySQL — самая популярная база данных с открытым исходным кодом и, конечно же, Postgres.

    SQL определенно там.

    По мере того, как компании перемещают свои данные из локальной среды в облако, они обычно предпочитают мигрировать в собственную облачную базу данных или базу данных с открытым исходным кодом, такую ​​как продолжение MySQL или Postgres, чтобы сократить расходы.

    Допустим, вы являетесь экспертом по базам данных Oracle.

    Если вы получите знания о таких базах данных, как MySQL, вы сможете помочь компаниям перенести свои данные с Oracle на MySQL, и это может быть очень ценным.

    Теперь давайте посмотрим, что рассматривается в этом курсе.

    Теперь, прежде всего, под MySQL я имею в виду механизм хранения MySQL InnoDB на протяжении всего курса, который используется на любом коммерческом веб-сайте, в банке, финансовом учреждении и так далее.

    И MySQL предлагает различные механизмы хранения, мой Сэм, механизм хранения в памяти или некоторые популярные механизмы хранения, которые доступны, мы собираемся узнать о MySQL InnoDB, я не рассматриваю другие типы механизмов хранения.

    Вот темы, которые я собираюсь раскрыть в этом курсе.

    Обратите внимание, что это курс по администрированию баз данных.

    Итак, 80% администрирования базы данных.

    А для тех, кто совсем не знаком с базами данных, я включил основы SQL.

    Итак, вы узнаете об установке базы данных, MySQL Workbench, индексах базы данных, журналах базы данных, вы также узнаете немного о настройке производительности, то есть объяснении SQL.

    Вот несколько интересных тем, которые я собираюсь затронуть.

    Итак, что вам нужно, чтобы начать изучение этого курса: ПК или Mac.

    Итак, если вы используете ПК, я рекомендую вам внимательно изучить рабочие листы или дополнительные материалы, прилагаемые к описанию.

    Если у вас есть ноутбук Mac, то вы лучше всего подходите для изучения этого курса.

    Потому что тогда вы сможете видеть, что я печатаю.

    И вы можете просто набирать те же самые команды и просто следовать им от начала до конца.

    И, прежде всего, это главное требование, я хочу, чтобы вы создали учетную запись AWS, это правильно и удивительно для учетной записи веб-сервисов.

    Итак, если вы не понимаете, о чем я говорю, пожалуйста, загляните в мой рабочий лист, который можно найти в описании, я прикрепил некоторые ресурсы, которые покажут вам, как создать учетную запись AWS, я использовать два экземпляра AWS EC на протяжении всего курса.

    И я покажу вам, как его создать.

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

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

    И, пожалуйста, помните, что вам не обязательно поддерживать работу двух инстансов EC 24/7.

    Итак, как только вы создадите учетную запись AWS и войдете в нее, вы попадете на эту панель управления или на эту страницу.

    И вы можете перейти в меню услуг прямо здесь.

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

    И здесь мы собираемся создать экземпляр, который будет нашей лабораторной средой.

    Итак, нажмите на запуск экземпляра.

    Затем выберем изображение для нашего экземпляра.

    Итак, я выберу Red Hat Enterprise Linux 864-разрядной версии, а тип моего экземпляра будет T two micro, который подходит для уровня бесплатного пользования.

    И вам нужно выбрать соответствующую подсеть.

    Если вы только что создали учетную запись AWS, вы можете просто выйти.

    Оставьте любую подсеть по умолчанию, которая отображается для вас.

    Что касается меня, я выберу меня Будь конкретным.

    Затем обязательно включите эту опцию автоматического назначения общедоступного IP-адреса.

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

    И давайте выделим 25 гигов для базы данных или для всего экземпляра.

    А можно просто оставить остальные ИСИС, перейти на следующую страницу читать, можно создать тег для своего экземпляра.

    Итак, я назову его экземпляром SQL.

    Один, перейдите на страницу группы безопасности.

    И тут важно то, что вам нужно иметь возможность подключиться к экземпляру по SSH.

    И вам нужно, вам нужно создать надлежащие правила брандмауэра, чтобы любой человек в мире мог войти в этот экземпляр через порт 22.

    И это совсем не безопасно.

    А я позабочусь об этом экземпляре.

    Потому что, как только я заканчиваю запись, я обычно удаляю ее.

    Так что я знаю, как с этим справиться.

    Но когда вы создаете правила, не забудьте указать IP-адрес вашего ноутбука, чтобы он был более безопасным, и теперь вы можете просмотреть свою конфигурацию, а затем нажать кнопку запуска.

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

    Затем загрузите его перед созданием экземпляра.

    Я просто выберу существующую пару ключей.

    Может быть, этот, а я говорю знание, может быть, другой.

    Хорошо, вот этот.

    И запустить экземпляр.

    Теперь ваш экземпляр создается, возможно, создание этого экземпляра займет пару минут.

    Хорошо, вот как вы создаете два экземпляра EC.

    И теперь, когда мой экземпляр запущен и работает, я могу видеть общедоступный IP-адрес.

    Позже я установлю MySQL на этот экземпляр.

    Вот что я хотел показать вам на этом уроке.

    Итак, то, что вы видите, — это в основном моя дополнительная документация, показывающая все эти различные руководства по установке, такие как Windows и Mac, и так далее.

    Итак, нас интересует установка Linux, в основном это установка MySQL на Linux.

    На самом деле есть пара руководств.

    Итак, это в основном установка двоичного файла jannettek, мы собираемся пропустить это и перейти сюда.

    И даже при установке MySQL в Linux есть куча руководств.

    Таким образом, рекомендуемый метод установки — использование пакетов RPM от Oracle.

    Но мы собираемся использовать эту установку на базе репозитория MySQL yum.

    На самом деле это довольно просто.

    Итак, для этой установки нам нужно перейти на MySQL comm и downloads.

    А мы качаем Community Edition и заходим в репозиторий yum.

    Как вы знаете, на созданном нами экземпляре работают Archie l 8, Red Hat, Enterprise Linux 8.

    И так нам нужно скачать этот rpm.

    Но тогда нам нужно скачать RPM на сам инстанс, тот который мы создали.

    Итак, давайте действительно войдем в экземпляр.

    Итак, я буду использовать SSH, а мы будем использовать мой закрытый ключ.

    И ведение журнала легко: пользователь выбирает пользователя по умолчанию и в основном получает общедоступный IP-адрес входа в мой экземпляр, и мы переключаемся на root, все в порядке.

    Итак, для загрузки этого RPM в этот экземпляр Linux нам нужна команда W get package.

    Итак, давайте сначала установим это.

    Итак, теперь, когда wgate установлен, нам нужно загрузить RPM, который мы только что видели.

    Итак, чтобы получить ссылку на этот RPM, нам нужно перейти к этой загрузке.

    И мы должны щелкнуть правой кнопкой мыши здесь и скопировать ссылку.

    И если вы устанавливаете на другой OSS, вам нужно нажать на соответствующую кнопку.

    Итак, мы получили ссылку, и давайте просто вставим ее сюда, например, w get и ссылку.

    И эта команда загружает этот пакет, теперь мы собираемся использовать команду RPM для установки этого пакета.

    Итак, этот пакет, как я упоминал ранее, добавит репозиторий MySQL yum в список репозиториев вашей локальной системы.

    При установке Red Hat Enterprise Linux по умолчанию вы получаете модуль MySQL.

    Итак, давайте отключим его.

    Если вы не отключите его, это помешает нашей установке MySQL.

    Итак, давайте отключим его с помощью этой команды.

    И не беспокойтесь о написании этих команд, я поставлю ссылку на свой репозиторий Git со всеми этими комментариями в описании.

    Итак, все это отключено.

    Теперь давайте продолжим и установим MySQL Community Server Edition, используя yum install MySQL Community Server.

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

    И это установка всех этих пакетов.

    Итак, мой SQL установлен.

    Давайте продолжим и запустим базу данных MySQL, используя системный CTL.

    Команда.

    И давайте проверим статус.

    Итак, моя база данных SQL запущена и работает.

    Итак, файл журнала этой базы данных MySQL находится в журнале var.

    И затем, если вы возьмете temp из этого файла журнала, вы получите временный пароль для пользователя root.

    И вы можете использовать это для входа в базу данных MySQL.

    И как вы входите в систему, вы используете эту команду, мое продолжение минус u, это будет root, а минус P для входа на основе пароля.

    А затем мы входим в базу данных MySQL.

    Итак, давайте воспользуемся этим паролем и посмотрим, входит ли он в систему.

    И мы вошли.

    И если вы запустите любую команду в этот момент, мое продолжение попросит вас сбросить пароль, используя оператор alter user.

    Мы можем сделать это по-другому.

    Итак, есть исполняемый файл MySQL admin.

    И это команда для него.

    Администратор MySQL, минус ваше имя пользователя и минус p пароль.

    Мы собираемся сбросить пароль пользователя root.

    И давайте сначала предоставим текущий пароль, который является временным паролем.

    И давайте новый пароль №

    Хорошо, пароль принят.

    Теперь позвольте мне попробовать войти в систему с этим новым паролем, используя предыдущую команду my SQL минус u proof и минус p MySQL.

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

    Итак, давайте продолжим и запустим простую команду show databases, которая покажет все базы данных по умолчанию, которые входят в состав установки.

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

    Итак, если я выберу звездочку, которая по сути представляет собой запрос SQL для чтения из этой таблицы, вы увидите, что таблица сейчас пуста.

    Итак, давайте выйдем и запустим другую команду.

    Для загрузки данных, связанных с часовым поясом.

    Итак, это команда.

    И давайте запустим его.

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

    Вернемся к нашей базе данных MySQL.

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

    Итак, теперь все в порядке.

    На этом установка базы данных MySQL завершена.

    Итак, ребята, в этом разделе мы поговорим о моделировании данных.

    Итак, проектирование баз данных, моделирование данных, проектирование схем — все это взаимозаменяемые слова, термины для проектирования баз данных — это непрерывный процесс.

    Итак, вы придумываете базовый дизайн, когда создаете свое приложение.

    А затем, когда в приложение добавляются новые функции, усовершенствования, усовершенствования, вы в основном повторяете этот дизайн, правильно, вы продолжаете добавлять новые элементы в свой дизайн и так далее.

    Итак, первое, что вы делаете, занимаясь проектированием базы данных или моделированием данных, — это понимаете бизнес-данные.

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

    Что я имею в виду? Ну, в основном, вы должны спроектировать свои таблицы, столбцы, которые входят в эти таблицы, индексы, ограничения, такие как ограничение первичного ключа, ограничение уникального ключа, ненулевые ограничения, значения по умолчанию, внешние ключи, все это различные вещи, которые вы нужно создать.

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

    И затем вы начинаете устранять его, фактически нормализуя свои таблицы.

    И это потому, что избыточность данных вызывает аномалии данных.

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

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

    И это создает подобную аномалию данных. Несоответствие данных на самом деле происходит по тому же принципу.

    И все это происходит из-за избыточности данных.

    То, на что мы смотрим, — это, по сути, электронная таблица, а электронная таблица — это, по сути, огромная таблица, большая таблица, верно? И то, что мы собираемся сделать, это в основном разработать таблицу для веб-сайта электронной коммерции, веб-сайт электронной коммерции в основном похож на удивительную зону, или E Bay, или что-то еще, например, онлайн-бизнес, например, веб-сайт электронной коммерции, например, Alibaba. , или как там, верно? Допустим, у вас есть только одна таблица в этой базе данных, верно? И вы начинаете, когда приходят заказы через этот веб-сайт, вы начинаете заносить данные в эту таблицу, верно? У вас есть, вы знаете, давайте посмотрим на некоторые вещи, которые вы будете записывать в эту таблицу, правильно, вам, очевидно, нужно, например, подсчет ваших заказов.

    Итак, вы можете пронумеровать свои заказы, а затем, как они будут поступать, вы знаете, настольные или мобильные? Или что это за продукт? Например, вы знаете, здесь у меня есть пара книг, названия книг, а затем цены на продукты.

    А потом, кто является клиентом детали клиентов, платежные реквизиты, сведения о доставке и так далее.

    Так что все это, по сути, часть слова электронной коммерции.

    Верно? И у вас есть один гигантский стол.

    А если посмотреть на данные здесь, верно? Итак, вы знаете, здесь у меня есть пара клиентов, которые покупают, вы знаете, что-то вроде двух разных продуктов, верно.

    Итак, вы видите, что данные повторяются.

    Я имею в виду, что каждый раз, когда я покупаю один и тот же продукт, я должен повторять эти данные, например, первый заказ, который пришел, был через веб-сайт, который был создан при рождении, и тогда вы можете увидеть все детали. этого клиента и все подробности о продукте и платеже, а также платежные реквизиты.

    Потом пришел второй заказ от другого человека, но тогда это был заказ на тот же товар и нужно было повторить информацию о товаре.

    Правильно.

    Третий был от предыдущего клиента.

    Но на этот раз он купил другой продукт, его информация, информация о покупателе фактически повторяется.

    Таким образом, существует много избыточных данных, которые повторяются.

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

    На самом деле, это денормализованная версия вашей базы данных, давайте посмотрим, что еще вы могли бы сделать.

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

    А здесь у меня только информация о клиенте.

    И я начал присваивать идентификационный номер каждому идентификатору клиента или номеру клиента, как бы вы это ни называли.

    Когда я извлекаю информацию о клиенте, у меня есть таблица Orders, исходная таблица, я вызываю таблицу Orders, которая теперь выглядит так, верно? И вы можете видеть, что у меня есть столбец с идентификатором клиента.

    И что это за столбец ID клиента? Ваши предположения? Верно? Итак, этот столбец с идентификатором клиента такой же, как и здесь.

    Верно? Итак, почему у меня это есть, потому что мне нужен способ связать эти строки.

    Как вы понимаете, ну, знаете, это столбцы, это строки, эти строки, мне нужна связь с покупателем, верно? Если я удалю информацию о клиенте, то как я могу относиться? Вы знаете, этот стол и тот стол? Это через общую колонку или группу колонок.

    На самом деле, в данном случае это всего лишь один столбец.

    Итак, идентификатор клиента, верно? Я просто поставлю идентификационный номер здесь.

    А что еще собственно мы можем вынести из этой таблицы.

    Итак, это один уровень нормализации.

    Верно? Итак, давайте продолжим нормализовать, что похоже на удаление сведений о продукте.

    Верно? Таким образом, детали продукта также повторяются.

    Так что здесь особой боли не чувствуешь, потому что в этой таблице всего три записи.

    Что если в таблице миллион записей, верно? Вот почему нам нужно нормализовать таблицу.

    Теперь вы действительно берете информацию о продукте и перемещаете ее в другую таблицу.

    И затем у меня есть столбец идентификатора продукта только для нумерации, например, идентификатор продукта на самом деле, и ваша таблица заказов будет выглядеть так, а затем вы переносите платежную информацию в другую таблицу.

    И тогда ваша таблица заказов будет выглядеть так.

    В основном это процесс перехода от денормализованной схемы или базы данных к нормализованной базе данных.

    Когда у вас есть данные в одной таблице, вам не нужно делать никаких соединений.

    Итак, вы можете спросить, что такое соединения на самом деле, когда вы выполняете запросы, например, используя SQL, SQL — это язык, верно? Язык структурированных запросов, когда вы запускаете команды в своей базе данных, вы можете получить все свои данные из этой одной таблицы, если ваша табличная база данных полностью денормализована.

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

    Итак, это называется объединением таблиц.

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

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

    Вы говорите, что мне нужны эти данные, и эти данные доступны в этой таблице.

    Так что все очень просто.

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

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

    И затем Хорошо, я беру результирующий набор из этой таблицы и должен соединиться с этими другими таблицами.

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

    Правильно.

    Благодаря этому производительность будет достаточно гибкой.

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

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

    Итак, но в целом так оно и происходит, когда вы проходите этот процесс проектирования, понимаете, посмотрите, что мы на самом деле сделали, верно.

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

    И не только это для каждой таблицы, вам нужно решить, что будет первичным ключом.

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

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

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

    И тогда вам также нужно иметь какие-то уникальные ключи, верно.

    Таким образом, уникальные ключи очень похожи на первичные ключи.

    И теперь уникальный ключ может быть первичным ключом, как я уже упоминал.

    И тогда у вас также могут быть индексы на вашей таблице.

    Итак, индексы — это способ ускорить выбор дневных данных.

    Допустим, я часто ищу эту таблицу на основе электронной почты клиента, тогда мне нужен индекс в столбце электронной почты клиента, верно, вам нужно решить это.

    И вам нужно решить, какие столбцы могут быть нулевыми.

    Верно? Здесь ни один из столбцов не может быть нулевым.

    Допустим, у вас есть еще один столбец, называемый предпочтениями клиентов, например, какой вид доставки или какой номер телефона предпочтительнее, или что-то в этом роде.

    Значит, это может быть нулевой столбец, верно? Таким образом, у вас может не быть столбцов.

    В противном случае вы определяете свои столбцы как ненулевые.

    Допустим, в таблице «Заказы» у вас есть столбец «Доставлено», когда заказ в основном создается, когда клиент покупает продукт на вашем веб-сайте.

    Конечно, доставляется не сразу, на момент создания заказа столбец доставлено всегда будет иметь значение no или n, a n, верно? Все эти вещи, все эти решения, которые мы принимаем, о которых мы говорим, являются частью дизайна схемы.

    И как только вы все это выяснили, вы можете поместить информацию в свой инструмент проектирования Entity Relationship tool.

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

    И это в основном то, что вы называете диаграммой ER.

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

    Так что на самом деле это отношение один ко многим, верно.

    Но один, знаете ли, один заказ может сделать только один покупатель.

    Верно? Итак, в этом роде.

    Итак, у вас есть отношение один к одному, отношение один ко многим или отношение многие ко многим между таблицами.

    На самом деле все это часть моделирования данных.

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

    И попутно вам нужно определить тип данных ваших столбцов.

    На самом деле, это очень важно.

    Ваши имена будут дикими символами.

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

    И ваш столбец идентификатора или числовые столбцы будут целыми или числовыми.

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

    И как атомарность, как и у вас, у вас есть все адреса, вроде как атрибуты, упакованные в один столбец, нам, нам нужно разделить и это.

    Итак, это называется атомарностью.

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

    Такого рода вещи, есть нюансы, которые делают вашу базу данных все более и более эффективной.

    И, конечно же, мы не будем вдаваться в подробности.

    Но это базовое моделирование данных, которое вам нужно понять.

    И, как я уже говорил, в следующем разделе я покажу вам, как взять это, а затем ввести это на моем верстаке сиквела.

    Краткий обзор того, что я сделал в предыдущем разделе, я в основном создал логический дизайн веб-сайта электронной коммерции.

    Итак, вы видите таблицу, с которой я начал.

    Это денормализованная таблица, и мы взяли эту денормализованную таблицу и нормализовали ее.

    Как видите, существует четыре версии этой таблицы, я называю эту таблицу таблицей заказов.

    Итак, существует четыре разных версии.

    А я с каждой итерацией вынимал повторяющиеся данные.

    Итак, наконец, мы получили четыре таблицы, кроме исходной таблицы Orders.

    Итак, теперь у нас есть продукты и оплата для клиентов.

    В этом видео я возьму сейчас все конюшни, а потом возьму структуру и создам логический дизайн.

    Итак, давайте на самом деле перейдем к MySQL Workbench, и я уже подключен к базе данных, что я собираюсь сделать, так это перейти к файлу и перейти к новым моделям.

    , так что здесь мы можем добавить новую диаграмму ER, диаграмму отношений сущностей.

    Назовем эту базу данных eecom.

    Магазин, что-то в этом роде.

    Итак, давайте приступим к созданию наших таблиц.

    Теперь я не собираюсь создавать все четыре таблицы, что, возможно, заняло бы больше времени или дольше, и я собираюсь создать пару таблиц.

    И этого должно быть достаточно, чтобы вы поняли, как мы это делаем.

    Итак, давайте начнем с таблицы Customers.

    Итак, таблица клиентов имеет пять столбцов, это значок для создания новой таблицы, вы можете перетащить, или вы можете попробовать нарисовать сейчас двойной щелчок, а затем создать таблицу с именем клиент, и здесь мы можем начать помещать таблицу столбец имен клиентов ID, а затем он будет заполнен вашей последовательностью.

    Таким образом, последовательность является объектом базы данных.

    И это будет целое число.

    Так что можно оставить как есть.

    И мы можем использовать его как первичный ключ, это нормально, и первичный ключ должен быть заполнен, сейчас это невозможно.

    Так что выбирается автоматически.

    Следующим является имя клиента, мы могли бы разделить его на имя, а затем мы можем выбрать «смотреть наш» и, возможно, дать немного больше места, например, в длине имени, а затем фамилии, я могу посмотреть 100, а затем все это не может быть сейчас, поэтому мы можем выбрать ненулевое ограничение.

    Доступны различные ограничения.

    Давайте продолжим со следующим адресом снова адрес.

    И если вы помните, я говорил об атомарности.

    Итак, вы хотите, чтобы ваши столбцы были атомарными, в том смысле, что здесь в основном весь адрес упакован в один столбец.

    Хорошей практикой является фактически разделить это на атомарные столбцы как адрес отдельно, город отдельно, отдельно, а затем отдельно почтовый индекс.

    Так у нас есть все это, конечно, ничего из этого сейчас быть не может и что там еще? Таким образом, номер телефона клиента, номер телефона будет состоять только из цифр.

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

    Так что я могу просто сказать идентификатор электронной почты 100 Хорошо, не нуль.

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

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

    Итак, я собираюсь сделать идентификатор электронной почты уникальным для каждой записи здесь.

    А может и номер телефона.

    Итак, это все уникальные ключевые ограничения или уникальные ограничения.

    Вот и все.

    Итак, мы создали таблицу Customers.

    Итак, давайте вернемся и посмотрим, что еще у нас есть.

    Итак, давайте теперь создадим, я бы сказал, продукт.

    Затем вы делаете то же самое, выбираете для создания новой таблицы.

    А теперь вот, вы можете просто нарисовать вот это, я назову это продуктом.

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

    Если вам интересно, это тот же столбец идентификатора клиента, который мы добавили здесь.

    Через минуту мы сделаем это внешним ключом.

    Итак, давайте разделим это на несколько столбцов.

    Потому что, опять же, все упаковано в один столбец, что не очень хорошо.

    Итак, давайте назовем это номером кредитной карты.

    Если клиент использует PayPal, нам нужен этот адрес электронной почты.

    Так что можете использовать адрес электронной почты здесь.

    Так что это может быть null или не null в зависимости от того, какой тип платежа используется.

    Так что все в порядке, поэтому срок годности будет столбцом даты.

    Итак, давайте изменим это.

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

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

    Итак, давайте сделаем этот идентификатор клиента внешним ключом.

    Таким образом, мы можем просто назвать его идентификатором клиента, внешним ключом один.

    И затем таблица, на которую будут ссылаться, — это клиенты.

    И столбец будет идентификатором клиента.

    И все.

    Итак, вы можете видеть, что теперь у нас есть соединение или отношение между этими двумя таблицами, я просто добавлю таблицу Orders.

    Я также создал таблицу Orders, которая является основной таблицей, и теперь я собираюсь создать несколько внешних ключей для заказов.

    Все сделано.

    Если вы хотите создать какие-либо индексы на этом этапе, вы можете это сделать.

    Думаю, мы закончили.

    Таким образом, мы добавили четыре таблицы в наш логический дизайн, эти четыре таблицы, затем мы создали столбцы и затем определили их типы данных.

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

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

    Хорошо, теперь давайте продолжим и создадим сценарий SQL для этой модели данных.

    Итак, вы заходите в базу данных, а затем делаете вперед инженера.

    И затем, в основном, вы предоставляете данные базы данных, где вы хотите создать это, эти таблицы являются схемой.

    Итак, это мои данные, продолжайте, переходите к следующему, вводите пароль.

    Сейчас мы подключены, мне пришлось два, три раза ввести пароль.

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

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

    И близко.

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

    Таким образом, вы даже можете зайти в свой редактор SQL, а затем вы можете начать читать свои таблицы.

    Ну вот.

    Итак, вы готовы вернуться, конечно, в нем нет данных.

    Теперь вы можете начать пользоваться своей базой данных.

    Итак, мы успешно создали базовую схему или разработали модель данных для этого веб-сайта электронной коммерции.

    Создание таблицы или команда CREATE TABLE начинается с ключевого слова CREATE TABLE, за которым следует имя таблицы и круглые скобки.

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

    И вы также можете использовать это ключевое слово автоматического увеличения, если вы хотите, чтобы значение вашего столбца увеличивалось.

    Автоматически, когда вы загружаете значения в таблицу, когда вы загружаете записи в эту таблицу, и после определения столбца у вас есть возможность указать ключи, такие как первичные ключи, уникальные ключи, внешние ключи и т. д., вы также можете указать тип механизма хранения как часть создания таблицы.

    А это очень простая таблица.

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

    И, пожалуйста, проверьте мою документацию по продолжению.

    Если вам нужна дополнительная информация о синтаксисе.

    Как уже упоминалось, я использую только целочисленные типы данных watch char, в документации MySQL показаны все эти различные типы данных, такие как числовые типы данных, даты и время, строковые типы данных, такие как те, которые я использую, и JSON пространственный.

    Итак, все они доступны в MySQL для использования.

    Итак, давайте создадим эту таблицу.

    И перед созданием таблицы я хочу запустить эту команду удаления, чтобы убедиться, что таблица не существует.

    И я собираюсь создать эту таблицу и посмотреть, была ли она создана.

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

    А потом возвращается.

    По сути, он ничего не возвращает, что означает отсутствие данных в стабильной версии.

    Вот как вы создаете таблицу, используя синтаксис CREATE TABLE.

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

    Таким образом, если вы не укажете значение для этого столбца количества в своих операторах вставки или когда вы загружаете через процедуры, загружая данные через процедуры, оно автоматически примет это значение по умолчанию.

    Вот и все.

    Увидимся, ребята, на моем следующем сеансе MySQL SQL.

    Итак, я только что сделал описание таблицы, которую я создал, и в ней есть идентификатор продукта, название продукта, тип продукта, цена и количество.

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

    И затем фактические значения столбца.

    Если вы понимаете, я на самом деле не указал значение идентификатора продукта, потому что это автоматически увеличивающийся столбец.

    Итак, давайте выполним это, и оператор вставки пройдет.

    Итак, позвольте мне также запустить оператор выбора.

    Как видите, таблица идентификаторов продуктов приняла значение один, и это произошло автоматически, идентифицируя значение один, поэтому я продолжу и зафиксирую изменение.

    А теперь давайте перейдем ко второму варианту.

    Итак, на этот раз я укажу значение для идентификатора продукта, больше ничего не изменится.

    Так что просто хочу показать вам, что это возможно.

    Итак, он проходит, а затем фиксируется.

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

    Итак, давайте перейдем к третьему варианту этого оператора вставки.

    Так что это будет почти то же самое, за исключением того, что на самом деле я просто перепрыгну некоторые значения, а затем вставлю значение 10.

    Для этого столбца идентификатора продукта я сделаю это.

    Он просматривает комментарий и снова выбирает, тогда вы можете видеть, что это тоже нормально.

    Так что да, сработало.

    Таким образом, вы можете перейти на несколько значений.

    давайте посмотрим на следующий вариант.

    Опять же, я собираюсь вставить запись в стабильную, без указания идентификатора продукта.

    Или явно здесь отсутствует столбец идентификатора продукта, и я собираюсь запустить оператор вставки и зафиксировать.

    А затем я собираюсь запустить оператор выбора.

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

    И я возьму еще один оператор вставки, и на этот раз он фактически вставляется в имя таблицы.

    И вместо ключевого слова values, указывая имена столбцов, значения и т.д., мы фактически выбираем из другой таблицы.

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

    А затем, например, этот идентификатор продукта из продуктов, три сопоставления с этим идентификатором продукта и один продукт, и название продукта из продуктов, три сопоставления с продуктом один в Прошу прощения, Название продукта и продукт один и так далее .

    Давайте запустим это и посмотрим, что произойдет.

    А потом это проходит.

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

    И в основном продуктами заполняется одна таблица.

    И тогда мы получили все данные по продуктам из трех таблиц.

    Итак, на этот раз я хочу показать вам оператор вставки.

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

    Таким образом, мы можем даже использовать синтаксис и фиксацию, а затем сделать выбор, и все будет хорошо.

    Вот несколько вариантов оператора вставки.

    Надеюсь, вы поняли, как это работает.

    Увидимся на следующем сеансе.

    Привет, мои ученики продолжения.

    Итак, в этом сеансе я собираюсь поговорить об операторах обновления и удаления.

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

    И я буду использовать свою таблицу продуктов, чтобы сделать эту демонстрацию.

    Так что быстро, если мы выберем таблицу продуктов, там сейчас две строки.

    Итак, первое обновление предназначено только для того, чтобы показать вам синтаксис обновления.

    Итак, у вас есть ключевое слово update, за которым следует имя таблицы, за которым следует ключевое слово set.

    И тогда у вас может быть столько столбцов, сколько содержит ваша таблица, но в этом случае у меня есть только один столбец, и я могу просто запустить это обновление.

    Итак, давайте добавим к нему еще одно предложение, которое является предложением where, и оно предназначено только для обновления строк, которые вы действительно хотите обновить, поэтому мы будем обновлять только строки с идентификатором продукта, равным единице.

    Итак, давайте сделаем это.

    А потом я просто приду и сделаю ВЫБОР ИЗ количество продуктов увеличилось на 50, с 299 до 349. буквальные значения, когда вы обновляете, вы знаете, это происходит постоянно.

    Или вы также можете указать формулу, или у вас могут быть функции SQL, такие как замена подстроки, длины и т. д. Вы знаете, вы можете посмотреть мою документацию по SQL, чтобы узнать, какие функции доступны в этом обновлении, например , я просто хотел показать вам синтаксис, в основном, чтобы вы знали, что, как и у вас может быть несколько, вы можете обновлять несколько строк одновременно.

    В этом случае я поставил значения один, два и три, вы знаете, вам не нужно делать по одной строке за раз или что-то в этом роде.

    Итак, когда вы используете ключевое слово end и можете сказать идентификатор продукта или что-то еще, вызовите их, а затем кучу значений, чтобы выбрать нужные строки.

    Есть и другие способы сделать это.

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

    И еще одно интересное использование — это использование оператора case. Вы знаете, вы можете сказать, что у вас есть набор операторов обновления, один для идентификатора продукта равен другому для идентификатора продукта, равного двум, а другой — для других значений идентификатора продукта.

    И вы можете объединить все это в один оператор UPDATE, используя случай, когда then и предложение или ключевое слово в основном, в этом случае, на самом деле, для идентификатора продукта, равного единице, я хочу увеличить количество на 50.

    И идентификатор продукта равен во-вторых, я хочу увеличить количество на 100 и так далее.

    Итак, у меня есть это похожее предложение WHERE, похожее на то, что я показывал вам раньше, я собираюсь запустить это, вы можете видеть, что столбцы становятся инкрементными, я не собираюсь возвращаться и проверять я Я почти уверен, что это сделано правильно.

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

    И если вы хотите удалить определенную строку, опять же, аналогично обновлению, вы можете использовать предложение where, чтобы на самом деле сузить данные, которые вы хотите удалить, это конкретное выражение, которое удаляется из имени таблицы, а затем, где имя столбца равно или значению столбца.

    Здесь может быть несколько фильтров.

    Итак, здесь у меня нет строки номер три, кажется, я ее уже удалил.

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

    Вы можете видеть, что он содержит данные о 5849 строках, я хотел также показать вам этот конкретный параметр Параметр конфигурации MySQL, чтобы в основном включать и отключать безопасные обновления.

    Итак, допустим, если ваш оператор удаления или оператор UPDATE не использует столбец первичного ключа в предложении where, вы знаете, то в основном, если вы включите этот конкретный параметр, скажем, установив этот, а затем, если вы запустите свой удалите, вы получите код ошибки 1175, это означает, а затем он говорит, что вы используете безопасный режим обновления и т. д. и т. д.

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

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

    И еще две вещи.

    На самом деле, если у вас есть огромная таблица и вы хотите удалить только несколько строк за раз, вы можете использовать ключевое слово limit, чтобы ограничить количество записей, которые удаляются оператором, вы знаете, в этом случае, поскольку я хотел удалить только 10 строк, давайте сделаем это.

    И все должно работать нормально.

    И затем, если я выберу, вы увидите разницу в количестве строк на самом деле, теперь это как 5839, прежде чем он был запущен четыре ночи.

    Таким образом, предложение LIMIT помогает вам установить минимальные уровни, вы также можете указать предложение ORDER BY.

    Он в основном сортирует данные по этим столбцам, сначала по количеству, затем по идентификатору продукта, затем удаляет верхнюю часть и/или 100 или любое другое значение, которое вы здесь указали.

    Итак, давайте сделаем это, а затем снова выберем.

    Да, Кирни, семь Д исчезли.

    Итак, первые 10 строк удалены.

    И да, это почти все.

    На самом деле это всего лишь несколько вариантов операторов обновления и удаления.

    И, конечно же, есть много касательных, в которые мы можем попасть, но я оставлю эту задачу на вас.

    Надеюсь, это было полезно.

    А если у вас есть вопросы, пишите в комментариях.

    Увидимся на следующем сеансе.

    учащихся MySQL.

    Итак, на этом занятии мы рассмотрим операторы SELECT, а не только их синтаксис. Но также, как и некоторые способы повышения производительности ваших запросов, я собираюсь использовать схему, называемую хранилищем доходов, чтобы объяснить этот оператор SELECT в самой простой форме будет выглядеть так.

    Итак, у вас есть ключевые слова Select и from, а затем после Select вы указываете список Select, который представляет собой столбцы, которые вы хотите выбрать.

    Если вы укажете звездочку или звездочку, которая фактически выбирает все столбцы столбцов из этой таблицы, а затем после ключевого слова from вы указываете имена таблиц, из которых вы хотите выбрать данные.

    Итак, если я выберу звездочку из продуктов с подчеркиванием три, она вернет все данные из таблицы продуктов с подчеркиванием три.

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

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

    Допустим, я хочу выбрать только эти столбцы.

    Поэтому я указал только эти столбцы в списке выбора.

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

    А в предложении where вы указываете все фильтры или условия, на основании которых будут отфильтровываться ваши данные.

    Итак, я здесь, включая только данные, количество которых меньше 25.

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

    И ваши запросы будут выполняться быстро, так как упорядоченные по в основном будут сортировать полученные данные на основе столбцов, которые мы указываем здесь.

    Итак, здесь я просто упорядочиваю товары по названию.

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

    Без правильного размера операция может выполняться очень медленно.

    Так что вам нужно обратить внимание и на эту конфигурацию.

    И у меня есть еще один запрос, который просто показывает вам, что это очень простой оператор SELECT.

    Опять же, в этом выборе, на самом деле, у меня есть только ключевое слово Select и функция, я использую функцию now.

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

    И, как видите, я действительно могу вызывать несколько функций в одном запросе.

    Вот и все.

    Увидимся на следующем сеансе.

    На этом занятии я буду рассказывать о соединениях SQL, давайте сразу перейдем к демонстрации, я буду использовать схему под названием eecom store.

    И я создаю таблицу сначала с именем T one с одним столбцом, имя столбца C one, и я вставляю эти два значения в эту таблицу.

    Один и два, я создаю другую таблицу с именем T два со столбцом с именем C один и снова вставляю эти два значения в таблицу D два, один и три.

    Итак, раз и два здесь и один и три здесь, мы собираемся продолжить и выполнить фиксацию, чтобы сделать мои изменения постоянными.

    Итак, я собираюсь создать эти две таблицы только для того, чтобы показать вам записи, D один имеет один и два, D два как один и три.

    Конечно, объединение — это операция, которая объединяет две таблицы.

    И у нас есть все эти разные типы суставов, мы пройдемся по одному и поймем, что они из себя представляют.

    Итак, это синтаксис, поэтому выберите список столбцов, который вы выбираете.

    Итак, мы присоединяемся к Т-1 и Т-2.

    Затем мы указываем тип соединения, которое мы делаем.

    И еще у нас есть это по ключевому слову.

    А дальше идет условие, по которому стыкуется таблица.

    Итак, я собираюсь запустить этот запрос и посмотреть, что произойдет.

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

    Вот что делает INNER JOIN.

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

    Теперь левое соединение вернет все значения из вашей левой таблицы, которая равна T.

    Итак, T one имеет значения один и два, это строки один и два, а затем T two, он вернет только совпадающие значения.

    А затем для этого значения, которое существует только в таблице T one, оно вернется, и время от времени я собираюсь изменить его на правое соединение, и, как вы могли догадаться, оно будет возвращаться полностью. Использовать из таблицы t to в местах, где нет совпадающего значения, он вернет ноль.

    Посмотрим, так ли это.

    Этого мы и ожидали.

    Итак, мы получили все строки из T два, а затем для трех, нет совпадающего значения и T один, вы знаете, что эта позиция не имеет значения.

    Теперь быстро перейдем к союзу.

    И затем мы вернемся к полному соединению, объединение в основном будет выглядеть так.

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

    На самом деле это строки из обеих таблиц, но это как бы объединение данных, а затем их столкновение.

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

    Поставим union all а там посмотрим что будет.

    Это написано раз, два и раз, три.

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

    Возвращаясь к полному соединению, у нас нет ключевого слова полного соединения.

    Скорее всего, мы делаем полное соединение таким образом в моем продолжении.

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

    Итак, он возвращает, и теперь для трех нет соответствующего значения в T one, здесь возвращается ноль.

    Итак, это полный джойнт, то есть в основном все джойнты, все различные типы джойнтов, которые вы можете делать в MySQL, надеюсь, этот пример был понятен.

    Увидимся на моем следующем сеансе.

    Итак, мои изучающие SQL.

    В этом разделе мы узнаем о замках.

    Более конкретно, я хочу поговорить о разделе уровня изоляции.

    Итак, сначала просто посмотрите, что у меня есть, у меня есть две терминальные сессии.

    Один черный.

    Другой слегка бордового цвета.

    Итак, я собираюсь войти в базу данных как пользователь root.

    И я собираюсь сделать то же самое здесь.

    Ну вот.

    Я вошел в свою базу данных SQL.

    Итак, у меня есть небольшой скрипт для создания фиктивной таблицы с именем T one.

    Итак, позвольте мне показать вам сценарий SQL.

    На самом деле, в этот момент вы можете не понимать синтаксис SQL и так далее.

    Но тогда позвольте мне объяснить.

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

    В основном, изменения данных, которые вы делаете, постоянно сохраняются в базе данных.

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

    Если вы не отключите это, я хочу иметь больше контроля над тем, что я здесь делаю.

    В общем, я делаю автоматическую фиксацию, сначала отключаю, а потом запускаю транзакцию.

    И на всякий случай я удаляю эту таблицу, если я уже создал ее.

    Значит, этой таблицы не существует.

    Значит, там написано неизвестная таблица.

    Далее я создаю таблицу с именем T one в схеме магазина eecom.

    И тогда имя столбца C one.

    Тип данных — int и его первичный ключ.

    Итак, а затем я фактически вставляю значение, только одну строку в эту таблицу с именем p one, верно, ту, которую мы только что создали.

    И я выдаю команду фиксации, изменения или альтернативой фиксации является команда отката.

    Таким образом, при откате в основном вознаграждаются изменения, которые вы только что сделали в этом сеансе.

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

    Так что это довольно просто.

    До сих пор мы не говорили об уровнях изоляции.

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

    А это команда.

    Итак, это другой сеанс, который я открыл, показывает переменные сеанса, такие как изоляция.

    Таким образом, это показывает, что уровень изоляции транзакций настроен на чтение зафиксированных.

    Правильно.

    Так это один из возможных вариантов действий.

    Итак, это чтение зафиксировано, и вы прочитали незафиксированное чтение, и у вас есть повторное чтение или повторяемое чтение.

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

    В этом сеансе я уже начал транзакцию.

    Итак, я собираюсь попытаться обновить это значение с помощью команды обновления.

    Итак, в основном, я обновляю ту же таблицу, и я обновляю этот столбец до того места, где значение столбца в настоящее время равно единице, правильно.

    Итак, я собираюсь отключить автоматическую фиксацию.

    Так что это еще не зафиксировано для начала транзакции здесь.

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

    И если я выполню тот же запрос здесь, в этом сеансе, я увижу значение два, потому что это сеанс, в котором мы изменяем данные, верно? Итак, я могу увидеть изменения перед фиксацией в том же сеансе здесь.

    На самом деле, поскольку значение изоляции этой транзакции или уровень изоляции установлены на чтение зафиксированных, возможно только чтение зафиксированных данных.

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

    Итак, я пойду сюда и запущу фиксацию, вернусь сюда и запущу выборку.

    Итак, теперь вы видите последние данные, потому что эта фиксация произошла до того, как я выполнил этот запрос.

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

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

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

    Итак, просто отключите автоматическую команду, запустите транзакцию, удалите стабильную версию и создайте ее заново, вставьте это значение и затем запустите команду.

    Итак, теперь мы можем пойти дальше и обновить это значение до двух.

    Но помните, я еще не зафиксировал эти данные.

    Пойдем на этот сеанс.

    И здесь, продолжайте и измените параметр изоляции на чтение незафиксированного действия, потому что по умолчанию он всегда настроен на чтение зафиксированного действия.

    Правильно.

    Так что вы можете видеть это здесь.

    Итак, это настройка уровня сеанса.

    И вы также можете изменить его на глобальном уровне.

    Но для целей этой демонстрации нам просто нужно изменить его на уровне сеанса.

    Таким образом, изоляция на уровне сеанса сначала читается как зафиксированная, затем я запускаю установленную транзакцию сеанса, уровень изоляции, считываю незафиксированную, а затем снова проверяю значение.

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

    И вы уже можете увидеть эту бета-версию, хотя здесь она еще не зафиксирована.

    Вот как работает read uncommitted.

    Таким образом, здесь не так много блокировок.

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

    Итак, это грязные чтения.

    Да, действительно.

    Итак, приступим к следующему.

    Итак, до сих пор мы видели read, commit и read Committed.

    Итак, теперь давайте перейдем к повторяемому чтению.

    Верно? Так выходи.

    Так что здесь я просто зафиксирую.

    И я перезапущу свой первоначальный скрипт, чтобы очистить таблицу.

    Итак, отбросьте таблицу, а затем заново создайте вставку, снова присвойте значение единице и затем зафиксируйте.

    Итак, таблица снова стала такой, какой она была раньше.

    Итак, позвольте мне снова войти в систему.

    Значит, это повторяемый параметр чтения, верно? Поэтому помните, что значением по умолчанию для этого параметра изоляции всегда является зафиксированное чтение.

    Итак, если я изменю его на повторяемое чтение, запись, а затем снова проверю значение, вы увидите это.

    Так и еще раз, помните, или показать переменные это команда для проверки текущего значения.

    И затем set — это команда для правильной настройки конфигурации, поэтому я помещу все эти команды в виде файла репозитория git GitHub, тогда вы сможете получить оттуда команды, а затем вы сможете попробовать их сами.

    По сути, я меняю настройку. Я меняю настройку с чтения, зафиксированного на повторяемое чтение, правильно, поэтому я собираюсь просто начать новую транзакцию здесь здесь, я собираюсь обновить это значение до двух .

    А здесь я собираюсь запустить запрос Select, который мы видели, прежде чем просто выбрать все из этой таблицы.

    И вы видите, что значение в настоящее время равно единице.

    И это логично.

    Итак, позвольте мне продолжить и выполнить фиксацию.

    И если я запустил тот же запрос, я снова вижу значение один.

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

    Затем в рамках этой транзакции фиксируются данные, которые мы видим, в других терминах совпадают, по сути, мы читаем одни и те же данные или чтение повторяется.

    Правильно.

    Итак, это третья настройка.

    И последняя - самая строгая конфигурация блокировки.

    Итак, что называется сериализуемым.

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

    Итак, мы собираемся снова войти в систему .

    И, как обычно, настройка по умолчанию — зафиксированное чтение, верно? Итак, давайте сначала проверим это, просто чтобы показать вам, а затем я собираюсь изменить его на серийный сериализуемый.

    По сути, это означает, что я собираюсь начать транзакцию.

    Итак, в первом сеансе я собираюсь запустить обновление, в основном изменив значение с одного на два.

    И здесь я собираюсь начать транзакцию и выполнить запрос к этой таблице.

    Правильно.

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

    И тогда это не база данных, базы данных MySQL, даже не позволяя этому чтению или запросу Select из другого сеанса просмотреть данные.

    Итак, это самая строгая настройка действия.

    Итак, если я сделаю фиксацию здесь, то в этом другом сеансе вы увидите, что Gradius возвращается, и он видит последнее значение, правильно.

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

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

    Но тем не менее он блокирует эту строку в базе данных и не позволяет обновлять или модифицировать эти данные.

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

    Но сейчас попробую обновить.

    И здесь.

    Я собираюсь выйти из этого сеанса, что снимет все блокировки.

    И это поможет обновлению пройти.

    И тогда я могу зафиксировать и выйти, и как вы надеетесь, это было ясно для вас, ребята.

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

    Привет, изучающие MySQL.

    Итак, добро пожаловать в этот новый раздел моего учебника по MySQL.

    Итак, в этом видео или в этом разделе мы поговорим о замках.

    Так что же это за замки? Верно? Итак, давайте подойдем к этому логически.

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

    Таким образом, вы будете вставлять данные, удалять или обновлять данные так, как хотите.

    И никто больше не пытается вмешаться или прервать вашу работу.

    К сожалению, это не так.

    В современном мире.

    Если вы думаете о загруженной базе данных электронной коммерции, такой как Amazon, то на этих веб-сайтах происходит много всего.

    Там много людей просматривают, много людей что-то покупают.

    Есть люди, которые продают вещи на этих веб-сайтах, они обновляют данные, относящиеся к их продуктам.

    То есть это параллелизм, верно? Итак, у вас есть много пользователей, пытающихся сделать что-то на этом веб-сайте одновременно, так как вы управляете этим параллелизмом, вот почему нам нужны блокировки.

    Так что, если я позволю всем одновременно работать с одними и теми же данными, возникнет путаница.

    И мы можем потерять некоторые данные.

    Итак, позвольте мне показать вам простой пример того, как это происходит.

    Итак, у меня есть таблица, таблица продуктов.

    Итак, если вы следовали моему руководству, до сих пор мы говорили об этой таблице под названием products.

    Итак, где мы храним всю информацию о продукте, правильно.

    Итак, здесь есть пара записей.

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

    Но тут я добавил количество.

    Вот такая колонка количества.

    И есть продавец и покупатель, заинтересованные в этой записи, давайте посмотрим на это, правильно, так что здесь у нас есть что-то вроде временной последовательности.

    Итак, что пытается сделать продавец этого конкретного продукта, он пытается обновить количество этого продукта до девяти единиц, он добавляет к этому продукту еще 60 единиц, то есть 40 плюс 60, что составляет 100.

    Вот что у нас есть.

    Потом приходит покупатель и смотрит на количество.

    А потом он в основном хочет заказать две или эти книги, это 100 минус 90 100 минус два, это 98, и тогда у вас есть количество 98 здесь.

    Итак, это произошло последовательно.

    Итак, нас беспокоит параллелизм, верно? параллелизм — это когда что-то происходит одновременно.

    А что если Окей, сначала приходит продавец и потом читает количество этого товара.

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

    Верно? И на 901.

    Итак, первые две операции происходят одновременно в девять или один продавец заходит он говорит я хочу обновить я хочу добавить еще 60 кол-во, типа значит у меня есть еще 60 книг с таким названием, но потом приходит покупатель и говорит хорошо, я покупаю две-три штуки из этих книг.

    Итак, но пока вы, что он видел раньше, было 40.

    Итак, 40 минус два равно 38.

    Итак, он обновляет количество 38.

    Итак, продавец обновляет на 200.

    Но тогда, из-за этого предыдущего взгляда вверх, количество обновлено до 38.

    из-за чего все это дело, вся эта операция пропадает.

    И в итоге мы получаем что-то вроде искаженных данных для этого столбца количества.

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

    учащихся MySQL.

    Итак, в этом видео мы рассмотрим, как работают блокировки таблиц.

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

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

    Так что, если вы не видели мой предыдущий материал, вернитесь и посмотрите его.

    И вернись сюда.

    Но тогда да, у вас есть четыре основных стола.

    И основная таблица, которая нас интересует, это таблица продуктов здесь.

    И в таблицу товаров я вставил пару записей.

    Это фиктивные записи.

    Итак, у меня нет внешнего интерфейса или приложения, работающего здесь.

    Итак, мы просто смотрим на базу данных, правильно.

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

    И тогда прямо сейчас количество этого количества в наличии.

    Вы знаете, для этой книги 40, не так ли? Итак, он хочет обновить это количество 200.

    А также у нас будет еще пара пользователей или покупателей, в основном один покупатель пытается купить ту же книгу, у нас будет еще один покупатель Хилл, который пытался купить другую книгу, а именно эту книгу, крошечные привычки, а затем тот же покупатель также попытается просмотреть веб-сайт, как, конечно, типа, нам придется немного представить, потому что у меня нет внешнего интерфейса, чтобы показать вам все.

    Итак, давайте посмотрим, как это происходит.

    Итак, прежде всего, вы должны знать основы, давайте на самом деле отключим автоматическую фиксацию.

    Просто так, на самом деле, у нас больше контроля над происходящим.

    И позвольте мне сделать это во всех трех открытых сессиях, и первая сессия — это сессия продавца.

    Второй сеанс покупатель один сеанс.

    И третья сессия это покупатель на сессию, в основном.

    Итак, я отключу автоматическую фиксацию, которая, по сути, является механизмом автоматической фиксации, если он включен.

    А я этого не хочу.

    Так что я его отключаю.

    Далее я хочу показать вам уровень изоляции транзакций.

    И мы говорили об этом в моем предыдущем сеансе.

    Итак, прямо сейчас это повторяемое чтение.

    И так у всех.

    Итак, мы собираемся изменить это на чтение зафиксировано, потому что чтение зафиксировано — это изоляция — правильный уровень изоляции для баз данных OLTP.

    Итак, теперь давайте начнем с первого сеанса продавца.

    Итак, три сеанса.

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

    Но мы собираемся применить агрессивный подход и зарегистрировать всю таблицу.

    Правильно.

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

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

    Таким образом, мы в основном обновляем таблицу продуктов и вычитаем количество на два, что фактически означает, что мы покупаем две книги.

    А какая там книга в книге? Где запись, где идентификатор продукта равен единице, верно? Итак, если вы помните данные, первый идентификатор продукта — это книга, давайте продолжим и запустим это обновление во втором сеансе.

    И это будет очевидно, ждать, потому что сам стол залочен на право сессией продавца, покупатель, одна сессия ждет.

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

    И мы это сделаем.

    Конечно, даже это висит или ждет.

    И это на самом деле немного безумно, не так ли.

    Так что просто продавцы пытаются обновить количество этой одной записи всего одной книгой.

    И все кипит.

    А покупатель тоже пытался купить другую книгу, он как бы сдается.

    Итак, он переходит на другой сеанс.

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

    Так что покупатель тоже сейчас расстроен.

    Итак, вы видите, насколько ограничены такие последовательности.

    Таким образом, если кто-то использует журналы таблиц, это в основном уменьшит параллелизм операций, которые могут выполняться в этой базе данных.

    Итак, это главное в этой демонстрации.

    Привет, мои ученики продолжения.

    Итак, на этом уроке мы кратко рассмотрим блокировки на уровне строк.

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

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

    Таким образом, первая сессия — это сессия продавца.

    Вторая сессия — это сессия покупателя, мы можем назвать эту сессию покупателя одной сессией.

    И третья сессия это покупатель на сессию.

    Итак, это данные.

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

    И автоматическая фиксация отключена, по сути, она отключена.

    Таким образом, пока я не зафиксирую явно, мои транзакции не будут постоянными.

    Итак, давайте начнем с продавца.

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

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

    Таким образом, это будет означать, что количество будет увеличено на 50.

    Итак, это оператор UPDATE.

    И он собирается запустить это обновление.

    И мы можем посмотреть на покупателя одного сеанса, скажем, первый покупатель пытается купить ту же книгу.

    И затем, он зайдет на веб-сайт и затем нажмет кнопку «Купить сейчас» или что-то еще, а затем переведет это заявление ОБНОВЛЕНИЯ в базу данных, выберите количество равно количеству минус один.

    Итак, уменьшая количество на единицу, это означает, что он покупает, покупает книгу.

    И, конечно же, будут другие операторы, обновляющие другие таблицы.

    Но для простоты я просто покажу вам раздел изменений в таблице продуктов.

    Итак, как вы можете видеть, это будет ждать, потому что продавец обновляет это конкретное действие строки.

    И это видно по acquittee.

    О блокировках данных, поэтому, если вы находитесь под этим greddy, конечно, вы можете изменить этот запрос в соответствии с вашими потребностями.

    Но если вы сделаете запрос, вы увидите, что есть несколько сеансов и есть столбец режима блокировки.

    А затем таблица, в которой находится база данных, в которой происходят блокировки, таблица, поэтому она дает вам много деталей.

    Итак, если вы хотите понять, что здесь происходит.

    Итак, у нас есть таблица products, а затем у нас есть ix lock, который является намерением, монопольной блокировкой самой таблицы, что означает, что транзакция вот-вот получит монопольную блокировку.

    И это на уровне таблицы, но не ведитесь на это.

    Существует также еще одна строка, указывающая на наличие уровня записи или блокировки на уровне строки.

    А, и то логирование только этих данных равно единице.

    Итак, если вы помните этот оператор UPDATE, мы используем идентификатор продукта.

    Дык а данные для которых единица, собственно, значит и product ID равен единице.

    Вот что мы здесь видим.

    И если вы видите здесь, время сеанса покупателя уже истекло, поэтому он попытается купить еще раз.

    Вот так вот, вы можете посмотреть детали блокировки в этой таблице.

    Давайте попробуем, допустим, в этот момент появится второй покупатель.

    А потом он просто пытается просмотреть ассортимент на этом сайте электронной коммерции.

    Таким образом, это будет означать запрос на выборку или запрос на чтение.

    И он, он способен на эту счастливую реакцию.

    Правильно.

    Так что проблем нет.

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

    Но они просто не могут купить эту книгу, потому что она заблокирована продавцом.

    Итак, опять истекло время ожидания.

    Итак, в этот момент второй покупатель хочет купить другую книгу, вы знаете, я не могу купить эту книгу, позвольте мне попробовать купить другую книгу, это будет переводиться, как вы знаете, ID продукта равно два, которые не блокируются продавцом.

    А потом проходит это обновление.

    И в этот момент, допустим, продавец завершил обновление инвентаря.

    И, конечно же, если вы посмотрите на данные, сейчас они будут выглядеть по-другому, потому что они были обновлены до 150. в процессе покупки книги, потому что коммит еще не произошел в приложении.

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

    На данный момент в этой таблице нет блокировок.

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

    И тогда данные действительно меняются.

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

    Таким образом, только те строки, которые регистрируются вашими транзакциями, недоступны для изменения этими другими сеансами.

    Верно Итак, другие записи, не затронутые вашими транзакциями, доступны для обновления, удаления и т.д.

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

    Итак, я просто хотел показать вам разницу между блокировками на уровне таблиц и блокировками на уровне строк.

    Итак, эта сессия и моя предыдущая сессия будут полезны для понимания этой разницы.

    Спасибо, увидимся на следующем сеансе.

    В этом сеансе мы поговорим о взаимоблокировках.

    И я просто хочу показать вам, как возникают взаимоблокировки, они действительно случаются в загруженной электронной коммерции или B.

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

    Итак, это будет очень короткая и приятная сессия.

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

    Допустим, мы работаем с таблицей продуктов, правильно.

    Итак, мы уже видели стабильную работу в моих предыдущих сессиях.

    По сути, в этой таблице содержится информация о продуктах, которые продаются, ну вы знаете, на веб-сайте электронной коммерции.

    Итак, у нас есть пара записей здесь, вы знаете, мы собираемся сначала, скажем, вы знаете, я, продавец, приходит, чтобы фактически обновить количество этого продукта, в основном, скажем, если он хочет увеличить количество by 25.

    Для этой первой книги это команда, которую он, вы знаете, будет выполнять, вы знаете, какие бы кнопки он ни нажимал, будет преобразована в команду обновления, подобную этой.

    Правильно.

    Допустим, другой человек из той же компании хочет обновить цену на эту книгу, а не на эту книгу, скажем, у нас есть другая книга, я просто использую идентификатор продукта для обновления нужного продукта, Правильно.

    Итак, у нас есть один сеанс, где продавец, один обновляет количество этого товара, у нас есть другой сеанс, где мы обновляем цену этого товара.

    И затем, если вы видите, что цены увеличились на два, скажем, на 2 доллара.

    И это нормально, правда? Итак, теперь у нас есть блокировки на уровне строк.

    Итак, этот парень держит блокировку на уровне строки в этой строке.

    И этот парень удерживает блокировку уровня строки в этой строке.

    Так что все в порядке, верно? Итак, мы оперируем двумя разными записями, двумя разными замками, независимыми друг от друга.

    Все хорошо.

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

    Опять же, на 2 доллара этой книги идентификатор продукта равен единице, какая книга, вот эта, давайте продолжим и попробуем увеличить цену.

    Выполнив эту команду, вы знаете, что он ждет блокировки ECI монопольной блокировки.

    И это недоступно, потому что этот продавец не совершил на самом деле не совершил.

    Так что давайте вернемся сюда и, и этот продавец в то же время цену, чтобы обновить цену или количество этой книги.

    Итак, два сеанса борются за один и тот же ресурс, вы знаете, мы оказались в тупиковой ситуации.

    Итак, мой сиквел был умным, достаточно умным, чтобы просто убить сессию.

    В противном случае у нас были бы две сессии, бесконечно ожидающие друг друга.

    Верно? Итак, здесь вы можете увидеть выдаваемый код ошибки, в котором говорится, что при попытке получить блокировки обнаружена взаимоблокировка, и попробуйте перезапустить эту транзакцию.

    Итак, давайте продолжим, запросим таблицу products и посмотрим, как она выглядит.

    Вы видите это, вся эта транзакция откатилась.

    Правильно.

    Откат обеих транзакций.

    Там даже этот откатился.

    Итак, я думаю, что Локка тоже убили.

    Так вот почему это прошло.

    Если вы видите, что цены выросли на 2 доллара.

    правильно

    т.к. изначально Для 1699 и 2039, а здесь 8099 и 20 для 39.

    Итак, вот как это работает.

    Это типичная тупиковая ситуация, надеюсь объяснение было понятно.

    Увидимся с вами, ребята, на моем следующем сеансе.

    Итак, мои ученики продолжения.

    Итак, на этом занятии мы поговорим о кластеризованных индексах.

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

    Итак, это тип индекса, который MySQL как бы поддерживает, знаете ли, за кулисами.

    Таким образом, в данных вашей таблицы данные, которые вы вставляете в свои таблицы или загружаете в свои таблицы, сохраняются в этих индексах.

    индексирует только то, что я подразумеваю под этим, поэтому скажем, что это индекс B-дерева, правильно, так что это индекс B-дерева.

    Итак, у вас есть продолжение, создание индекса B-дерева по мере загрузки данных в эти таблицы.

    А потом, вы знаете, в листовых узлах у вас есть фактически данные, данные, которые вы загружаете в эти таблицы, верно? При кластеризации сортировка основана на первичном ключе, который вы определяете, или, вы знаете, в этой таблице, на самом деле, поэтому, если вы не определите первичный ключ, MySQL автоматически подберет индексный ключ, не допускающий значения NULL, что значит есть, так скажем, что, на самом деле, на самом деле, давайте сразу перейдем к примеру, который я подготовил для вас, ребята.

    Итак, это мой MySQL Workbench.

    И знаете, я покажу вам определение этой таблицы.

    Так это называется продукты нижнего подчеркивания.

    По сути, это таблица продуктов, которая обычно используется в интернет-магазине.

    И если вы следили за моими уроками, это то, что я использовал, я просто изменил имя таблицы, чтобы, вы знаете, продемонстрировать эту концепцию, эту концепцию кластеризации, кластеризованного индекса.

    Итак, у вас есть все эти столбцы, и я определяю первичный ключ.

    Итак, давайте начнем с того, что я просто переключусь на базу данных с именем eecom, сохраним нашу схему под названием econ store, я собираюсь удалить эти таблицы, если они уже существуют , случайно.

    Итак, таблицы не существует, и это нормально, поэтому я собираюсь создать эту таблицу, о которой я только что говорил, под названием products.

    И тогда у этой таблицы есть первичный ключ, в первичном ключе есть идентификатор продукта.

    Таким образом, идентификатор продукта похож на целочисленный столбец.

    Значит, это автоматическое увеличение, верно? Таким образом, вам даже не нужно указывать значение для этого столбца, на самом деле, когда вы загружаете данные, поэтому вы можете просто поместить всю эту информацию и загрузить ее, и тогда все в порядке, MySQL автоматически увеличит значение этого действия столбца.

    Итак, а потом, конечно, как я уже сказал, например, есть колонка isbm, которая здесь, своего рода книга ног iasb.

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

    Какой-то буквенно-цифровой номер ISDN.

    Я буду называть это уникальным ключом или уникальным ограничением.

    Давайте продолжим и создадим конюшню и это ограничение.

    Значит успешно создан.

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

    Это то, что я написал для заполнения этой таблицы.

    И затем это успешно создано, и измените разделитель обратно на точку с запятой.

    Затем я вызову эту процедуру, которая выдаст несколько предупреждений, что меня устраивает.

    Пока данные заполняются, я в порядке.

    Таким образом, он, вероятно, сгенерирует, вы знаете, загрузит около 6000 строк в эту таблицу.

    Так что посмотрим, сколько у нас получится этого офигенного.

    Так что на самом деле загружается много данных.

    Вроде сделано.

    Итак, давайте продолжим и зафиксируем данные. Теперь, собственно, я выберу данные в этой таблице, верно? Просто выберите все данные, и вы увидите, что данные по умолчанию или данные фактически отсортированы на основе первичного ключа, который является идентификатором продукта.

    И вы видите, мы знаем, что я не указал порядок.

    Итак, вы знаете, это порядок данных по умолчанию, правильно.

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

    Правильно.

    Итак, теперь я собираюсь создать похожую таблицу, которую я тоже назову продуктами.

    Но в этом случае я не буду определять первичный ключ, у меня все равно будет уникальный ключ с именем, опять же, то же самое, вы знаете, это isbm, это уникальный ключ.

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

    Итак, давайте продолжим и создадим эту таблицу.

    Итак, эта таблица создана, я собираюсь скопировать данные из первой известной вам таблицы, куда я загрузил много данных.

    Итак, я собираюсь скопировать данные из этой таблицы в эту таблицу, правильно.

    Так просто очень просто.

    И тогда я собираюсь зафиксировать, правильно, так что это доска 6455 6455 количество строк, вставленных в эту таблицу.

    И я выберу все строки из этой таблицы.

    И вы можете видеть, что теперь данные сортируются не по идентификатору продукта, а по этому IASB.

    И это сортировка сначала по первому символу, а затем Сначала первый и второй символы совпадают, затем 010 верно.

    И это продолжается 05, а затем 090, BCD хеджирования GE, а затем после нулей, вы знаете, видите единицу, так что это в основном сортировка данных на основе IASB.

    И почему, потому что из-за отсутствия первичного ключа он выберет этот iasb и столбец, как и этот уникальный ключ индекса, не допускающий значение NULL, который основан на iasb и столбце, правильно.

    Итак, все начинается с этого, но на самом деле это ужасная, ужасная идея.

    Потому что, если вы генерируете случайные буквенно-цифровые строки для iasb.

    И, вы знаете, тогда вы не собираетесь генерировать строку в порядке возрастания или вообще в любом порядке.

    Итак, в этом случае, на самом деле, вы знаете, когда вы вставляете данные в стабильную, это B-дерево будет создано за кулисами.

    И затем мое продолжение, как и любая программа, создающая или поддерживающая эту структуру данных за кулисами, должна работать очень, очень усердно, чтобы управлять этим индексом дерева Bre B, на самом деле, правильно.

    Вот почему это ужасная идея, иметь ваш UID или какую-то буквенно-цифровую строку в качестве первичного ключа или в отсутствие первичного ключа.

    Что ж, мой сиквел будет использовать этот ключ для кластеризации.

    И снова очень плохо.

    Так что помните об этом, когда будете создавать таблицы.

    Правильно.

    Итак, наконец, я собираюсь создать еще одну таблицу с именем product three.

    А перед этим я покажу вам результат этого запроса, который в основном будет пустым или нет, нет, не возвращаются строки дорог.

    Все, что я делаю, это проверяю, действительно ли в этой базе данных находится этот индекс с именем Jen flushed index.

    Затем я проверяю таблицы InnoDB и информационную схему, которую я присоединяю к таблицам odb и индексам odb.

    И я проверяю, действительно ли этот индекс существует, верно? Сказать, что его не существует, вот где это, этот кредит, не возвращает строк, и я собираюсь создать эту таблицу, и на этот раз я даже не собираюсь создавать уникальный ключ.

    И я собираюсь сделать все эти столбцы обнуляемыми.

    Итак, я просто хочу показать вам, что происходит, когда у вас есть сценарий, в котором вы создаете таблицу со всеми столбцами, допускающими значение NULL, и без индекса первичного ключа, без уникального индекса, не допускающего значения NULL, и вы знаете. Затем я собираюсь вставить данные в этот стол.

    Снова шесть, вставлено более 400 строк, зафиксировано.

    А то я сейчас выберу из этого товара три стола.

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

    И, вы знаете, у нас нет ни одного из этих вариантов первичного ключа или уникального ключа, не допускающего значения NULL, тогда как MySQL может сортировать данные? Что он использует, так что на самом деле он использует скрытый, скрытый ключ, верно, скрытый первичный ключ.

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

    Итак, информации много.

    Надеюсь, вы нашли это полезным.

    Увидимся с вами, ребята, в моем следующем видео.

    Здравствуйте, мои изучающие SQL.

    Итак, на этом занятии я хочу научить вас основам использования объяснения или плана объяснения в MySQL.

    Хорошо, теперь давайте я просто покажу вам таблицу, с которой я буду работать, я буду работать с этой таблицей, которая называется products underscore one.

    И в названии продукта, в цене типа продукта есть какая-то сеть.

    И если продукт представляет собой книгу, к ней будет прикреплен номер интернет-провайдера.

    И еще есть столбец количества.

    Вот некоторые основные столбцы, которые вы увидите в интернет-магазине электронной коммерции.

    Итак, давайте начнем с просмотра индексов этой таблицы.

    Таким образом, это в основном имеет два индекса.

    Один из них — индекс первичного ключа, который находится в идентификаторе продукта.

    А другой индекс на IASB и столбец.

    На самом деле это уникальный индекс.

    Итак, давайте начнем с выбора простого запроса, который мы собираемся оптимизировать с помощью объяснения.

    Итак, я собираюсь использовать следующий запрос.

    Итак, я собираюсь выбрать IASB.

    И из этих продуктов подчеркните одну таблицу, где в названии продукта есть кошка.

    Итак, название продукта — кат.

    Итак, прежде чем я запущу этот запрос, я посмотрю на его объясненный план.

    И я поставлю косую черту g в конце.

    Итак, я понимаю, что мы вставим туда в читаемом формате.

    Так что, во-первых, это дает этот вывод, право, и селекторы, всего один прямой, простой выбор.

    Вот что это показывает.

    Но самое главное, что мы работаем с нашей конкретной строкой, ссылающейся на эту таблицу.

    И кроме этого, на самом деле, у вас есть все эти столбцы, а потом они все пустые прямо сейчас, как будто они не имеют особого смысла кроме этого.

    Итак, это плотный столбец, и все это означает, что он выполняет полное сканирование таблицы.

    По сути, MySQL выполняет полное сканирование таблицы, сканирует всю таблицу.

    И сколько строк, что это столько строк.

    И здесь мы используем фильтр, он получает все эти строки, а затем фильтрует вывод.

    И в основном, вы знаете, есть около 600 строк с названием продукта, равным cat, верно, так что отфильтрованный человек стареет примерно на 10%, в основном, а затем есть некоторая дополнительная информация.

    Давайте продолжим и создадим индекс для этой таблицы.

    Создать индекс называется, вы знаете, мы можем дать произвольное имя.

    И, и я собираюсь добавить продукты, одну таблицу и столбец с названием продукта, конечно.

    Это столбец, для которого я создаю индекс.

    На самом деле, давайте еще раз запустим объяснение.

    Итак, это объясненный план.

    А вот так это выглядит.

    Таким образом, вы можете видеть, что снова, это почти тот же тип вывода, но на этот раз он также показывает некоторые данные для всех этих столбцов.

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

    И, и из которых, например, это ключ или индекс, который, как вы знаете, он будет использовать, это конкретное выполнение будет использовать, и это длина ключа в байтах, на самом деле запишите количество строк который сканируется в этом ключе, который равен 589.

    И, вы знаете, поскольку это основано на индексах, мы на самом деле не фильтруем данные, а просто идем к индексу и получаем данные.

    Значит там нет фильтрации.

    Давайте создадим еще один индекс, который также включает IASB.

    И, и посмотрите, что произойдет, на самом деле, мы создадим другой индекс и дадим ему другое имя.

    Итак, давайте снова запустим план объяснения.

    Итак, теперь, опять же, возможные ключи — это эти два индекса, но он по-прежнему выбирает этот конкретный индекс, а индекс, длина ключа такая же, а затем увеличивается, и т.д., и т.п.

    Итак, никакой фильтрации не произошло, верно? Потому что мы выбираем index.

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

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

    Таким образом, вы можете использовать такой формат, как формат JSON, чтобы получить больше информации.

    Итак, как вы можете это сделать, просто указав, как формат равен JSON, и используйте это.

    Таким образом, вы получите результат в формате JSON.

    И вы можете видеть, что вы знаете, это дает вам немного больше информации, например, стоимость запроса, вы знаете, это то, сколько будет стоить мое продолжение для выполнения этого запроса.

    И это представление объема работы, которую MySQL должен выполнить, чтобы фактически выполнить этот запрос.

    Итак, стоимость этого 7690, верно.

    И опять говорит, что это возможные ключи.

    Используемый ключ — это название используемого ключа, которое здесь не приводится.

    А еще есть стоимость и по которой идет разделение стоимости.

    Итак, вы можете прочитать мою документацию по SQL по всем этим полям.

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

    И мы действительно можем форсировать этот индекс, используя этот индекс использования.

    Синтаксис или используйте ключевое слово index.

    И затем я собираюсь указать имя индекса, которое я хочу принудительно установить, а именно это.

    И когда я запустил его, на этот раз я запустил план объяснения, он показывает, что стоимость этого плана будет 109 целых двести семь десятых, знаете ли, по сравнению с предыдущим планом объяснения, где стоимость составляет всего 76.

    Вот почему мой сиквел основан на этом конкретном плане, а не на этом парне.

    Хорошо, я надеюсь, что эта сессия была полезной.

    Пример создания базы данных MySQL - Как создать базу данных MySQL и учетную запись пользователя для Drupal

    MySQL «Создание базы данных» Часто задаваемые вопросы: Можете ли вы поделиться примером того, как создать базу данных MySQL, включая (а) создание базы данных MySQL и (б) нового пользователя базы данных MySQL со всеми соответствующими разрешениями MySQL , предоставляющими для этого пользователя? ?

    Конечно.Я уже писал о том, как добавить/создать пользователя MySQL, но только что наткнулся на документацию по установке Drupal, в которой также есть хорошее описание того, как создать базу данных MySQL (для использования с Drupal), поэтому я решил включить сюда часть их документации, а также некоторые заметки о моей недавней установке Drupal и MySQL.

    1) Создайте новую базу данных MySQL

    Первая часть документа по установке Drupal относится к созданию базы данных MySQL:

    Создайте базу данных MySQL:
    
    Этот шаг необходим только в том случае, если у вас еще нет
    настройка базы данных (т.грамм. вашим хозяином). В следующих
    Например, «имя пользователя» — это пример пользователя MySQL, который
    имеет привилегии CREATE и GRANT. Используйте соответствующие
    имя пользователя для вашей системы.
    
    Во-первых, вы должны создать новую базу данных для вашего сайта Drupal.
    (здесь «databasename» — это имя новой базы данных):
    
    # mysqladmin -u имя пользователя -p создать имя базы данных
     

    Эта команда mysqladmin показывает все, что вам нужно сделать для создания базы данных Drupal. Я назвал свою базу данных Drupal drupaldb и создал базу данных, используя учетную запись пользователя MySQL root , поэтому моя команда выглядела так:

    $  mysqladmin -u root -p создать drupaldb 
     

    После этой команды я просто ввел пароль root , и база данных была создана.

    2) Создайте учетную запись пользователя MySQL для Drupal

    .

    Затем документация Drupal переходит к созданию учетной записи пользователя MySQL для вашей установки Drupal:

    MySQL запросит пароль базы данных «имя пользователя»
    а затем создайте исходные файлы базы данных. Далее вы должны
    Войдите в систему и установите права доступа к базе данных:
    
    # mysql -u имя пользователя -p
    
    Опять же, вас попросят ввести пароль базы данных «имя пользователя».
    В командной строке MySQL введите следующую команду:
    
    mysql>  GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER 
             ON имя базы данных.* 
             TO 'имя пользователя'@'localhost' ИДЕНТИФИЦИРОВАНО 'паролем'; 
    
    куда
    
          'databasename' - это имя вашей базы данных
          «[email protected]» — это имя пользователя вашей учетной записи MySQL.
          'пароль' - это пароль, необходимый для этого имени пользователя
    
    Примечание. Если у пользователя базы данных нет всех привилегий
    перечисленных выше, вы не сможете запустить Drupal.
    
    В случае успеха MySQL ответит:
    
    Запрос ОК, затронуто 0 строк
     

    Для моих целей (в моей тестовой среде) моя команда выглядела так:

    $  mysql -u корень -p 
    
    mysql>  GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER 
             ПО drupaldb.* 
             К 'drupaluser'@'localhost' 
             ОПРЕДЕЛЕН 'drupalpass'; 
     

    Восстановление резервной копии базы данных Drupal MySQL

    После выполнения этих инструкций по созданию базы данных Drupal и пользователя Drupal в MySQL мне осталось только восстановить резервную копию базы данных Drupal, которую я сделал с сервера MySQL на другом компьютере.

    Чтобы восстановить мою резервную копию, я использовал эту серию команд (с показанными комментариями):

    # войдите в mysql как пользователь root
    $  mysql -u корень -p 
    
    # указать, что я хочу использовать базу данных с именем 'drupaldb'
    mysql>  использовать drupaldb; 
    
    # "исходный" мой последний файл резервной копии базы данных, который воссоздает таблицы,
    # индексы и данные в этой базе:
    mysql>  источник my-drupal-database-backup.sql; 
     

    Команда MySQL source читает переданный ей файл и выполняет команды в этом файле. Поскольку файл my-drupal-database-backup.sql содержит вывод из дампа MySQL другой моей базы данных Drupal, эта команда восстанавливает мою базу данных Drupal на этом новом сервере.

    Сводка: Создание базы данных MySQL и пользователя MySQL

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

    • Создайте базу данных MySQL для использования с Drupal.
    • Создайте учетную запись пользователя Drupal MySQL.
    • Восстановите резервную копию базы данных Drupal из дампа MySQL на одном сервере в новую базу данных Drupal MySQL на этом сервере.

    Создание приложения базы данных CRUD для PHP и MySQL с нуля

    В этом руководстве мы узнаем, как создать очень простое приложение для работы с базой данных, используя PHP и MySQL.Это будет половина приложения CRUD, которое означает C reate, R ead, U pdate, D elete.

    Быстрым примером приложения CRUD может быть база данных сотрудников компании. Из панели управления администратор может добавить нового сотрудника ( создать ), просмотреть список сотрудников ( прочитать ), изменить зарплату сотрудника ( обновить ) или удалить уволенного сотрудника из системы ( удалить ).В этом уроке мы будем только создавать и читать записи, но если это окажется популярным, я сделаю вторую часть.

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

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

    Предпосылки
    • Базовые знания HTML - Мы будем использовать формы HTML.
    • Базовые знания PHP . Я сделаю все возможное, чтобы максимально упростить его, но вы уже должны иметь представление о том, как работают переменные и строки. Вот базовое руководство по некоторым основам.
    • Локальная среда PHP и MySQL . Щелкните ссылку, чтобы просмотреть мини-руководство по ее настройке. Вы будете использовать MAMP для установки PHP и MySQL на компьютер Windows или Apple.
    • В качестве альтернативы: вы можете использовать Vagrant для настройки LAMP в Ubuntu, если вы более продвинуты.
    • Приложение для управления базой данных . Вы можете использовать Sequel Pro на Mac и SQLYog на Windows. Это графические пользовательские интерфейсы (GUI) для просмотра содержимого вашей базы данных.
    Голы
    • Подключитесь к базе данных MySQL с PHP, используя метод PDO (объекты данных PHP).
    • Создайте сценарий установки, который создает новую базу данных и новую таблицу со структурой.
    • Добавление записей в базу данных с помощью HTML-формы и подготовленных операторов.
    • Отфильтруйте записи базы данных и распечатайте их в виде HTML-документа в виде таблицы.

    Весь код этой статьи можно найти на GitHub.

    Обновление

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

    Шаг 1. Создание внешнего интерфейса

    Для начала у нас настроен локальный хост PHP, как указано в наших предварительных требованиях. Я создал один и назвал его дБ.Дев . Давайте создадим каталог с именем public/ в корне нашего проекта. Сюда я собираюсь поместить весь мой клиентский код или страницы, доступные из Интернета.

    Chrome больше не поддерживает домены .dev localhost. Я рекомендую использовать .test вместо .dev . В этой статье в примерах будет использоваться .dev .

    Прежде чем продолжить, обязательно прочтите примечание выше.

    У нас нет настроенной базы данных или чего-то еще, но мы собираемся настроить интерфейс HTML, чтобы быть готовыми начать взаимодействие с этими данными.

    Индексная страница и части шаблона

    Наша главная/домашняя страница будет расположена по адресу index.php , поэтому создайте этот файл в вашем каталоге public/.

    общедоступный/index.php

      
    
      <голова>
        <метакодировка="utf-8" />
        
        
    
        Простое приложение базы данных
    
        
      
    
      <тело>
         

    Простое приложение базы данных

    <ул>
  • Создать — добавить пользователя
  • Читать – найти пользователя

Прямо сейчас все, что у нас есть, это базовый скелет HTML, который будет ссылаться на наши страницы создания и чтения .Вот как это выглядит:

Поскольку мы хотим, чтобы наше приложение было относительно СУХИМ (не повторяйтесь), мы собираемся разделить нашу страницу на разделы макета.

Создайте общедоступный каталог templates/ и сделайте header.php и footer.php . Вы возьмете все, начиная с тега

и выше, и поместите его в заголовок.

общедоступные/шаблоны/header.php

  

  <голова>
    <метакодировка="utf-8" />
    
    

    Простое приложение базы данных

    
  

  <тело>
     

Простое приложение базы данных

А вот и нижний колонтитул.

общедоступный/шаблоны/нижний колонтитул.php

Все, что осталось в index.php на данный момент, это ссылки на две наши другие страницы.

общедоступный/index.php

  <ул>
  
  • Создать — добавить пользователя
  • Читать — найти пользователя
  • Мы хотим включить код верхнего и нижнего колонтитула на все наши страницы переднего плана, поэтому мы будем использовать функцию включения PHP для извлечения этого кода.

    общедоступный/index.php

      
    
    <ул>
      
  • Создать — добавить пользователя
  • Читать — найти пользователя
  • Теперь интерфейс нашего индексного файла выглядит так же, как и раньше, но у нас есть повторно используемый код макета, который мы можем использовать на других наших страницах.

    Добавить новую страницу пользователя

    Теперь мы собираемся создать файл с именем create.php в нашем каталоге public/. Это будет страница, которую мы будем использовать для добавления нового пользователя в базу данных.Мы запустим файл с загруженными верхним и нижним колонтитулами.

    общедоступный/create.php

      
          

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

    общедоступный/create.php

       

    Добавить пользователя

    <метод формы="сообщение"> Вернуться домой

    Вы заметите, что для каждой записи у меня есть , и каждый имеет атрибут name и id .

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

    Итак, почему у меня есть name="firstname" , а также id="firstname" , если только id необходим, чтобы связать ввод с меткой?

    Атрибут name — это то, как PHP идентифицирует и использует входные данные, которые мы рассмотрим далее в этой статье.Поэтому атрибуты name и id необходимы, но по разным причинам.

    Прежде чем я покажу интерфейс кода create.php , давайте быстро создадим папку css/ и сделаем style.css . CSS и стиль не рассматриваются в этой статье, но я собираюсь добавить строку кода CSS, чтобы формы было легче читать.

    общедоступный/css/style.css

      этикетка {
      дисплей: блок;
      поле: 5px 0;
    }  

    Мы не указали действие формы, поэтому нажатие кнопки отправки выполнит действие на той же странице.Поскольку мы еще не написали PHP-код для обработки формы, он ничего не сделает.

    Страница запросов пользователей

    Наконец, мы собираемся создать файл read.php , который будет запрашивать список пользователей по параметру (в данном случае по местоположению) и распечатывать результаты.

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

    общедоступный/read.php

      
          

    Затем добавим маленькую форму для поиска пользователей по местоположению.

    общедоступный/read.php

      
    
         

    Поиск пользователя по местоположению

    <метод формы="сообщение"> Вернуться на главную

    Теперь у вас настроен весь интерфейсный код, и мы можем начать.Вот все, что у вас должно быть на данный момент.

      общедоступный/
    |-- CSS/
    | |-- стиль.css
    |-- шаблоны/
    | |-- заголовок.php
    | |-- нижний колонтитул.php
    |-- index.php
    |-- создать.php
    |-- read.php  

    Вот более наглядное представление этого.

    Шаг 2. Инициализация базы данных

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

    SQL (язык структурированных запросов) — это язык, используемый для связи с базой данных.

    Во-первых, давайте перейдем к базе данных. Вот страница входа в нашу базу данных.

    Ваш хост будет localhost или 127.0.0.1 , что для наших целей означает одно и то же. Имя пользователя и пароль будут root . Введя эту информацию, вы сможете войти в localhost.

    Создайте каталог с именем data/ и создайте файл с именем init.sql . Это будет наш код инициализации базы данных.

    данные/init.sql

      Тест СОЗДАНИЯ БАЗЫ ДАННЫХ;
    
      использовать тест;
    
      СОЗДАТЬ ТАБЛИЦУ пользователей (
        id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        имя VARCHAR(30) НЕ NULL,
        фамилия VARCHAR(30) НЕ NULL,
        электронная почта VARCHAR(50) НЕ NULL,
        возраст INT(3),
        расположение ВАРЧАР(50),
        дата TIMESTAMP
      );  

    SQL — это относительно простой код, поэтому, даже если вы никогда его раньше не видели, его будет легко понять.Вот что означает приведенное выше на простом английском языке:

    .

    Мы собираемся создать базу данных с именем test . Затем мы убедимся, что используем test для остальной части нашего кода. В базе данных Test мы создадим таблицу с названием пользователей с 7 полями внутри - ID , FirstName , LastName , Электронная почта , возраст , местоположение и Дата . . Рядом с каждым полем находится дополнительная информация, параметры и настройки для каждого из них.

    • INT() - это целое число . Мы указали INT(11) , что означает до 11 символов
    • AUTO_INCREMENT — это число, которое будет автоматически увеличиваться при каждой записи.
    • VARCHAR() - означает Переменный символ , это строка, которая может содержать буквы и цифры. Число внутри — это максимально допустимое количество символов.
    • TIMESTAMP — по умолчанию будет добавлено текущее время в формате YYYY-MM-DD HH:MI:SS .

    Проверка SQL-запроса

    Если вы действительно хотите увидеть, что будет делать этот код, прежде чем мы создадим установщик, вы можете вставить его в раздел Query вашей программы базы данных и Run Selection .

    Если вы это сделаете, вы увидите, что теперь у меня есть база данных test , таблица пользователей и вся структура базы данных.

    Итак, мы знаем, что наш SQL работает правильно и не содержит ошибок.Если вы это сделали, удалите базу данных, потому что мы собираемся начать все сначала и сделать это через скрипт.

    Использование PDO для подключения к базе данных

    Мы собираемся использовать PDO (объекты данных PHP) для подключения к базе данных. Другой основной вариант — MySQLi. Критическая разница между ними заключается в том, что вы можете использовать PDO для подключения к любому количеству баз данных, а код mysqli будет работать только с MySQL. Хотя мы используем базу данных MySQL, PDO более расширяем в будущем и, как правило, является предпочтительным выбором для новых проектов.Итак, давайте создадим эту связь.

    Создайте файл с именем install.php в корне вашего каталога.

    Мы создадим новый объект PDO() и поместим его в переменную с именем $connection .

    install.php

    Объект PDO запросит четыре параметра:

    • DSN (имя источника данных), которое включает тип базы данных, имя хоста, имя базы данных (необязательно)
    • Имя пользователя для подключения к хосту
    • Пароль для подключения к хосту
    • Дополнительные опции

    установить.PHP

      $connection = новый PDO(имя источника данных, имя пользователя, пароль, опции);  

    Вот как это выглядит после того, как мы заполним все параметры.

    install.php

      новый PDO("mysql:host=localhost", "root", "root",
      множество(
          PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
      );
    );  

    Теперь мы немного организуем это, поместив всю информацию о нашей базе данных в переменные.

    install.php

      $connection = новый PDO("mysql:host=$host", $username, $password, $options);  

    Создадим конфиг .php , который содержит все переменные, на которые мы можем ссылаться.

    config.php

       PDO::ERRMODE_EXCEPTION
                  );  

    Вот что у нас есть в нашем установщике на данный момент. Мы извлекаем переменные базы данных через config.php , используя require , что похоже на include , за исключением того, что мы явно указываем, что файл необходим для запуска скрипта.

    install.php

      требуется "config.php";
    
    $connection = новый PDO("mysql:host=$host", $username, $password, $options);  

    Теперь пришло время использовать тот код SQL, который мы создали ранее. Мы поместим содержимое файла data/init.sql в переменную с помощью функции file_get_contents() и выполним его с помощью функции exec() .

      $sql = file_get_contents("data/init.sql");
    $connection->exec($sql);  

    На этом этапе мы собираемся использовать исключения, чтобы попытаться запустить сценарий и отловить ошибки.Мы сделаем это, поместив весь наш код в блок try/catch , который выглядит так:

    Давайте поместим код нашей базы данных в блок try и покажем наше сообщение об ошибке PDOException , если что-то пойдет не так при попытке настроить базу данных. Вот окончательный код для установщика.

    install.php

      exec($sql);
    
      echo "Пользователи базы данных и таблиц успешно созданы.";
    } поймать (PDOException $ ошибка) {
      эхо $sql. "
    " . $ошибка->getMessage(); }

    Чтобы запустить установку, просто перейдите к файлу install.php во внешнем интерфейсе.

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

    Поздравляем, вы только что создали сценарий установки для создания новой базы данных и таблицы со структурой!

    Шаг 3. Добавление нового пользователя

    Теперь мы, наконец, напишем код, чтобы эти формы что-то делали.

    В PHP при отправке формы все входные данные помещаются в массив $_POST . Таким образом, мой будет преобразован в $_POST['firstname'] для нашей работы.

    Мы вернемся к файлу public/create.php . Прямо сейчас это просто форма с верхним и нижним колонтитулами. Новый код, который мы напишем, будет добавлен в начало файла.

    Во-первых, мы сообщим этому коду, что он будет запускаться только в том случае, если форма была отправлена.

      если (isset($_POST['отправить'])) {}  

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

    Если вы заметили, в сценарии install.php я подключался только к mysql:host=$host в первом параметре (DSN). Я не указывал имя базы данных, потому что мы создавали базу данных в файле. Теперь, когда база данных (с именем test ) создана, я добавляю ее к первому параметру. $dsn установлен на mysql:host=$host;dbname=$dbname .

      если (isset($_POST['отправить'])) {
      требуют "../config.php";
    
      пытаться {
        $connection = новый PDO($dsn, $username, $password, $options);
        
    
      } поймать (PDOException $ ошибка) {
        эхо $sql. "
    " . $ошибка->getMessage(); } }

    Давайте создадим массив со всеми отправленными значениями формы.

      $new_user = массив(
      "имя" => $_POST['имя'],
      "фамилия" => $_POST['фамилия'],
      "электронная почта" => $_POST['электронная почта'],
      "возраст" => $_POST['возраст'],
      "местоположение" => $_POST['местоположение']
    );  

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

    Теперь код SQL, который мы собираемся выполнить, будет выглядеть так: INSERT INTO tablename (n) values ​​(:n) . В нашем конкретном случае это будет код ниже.

      ВСТАВИТЬ В пользователей (имя, фамилия, адрес электронной почты, возраст, местонахождение) значения (:имя, :фамилия, :адрес электронной почты, :возраст, :местоположение)  

    Мы могли бы написать этот код вручную и добавлять каждое значение каждый раз, когда мы добавляем одно, но тогда мы обновляем вещи в трех местах, и это становится проблемой.Я изучил удобный фрагмент кода от JeffreyWay из Laracasts, чтобы упростить этот процесс.

    Мы будем использовать sprintf , что позволит нам сделать следующее: ВСТАВИТЬ В значения x (y) (:z) .

      $sql = спринтf(
        "ВСТАВИТЬ В %s (%s) значения (%s)",
        "пользователи",
        взорвать(", ", array_keys($new_user)),
        ":" . взорвать(", :", array_keys($new_user))
    );  

    Этот код выведет одно и то же, без необходимости писать его несколько раз.Теперь мы просто подготовим и выполним код.

      $statement = $connection->prepare($sql);
    $оператор->выполнить($new_user);  

    Вот полный код внутри нашего блока try .

      $connection = новый PDO($dsn, $username, $password, $options);
    
    $ новый_пользователь = массив (
      "имя" => $_POST['имя'],
      "фамилия" => $_POST['фамилия'],
      "электронная почта" => $_POST['электронная почта'],
      "возраст" => $_POST['возраст'],
      "местоположение" => $_POST['местоположение']
    );
    
    $sql = спринтф(
        "ВСТАВИТЬ В %s (%s) значения (%s)",
        "пользователи",
        взорвать(", ", array_keys($new_user)),
        ":" .взорвать(", :", array_keys($new_user))
    );
    
    $statement = $connection->prepare($sql);
    $оператор->выполнить($new_user);  

    Теперь форма готова к отправке. Я собираюсь заполнить свои данные и представить его.

    Захожу в MySQL, если все прошло хорошо, теперь я могу просмотреть свою запись в базе данных!

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

    Экранирование HTML

    Поскольку в данном случае мы собираемся вывести переменную $_POST в HTML, нам необходимо правильно преобразовать символы HTML, что поможет предотвратить атаки XSS.

    Давайте создадим новый файл с именем common.php в корне вашего проекта. Вдохновение для этой функции и имени файла пришло из учебника блога Джона по PHP. Это файл, который можно использовать для хранения функций для последующего использования. Сегодня я собираюсь использовать его только для одной функции — функции экранирования HTML.

    общий.php

       

    С помощью этой функции мы можем обернуть любую переменную функцией escape() , и объекты HTML будут защищены.

    Вернувшись в public/create.php , добавьте require "common.php"; . Теперь я просто добавлю этот оператор if под своим заголовком и над заголовком «Добавить пользователя».Он проверит, был ли отправлен $_POST и успешно ли выполнено $statement . Если это так, будет напечатано сообщение об успешном завершении, включающее имя успешно добавленного пользователя.

      
       успешно добавлено.
      

    И это все! Вот окончательный код для добавления нового пользователя.

    общедоступный/create.php

       $_POST['имя'],
          "фамилия" => $_POST['фамилия'],
          "электронная почта" => $_POST['электронная почта'],
          "возраст" => $_POST['возраст'],
          "местоположение" => $_POST['местоположение']
        );
    
        $sql = спринтф(
    "ВСТАВИТЬ В %s (%s) значения (%s)",
    "пользователи",
    взорвать(", ", array_keys($new_user)),
    ":" .взорвать(", :", array_keys($new_user))
        );
    
        $statement = $connection->prepare($sql);
        $оператор->выполнить($new_user);
      } поймать (PDOException $ ошибка) {
        эхо $sql. "
    " . $ошибка->getMessage(); } } ?> > успешно добавлено.

    Добавить пользователя

    <метод формы="сообщение"> Вернуться домой

    Шаг 4. Просмотр и фильтрация пользователей

    Вот и последний шаг — «чтение» нашего CRUD-приложения. Мы уже создали внешний интерфейс в public/read.php .

    Очень быстро, давайте добавим небольшое количество CSS в наш файл public/css/style.css , чтобы сделать таблицы разборчивыми после их создания.

    общедоступный/css/style.css

      таблица {
      граница коллапса: коллапс;
      интервал между границами: 0;
    }
    
    тд,
    й {
      отступ: 5px;
      нижняя граница: 1px сплошная #aaa;
    }  

    Теперь мы собираемся использовать тот же require с нашей новой пользовательской страницы, а также блок try/catch для подключения к базе данных.

    общедоступный/read.php

      если (isset($_POST['отправить'])) {
      пытаться {
        требуют "../config.php";
        требуют "../common.php";
    
        $connection = новый PDO($dsn, $username, $password, $options);
            
      } поймать (PDOException $ ошибка) {
        эхо $sql. "
    " . $ошибка->getMessage(); } } ?>

    Теперь мы напишем запрос SELECT SQL. Мы собираемся выбрать все ( * ) из таблицы пользователей и отфильтровать по местоположению.

      $sql = "ВЫБРАТЬ *
      ОТ пользователей
      ГДЕ местоположение = :местоположение";  

    Затем мы поместим наш $_POST в переменную.

      $location = $_POST['location'];  

    Подготовьте, свяжите и выполните инструкцию.

      $statement = $connection->prepare($sql);
    $statement->bindParam(':location', $location, PDO::PARAM_STR);
    $оператор->выполнить();  

    Наконец, мы получим результат.

      $result = $statement->fetchAll();  

    Вот полный код подключения try .

      $connection = новый PDO($dsn, $username, $password, $options);
    
    $sql = "ВЫБЕРИТЕ *
    ОТ пользователей
    ГДЕ местоположение = :местоположение";
    
    $location = $_POST['местоположение'];
    
    $statement = $connection->prepare($sql);
    $statement->bindParam(':location', $location, PDO::PARAM_STR);
    $оператор->выполнить();
    
    $result = $statement->fetchAll();  

    Отлично, теперь у нас есть весь процесс получения отфильтрованных данных.Осталось распечатать результат.

    Вне блока подключения try/catch и под заголовком я собираюсь вставить код для таблицы.

    Мы проверим - если это POST-запрос, и если в результате нашего запроса больше 0 строк, то открываем таблицу, перебираем все результаты и закрываем таблицу. Если результатов нет, вывести сообщение.

      если (isset($_POST['отправить'])) {
        если ($result && $statement->rowCount() > 0) {
        
        foreach ($ результат как $ строка) {
        
        }
        
        } еще 	{
        
        }
        }  

    Вот окончательный код.

    общедоступный/read.php

      prepare($sql);
        $statement->bindParam(':location', $location, PDO::PARAM_STR);
        $оператор->выполнить();
    
        $result = $statement->fetchAll();
      } поймать (PDOException $ ошибка) {
        эхо $sql."
    " . $ошибка->getMessage(); } } ?> rowCount() > 0) { ?>

    Результаты

    <таблица> <й># Имя Фамилия Адрес электронной почты Возраст Местоположение Дата <тело> > Ничего не найдено для .

    Поиск пользователя по местоположению

    <метод формы="сообщение"> Вернуться на главную

    После добавления нескольких записей я могу поэкспериментировать с ним. Ввожу город.

    И просмотреть результаты.

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

    Заключение

    Теперь, когда вы научились создавать и читать записи, читайте вторую часть!

    К части 2: обновление и удаление

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

    Если бы это было приложение из реального мира, конечно, было бы больше соображений. Серверная часть должна быть защищена паролем, что означает, что вы должны создать страницу входа и пользователей-администраторов, которые будут единственными, кто имеет доступ к приложению.

    Вы также можете добавить проверку JavaScript на внешний интерфейс сайта, чтобы убедиться, что все обязательные поля заполнены и используются правильные типы символов для ввода. (Хотя проверка JavaScript важна, наиболее важной частью является то, что серверная часть, которая получает ваши данные, защищена).

    Опять же, весь код из этой статьи доступен на GitHub, если вы где-то заблудились. Если у вас есть предложения, как сделать руководство более понятным или безопасным, не стесняйтесь поделиться им! Однако имейте в виду, что это предназначено для первого взгляда на базовый код управления базой данных, а не на полноценное приложение.

    .

    Leave a Reply