Ответы на вопросы компания MindK на тему SQL

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

❏ Знаю, что такое 3-я нормальная форма.
Каждый столбец, не являющийся ключом, должен зависеть только от столбца, который является ключом

❏ Знаю, что такое view и когда их лучше применять.
Это представление или виртуальная таблица. Объект базы данных, являющийся результатом выполнения запроса к базе данных, определенного с помощью оператора SELECT, в момент обращения к представлению. Представления иногда называют «виртуальными таблицами».  Можно менять структуру данных, не затрагивая программный код, нужно лишь создать представления, аналогичные таблицам, к которым раньше обращались приложения.

❏ Знаю, что такое временная таблица и когда ее применять.

Временные таблицы используются для хранения промежуточных данных при сложных выборках из БД, например при большом количестве JOIN и UNION запросов. Созданные таблицы доступны до закрытия соединения.

❏ Знаю когда нужно применять varchar, а когда text.
TEXT имеет фиксированный максимальный размер 65535 символов. В него нельзя поместить индекс кроме полнотекстового.
VARCHAR имеет переменную максимальный размер

❏ Знаю, что такое транзакции и для чего они нужны.

BEGIN;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;

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

❏ Знаю, как работает блокировка в MyISAM и InnoDB.
MyISAM (используемом по умолчанию) реализована табличная блокировка
InnoDB построчная

❏ Понимаю, что такое trigger и знаю когда его использовать.

Триггер в MySQL — это определяемая пользователем SQL-команда, которая автоматически вызывается во время операций INSERT , DELETE или UPDATE . Код триггера связан с таблицей и уничтожается после удаления таблицы.

CREATE TRIGGER update_test AFTER INSERT ON test
FOR EACH ROW BEGIN
INSERT INTO log Set msg = 'insert', row_id = NEW.id;
END;

❏ Кодил хранимые процедуры.

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

DELIMITER //  
  
CREATE PROCEDURE `p2` ()  
LANGUAGE SQL  
DETERMINISTIC  
SQL SECURITY DEFINER  
COMMENT 'A procedure'  
BEGIN  
    SELECT 'Hello World !';  
END//  

❏ Знаю для чего нужны индексы и принцип их работы.

MySql Index – это важный и полезный инструмент, который позволяет оптимизировать выборку из базы данных. Использование индексов значительно сокращает время выполнения запроса, что позволяет быстрее получать данные.
Ощутимую разницу при использовании MySql индексов можно увидеть при работе с таблицами крупных размеров.
Индекс представляет из себя структуру, в которой хранятся значения одного или нескольких столбца[ов] таблицы и ссылок на строки, где эти значения расположены. Для хранения индексов чаще всего используются “бинарные деревья”.

❏ Знаю в чем отличие primary key, unique и index.

Типы MySql индексов:

  • PRIMARY KEY – Первичный ключ: основной ключ, который позволяет хранить свои значения как уникальные записи таблицы. Данный тип ключа должен присутствовать в таблице в единственном экземпляре. Обычно данный тип ключа определяют колонке с наименованием id.
  • UNIQUE – Уникальный ключ: Частично похож на первичный ключ, за счет того, что значения колонки таблицы должны быть уникальными (не должны повторяться) и не должны быть равны NULL.
  • Составной индекс: данный тип индекса включает в индексирование несколько полей. Данный тип индексирования обычно используется в запросах, в которых необходимо произвести выборку по нескольким полям (там где в условии WHERE встречается более одного параметра).

❏ Понимаю, что такое полнотекстовый поиск.

1. Делится текст на отдельные слова, отбрасываются короткие и служебные слова.
2. Прогоняются слова через стемминг (отсекаются окончания)
3. По словам строится индекс

❏ Знаю последовательности применения операндов LIMIT, GROUP, ORDER.

GROUP ORDER LIMIT

❏ Знаю в чем разница применения операндов WHERE и HAVING.

Основное отличие WHERE от HAVING заключается в том, что WHERE сначала выбирает строки, а затем группирует их и вычисляет агрегатные функции (таким образом, она отбирает строки для вычисления агрегатов), тогда как HAVING отбирает строки групп после группировки и вычисления агрегатных функций.

❏ Знаю в чем отличие left join, inner join, right join, full join, cross join.

❏ Знаю агрегатные функции и как их использовать.
COUNT() – количество элементов, SUM() – сумма элементов, AVG() – срденнее, MAX() – максимальное, MIN() – минимальное значение.

❏ Могу спроектировать базу данных с двумя сущностями в отношении “многие ко многим”.

table1, table2, table1_to_table2

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

CREATE USER 'non-root'@'localhost' IDENTIFIED BY '123';
GRANT [тип прав] ON [имя базы данных].[имя таблицы] TO ‘non-root’@'localhost’;
FLUSH PRIVILEGES;


Scroll Up