Разработка

Подкатегория

Кирилл Антонов
2 Просмотры · 4 лет тому назад

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


Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Текстовая версия: http://zametkinapolyah.ru/zame....tki-o-mysql/vneshnie
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Помощь проекту:
WMR: R28827266698
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Кирилл Антонов
2 Просмотры · 4 лет тому назад

В данном видео уроке мы посмотрим как установить MySQL сервер на компьютер под управлением Windows 10 и поговорим о назначении компонентов MySQL сервера и его коннекторов для взаимодействия с другими программами и приложениями.

Рубрика по базам данных: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Рубрика MySQL: http://zametkinapolyah.ru/zame....tki-o-mysql/server-m
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Помощь проекту:
WMR: R28827266698
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Кирилл Антонов
6 Просмотры · 4 лет тому назад

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

Рубрика по базам данных: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Рубрика MySQL: http://zametkinapolyah.ru/zame....tki-o-mysql/server-m
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Помощь проекту:
WMR: R28827266698
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Кирилл Антонов
5 Просмотры · 4 лет тому назад

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


Рубрика по базам данных: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Рубрика MySQL: http://zametkinapolyah.ru/zame....tki-o-mysql/server-m
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Помощь проекту:
WMR: R28827266698
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Кирилл Антонов
6 Просмотры · 4 лет тому назад

В этом видео мы поговорим о структуре папок MySQL: разберемся где хранятся файлы самого MySQL сервера и посмотрим где находятся файлы с данными или файлы баз данных MySQL сервера.

Рубрика по базам данных: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Рубрика MySQL: http://zametkinapolyah.ru/zame....tki-o-mysql/server-m
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Помощь проекту:
WMR: R28827266698
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Кирилл Антонов
1 Просмотры · 4 лет тому назад

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

Рубрика по базам данных: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Рубрика MySQL: http://zametkinapolyah.ru/zame....tki-o-mysql/server-m
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Помощь проекту:
WMR: R28827266698
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Кирилл Антонов
3 Просмотры · 4 лет тому назад

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

Рубрика по базам данных: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Рубрика MySQL: http://zametkinapolyah.ru/zame....tki-o-mysql/server-m
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Помощь проекту:
WMR: R28827266698
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Кирилл Антонов
2 Просмотры · 4 лет тому назад

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

Рубрика по базам данных: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Рубрика MySQL: http://zametkinapolyah.ru/zame....tki-o-mysql/server-m
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Помощь проекту:
WMR: R28827266698
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Кирилл Антонов
3 Просмотры · 4 лет тому назад

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

Рубрика по базам данных: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Рубрика MySQL: http://zametkinapolyah.ru/zame....tki-o-mysql/server-m
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Помощь проекту:
WMR: R28827266698
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Кирилл Антонов
2 Просмотры · 4 лет тому назад

Помощь проекту:WMR: R288272666982WMZ: Z293550531456Яндекс.Деньги: 410011531129223Рубрика SQLite на сайте: http://zametkinapolyah.ru/zame....tki-o-mysql/sqlite/П блога в ВК: https://vk.com/zametkinapolyahТематическая группа в ВК: https://vk.com/zametki_bd-- ¬ременной литерал или строка времениYYYY-MM-DDYYYY-MM-DD HH:MMYYYY-MM-DD HH:MM:SSYYYY-MM-DD HH:MM:SS.SSSYYYY-MM-DDTHH:MMYYYY-MM-DDTHH:MM:SSYYYY-MM-DDTHH:MM:SS.SSSHH:MMHH:MM:SSHH:MM:SS.SSSnowDDDDDDDDDD-- Ўаблоны даты и времени%d день мес¤ца: 01Е31%f доли секунд: SS.SSS%H час: 00Е23%j день года: 001Е366%J ёлианска¤ дата%m мес¤ц: 01Е12%M минута: 00Е59%s количество секунд с 1 ¤нвар¤ 1970 года%S секунда: 00Е59%w день недели: 0Е6 (0 Ч воскресенье)%W недел¤ года: 00Е53%Y год: 0000Е9999%% %-- ћодификаторы дл¤ работы с датой и временемNNN daysNNN hoursNNN minutesNNN.NNNN secondsNNN monthsNNN yearsstart of monthstart of yearstart of dayweekday Nunixepochlocaltimeutc-- ‘ункции дл¤ работы с датой и временемdate(Е) strftime(С%Y-%m-%dТ, Е)time(Е) strftime(С%H:%M:%SТ, Е)datetime(Е) strftime(С%Y-%m-%d %H:%M:%SТ, Е)julianday(Е) strftime(С%JТ, Е)date(timestring, modifier, modifier, ...)time(timestring, modifier, modifier, ...)datetime(timestring, modifier, modifier, ...)julianday(timestring, modifier, modifier, ...)strftime(format, timestring, modifier, modifier, ...)-- ѕримеры--¬ычисл¤ет текущую датуSELECT date('now');SELECT time('now');SELECT datetime('now');SELECT julianday('now');-- ¬ычисл¤ет последний день текущего мес¤цаdate(timestring, modifier, modifier, ...)SELECT date('now','start of month','+1 month','-1 day');-- ¬ычисл¤ет дату и врем¤ дл¤ 1092941466 секунд с 1970 годаSELECT datetime(1092941466, 'unixepoch');-- ¬ычисл¤ет дату и врем¤ дл¤ 1092941466 секунд с 1970 года и-- приводит к локальному времени.SELECT datetime(1092941466, 'unixepoch', 'localtime');-- ¬ычисл¤ет текущее UNIX-врем¤SELECT strftime('%s','now');-- ¬ычисл¤ет количество дней прошедших с подписани¤ ƒекларации-- независимости —ЎјSELECT julianday('now') - julianday('1776-07-04');-- ¬ычисл¤ет количество секунд с некоторого момент в 2004 годуSELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');-- ¬ычисл¤ет дату первого вторника окт¤бр¤ текущего годаSELECT date('now','start of year','+9 months','weekday 2');-- ¬ычисл¤ет врем¤ в секундах с начала эпохи UNIXSELECT (julianday('now') - 2440587.5)*86400.0;-- ¬озможные ошибки-- SQLite использует функцию localtime_r() из стандартной библиотеки —и. Ёта функци¤ работает правильно только дл¤ дат между 1970 и 2037 годами. -- ‘ункции работают только с датами между 0000-01-01 00:00:00 и 9999-12-31 23:59:59 (ёлианские даты с 1721059.5 по 5373484.5). ƒл¤ дат за пределами этого диапазона, результат функций неопределен.-- —тоит учитывать особенности перехода на летнее врем¤ как в конкретных странах, так и в операционных системах.-- ¬се внутренние вычислени¤ происход¤т в соответствии с √ригорианским календарем. роме того, предполагаетс¤, что каждый день продолжительностью ровно 86 400 секунд.http://sqlite.org/lang_datefunc.html

Кирилл Антонов
2 Просмотры · 4 лет тому назад

Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Кирилл Антонов
2 Просмотры · 4 лет тому назад

Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

/*
Завершающая тема видео уроков по SQL и основам баз данных на примере SQLite.


1. Пользовательские ошибки и конфилкты в SQL и их устранение в базах данных SQLite.
2. Условные выражения CASE, WHEN, THEN, ELSE в SQL на примере базы данных SQLite.
3. Рекурсивные SQL запросы в базах данных SQLite: WITH RECURSIVE clause.
4. SQL запрос EXPLAIN в базах данных SQLite.
5. Внутренние таблицы в базе данных SQLite и SQL команда ANALYZE.
6. Как изучать SQL и работу реляционных баз данных: книги, учебники и другие материалы.
7. Спасибо за просмотр!

*/

Кирилл Антонов
4 Просмотры · 4 лет тому назад

Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd


-- ON CONFLICT: пользовательские ошибки и конфилкты в SQL
-- и их устранение в базах данных SQLite

/*
1. SQL предложение ON CONFLICT не является самостоятельной командой.
2. ON CONFLICT не является частью стандарта SQL.
3. У данного предложения есть два синтаксиса.
4. Синтаксис при создании таблиц.
5. Синтаксис при манипуляции данными.
6. В базах данных SQLite предложение ON CONFLICT - это такое же
ограничение, как, скажем, UNIQUE, NOT NULL, CHECK, PRIMARY KEY и
используется ON CONFLICT как инструкция к действию для СУБД при
возникновении конликтов.
7. ON CONFLICT дает нам пять способов завершения клиентского запроса,
если этот запрос нарушает внутренние правила базы данных.
*/

/*
Не забывайте, что любая SQL операция, манипулирующая данными, за
исключением команды SELECT - это небольшая транзакция. Давайте
теперь посмотрим как может завершаться SQL запрос, породивший
конфликт в базе данных:
1. ROLLBACK:в данном случае библиотека SQLite прервет SQL запрос,
породивший конфликт, а пользователь на экране увидит предупреждение:
SQLITE_CONSTRAINT и произойдет откат транзакции.

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

3. FAIL: работает аналогично ABORT, но если вы выполняете UPDATE и
SQLite выполнила успешно 99 модификаций, а на 100 произошел
конфликт, то первые 99 изменения будут применены, а 100 и последующие
изменения выпонены никогда не будут.

4. IGNORE: просто не выполняет предложение, порождающее конфликт,
а все остальные выполняются.

5. REPLACE: один из самых неодназначных способов разрешения конфликта в
базах данных SQLite. Например, если происходит нарушение ограничения
первичного ключа или столба UNIQUE, то алгоритм REPLACE удалит
уже существующие значения, которые конфликтуют с новыми и продолжит
выполнение SQL запросов. Если происходит нарушение ограничения
NOT NULL, то данный алгоритм заменит NULL значения на значение по
умолчанию, заданное при создании таблицы, если такового нет, то
используется алгоритм ABORT. Если происходит нарушение ограничения
CHECK, то REPLACE сработает как ABORT.

*/


/*
Синтаксис заданный для команд манипуляции имеет наивысший
приоритет. А по умолчанию для разрешения конфликтов SQLite
использует алгоритм ABORT
*/

http://sqlite.org/lang_insert.html
http://sqlite.org/lang_update.html
http://sqlite.org/lang_createtable.html
http://sqlite.org/lang_transaction.html

Кирилл Антонов
2 Просмотры · 4 лет тому назад

Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd


-- Условные выражения CASE, WHEN, THEN, ELSE, END в SQL

/*
Условные выражения, состоящие из CASE, WHEN, THEN и ELSE
полезны в тех случаях, когда нужно осуществить ряд проверок и
получить конечный результат в зависимости от исхода этих
проверок. По сути, CASE является SQL оператором, а ключевые
слова WHEN и THEN позволяют задавать несколько условия для
проверки, теоретически количество этих условий может быть
бесконечным.

Выражение с оператором CASE имеют две формы записи, но в
любом случае условное выражение в SQL завершается ключевым
словом END.

*/

-- 1 вариант
CASE
WHEN первое условие
THEN первое возвращаемое значение
WHEN второе условие
THEN второе возвращаемое значение

WHEN энное условие
THEN энное возвращаемое значение
[ELSE возвращаемое значение, если условие не будет выполнено]
END

-- 2 вариант
CASE первое значение, которое хотим проверить
WHEN первое значение, с которым сравниваем
THEN первое значение, которое возвращаем
WHEN второе значение, с которым сравниваем
THEN второе значение, которое возвращаем

WHEN энное значение, с которым сравниваем
THEN энное значение, которое возвращаем
[ELSE возвращаемое значение, если условие не будет выполнено]
END

-- Для начала рассмотрим два простых примера
CREATE TABLE booltable (a,b);
INSERT INTO booltable VALUES (1,0);
SELECT * FROM booltable;

-- 1 вариант выражения CASE в SQL
SELECT
CASE WHEN a==1 THEN 'true' ELSE 'false' END as typeColA,
CASE WHEN b THEN 'true' ELSE 'false' END as typeColB
FROM booltable;

-- 2 вариант выражения CASE в SQL
SELECT
CASE a WHEN 1 THEN 'true' ELSE 'false' END AS boolA,
CASE b WHEN 1 THEN 'true' ELSE 'false' END AS boolB
FROM booltable;

Кирилл Антонов
24 Просмотры · 4 лет тому назад

Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd


-- Рекурсивные/иерархические SQL запросы в базах данных SQLite:
-- WITH RECURSIVE clause.

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

Здесь мы попробуем разобраться и с рекурсией и с
иерархическими SQL-запросами. SQLite, как и многие другие
СУБД - реляционная: база данных состоит из таблиц, таблицы
в свою очередь состоят из строк и столбцов, другими словами:
данные представлены двумерно.

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

Конечно, например, структуру крупной компании можно описать
несколькими таблицами, например, таблицы стран: Китай, Россия,
США, Англия, Япония. Далее спуститься на уровень ниже
и создать таблицы регионов для страны: Москва, Иваново,
Новосибирск, Омск. Но такой подход не всегда удобен, поскольку
не всегда известна глубина вложенности.

В 1999 году международное сообщество решило эту проблему
путем добавления в стандарт (SQL-1999) рекурсивных SQL-запросов,
хотя компания Oracle это сделала немного раньше (и по Ораклу
рекурсивные запросы называются иерархическими).


*/

http://sqlite.org/lang_with.html


/*
Общий синтаксис рекурсивных запросов в SQLite выглядит следующим
образом:

WITH [RECURSIVE] cte-table-name AS (select-stmt);

Но это не всё, рекурсивный SQL запрос состоит из двух запросов SELECT,
если эта фраза в данном случае уместна:

WITH RECURSIVE
cte-table-name AS (initial-select UNION [ALL] recursive-select)
cte-select;


2 1 cte-table-name 1 2

initial-select (не должен в себя включать ORDER BY, LIMIT, OFFSET) -
точка, откуда начинается рекурсия.

recursive-select - рекурсивный запрос, который будет вполняться
до тех пор, пока условие не будет выполнено, два верхних запроса
позволяют создать наполнить нашу импровизированную таблицу данными
cte-select - позволяет работать с данными таблицы

1-1000

WITH RECURSIVE
table1(col1) AS (
VALUES(1)
UNION ALL
SELECT col1+1 FROM table1
WHERE col1(знак меньше)1000)
SELECT col1 FROM table1;

WITH RECURSIVE
table1(col1) AS (
SELECT 1
UNION ALL
SELECT col1+1 FROM table1
LIMIT 1000
)
SELECT col1 FROM table1;
table1
col1
2

3 2 1 table1 1 2 3

-- Создадим таблицу
CREATE TABLE org(
name TEXT PRIMARY KEY,
boss TEXT REFERENCES org
);

-- наполним ее данными
INSERT INTO org VALUES('Alice',NULL);
INSERT INTO org VALUES('Bob','Alice');
INSERT INTO org VALUES('Cindy','Alice');
INSERT INTO org VALUES('Dave','Bob');
INSERT INTO org VALUES('Emma','Bob');
INSERT INTO org VALUES('Fred','Cindy');
INSERT INTO org VALUES('Gail','Cindy');

SELECT * FROM org;


-- Для лучшего понимания работы рекурсии и поиска значений
-- рекомендую вам погуглить:
-- FIFO, поиск в глубину и поиск в ширину


0|Alice
1|Bob
1|Cindy
2|Dave
2|Emma
2|Fred
2|Gail

-- поиск в глубину
WITH RECURSIVE
under_alice(name,level) AS (
VALUES('Alice',0)
UNION ALL
SELECT org.name, under_alice.level+1
FROM org JOIN under_alice ON org.boss=under_alice.name
ORDER BY 2 DESC
)
SELECT level, name FROM under_alice;


Alice
...Bob
...Cindy
......Dave
......Emma
......Fred
......Gail

WITH RECURSIVE
under_alice(name,level) AS (
VALUES('Alice',0)
UNION ALL
SELECT org.name, under_alice.level+1
FROM org JOIN under_alice ON org.boss=under_alice.name
ORDER BY 2 DESC
)
SELECT substr('..........',1,level*3) || name FROM under_alice;

Кирилл Антонов
12 Просмотры · 4 лет тому назад

Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

-- SQL запрос EXPLAIN в базах данных SQLite: оптимизация SQL запросов.


-- Эти ссылки помогут вам разобраться с оптимизацией запросов:
http://sqlite.org/lang_explain.html
http://sqlite.org/optoverview.html
http://sqlite.org/eqp.html
http://sqlite.org/queryplanner.html
http://sqlite.org/queryplanner-ng.html
http://sqlite.org/opcode.html

/*
Библиотека SQLite имеет две SQL команды, которые позволяют нам
сделать две важные вещи: посмотреть как выполняется запрос
и оценить насколько он эффективен.

Эти SQL команды стоит использовать только при отладке, но
никак не в рабочих проектах.

Команды, на самом деле очень просты: EXPLAIN и
EXPLAIN QUERY PLAN.

Информация, получаемая при помощи запросов EXPLAIN и
EXPLAIN QUERY PLAN может изменяться в зависимости от
версии SQLite.

Запрос EXPLAIN позволяет увидеть последовательность машинных
команд, которые бы совершила SQLite для выполнения того
или иного запроса.

У SQLite есть целый раздел документации, в котором
описывается особенность использования EXPLAIN QUERY PLAN,
там даже есть наглядные примеры и детальные пояснения.


*/


EXPLAIN SELECT * FROM invoices WHERE BillingCountry = "USA";


/*
addr - номер команды или инструкции, всегда начинается
с нуля

P1, P2 P3 - 32-ух битные целые числа, зачастую эти операнды
ссылаются на регистры для получения инструкций по работе
с Б-деревом.
P3 - обычно используется для хранения промежуточных
результатов.
P1 - обычно хранит в себе номер указателя текущего узла
Б-дерева или курсор.
P2 - хранит информацию, которая помогает перемещаться между
узлами дерева, обычно это узел, в который нужно перейти.
P4 - может быть как 32-ух битным целым, так и 64-ех битным
целым или 64-ех битным с плавающей точкой, BLOB или
строковым значением обычно этот операнд является указателем
на функцию сравнения данных.
P5 - значение данного операнда является флагом, который
может тем или иным образом влиять не результаты выполнения
операций (всё зависит от opcode).
opcode - это код машинной операции, которая выполняется
на том или ином шагу. Не все операции задействуют одинаковое
число операндов, а назначение некоторых операндов зависит от
выполняемой операции.

*/

-- EXPLAIN QUERY PLAN


-- для тблицы без индекса
SELECT * FROM invoices WHERE BillingCountry = "USA";
EXPLAIN QUERY PLAN SELECT * FROM invoices
WHERE BillingCountry = "USA";



-- для таблицы с индексом
SELECT * FROM invoices
WHERE BillingCountry = "USA";
EXPLAIN QUERY PLAN SELECT * FROM invoices
WHERE BillingCountry = "USA";


-- поиск по индексному столбцу
SELECT BillingCountry FROM invoices
WHERE BillingCountry = "USA";

EXPLAIN QUERY PLAN SELECT BillingCountry FROM invoices
WHERE BillingCountry = "USA";


-- поиск с группировкой
DROP INDEX i1;
SELECT max(invoicedate), BillingCountry FROM invoices
GROUP BY BillingCountry;
EXPLAIN QUERY PLAN SELECT max(invoicedate), BillingCountry
FROM invoices
GROUP BY BillingCountry;



/*

explain query plan
scan table — самый тупой поиск в базе даннных, полнотекстовый перебор значений;

search table using index — индекс в таблице существует,
но данные, которые мы ищем в него не включены;

search table using covering index — самый эффективный случай, искомые данные уже лежат в индексе;

use temp B-TREE — поиск с конструкциями типа group by,
order by, и по столбцу, в котором идет поиск, индекс не
создан, в этом случае SQLite делает примерно следующее:
выбирает все строки, которые удовлетворяют заданному
критерию, а затем строит в памяти Б-дерево, которое
использует для сортировки этих данных, всё это происходит
очень медленно. Поэтому столбцы, значения которых в часто
группируете или сортируете лучше проиндексировать.

*/

Кирилл Антонов
2 Просмотры · 4 лет тому назад

Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

-- Внутренние таблицы в базе данных SQLite и
-- SQL команда ANALYZE.


/*
Команда ANALYZE собирает статистическую информацию обо всех
индексах в базах данных SQLite для последующей оптимизации
запросов.

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

Когда вы выполняете команду ANALYZE в вашей БД создается
таблица с именем sqlite_stat1, в которой хранится вся
необходимая информация. Стоит отметить, что эта таблица
не обновляется автоматические и если данные и их структура
в вашей БД существенно изменились, то стоит повторно
выполнить SQL команду ANALYZE.

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

*/
ANALYZE dbname;
ANALYZE tablename;


.open chinook.db
.headers on
.tables
SELECT * FROM sqlite_stat1;
ANALYZE;
SELECT * FROM sqlite_stat1;
DROP TABLE sqlite_stat1;


/*
Как видим у таблицы sqlite_stat1 три столбца:
tbl – имя таблицы
idx – имя индекса
stat – последовательность целых чисел:
первое – приблизительное число строк в таблице,
второе – приблизительное среднее число строк в таблице,
которые имеют одинаковое значение в первом столбце индекса,
N-ое число – приблизительное среднее число строк в таблице,
которые имеют одинаковые значения в первых (N-1) столбцах
индекса.

У поля STAT может быть ключевое слово UNORDERED,оно означает,
что планировщик SQLite не использует этот индекс для сортировки.

*/

-- таблица SQLITE_MASTER


SELECT * FROM sqlite_master;

/*
У таблицы sqlite_master пять столбцов:
type - столбец для указания типа объекта базы данных (table,
view, trigger, index)
name - хранит в себе имя объекта базы данных
tbl_name - имя таблицы или VIEW, которое связано с данным
объектом БД
rootpage - номеров корневой страницы для таблиц и индексов.
Для VIEW, виртуальных таблиц и триггеров это поле будет
либо NULL, либо 0.
sql - это sql-запрос, который описывает объект базы данных.


*/
-- посмотреть все таблицы в БД и их структуру
SELECT * FROM sqlite_master WHERE type='table';

-- получить всю информацию о конкретной таблице
SELECT * FROM sqlite_master WHERE name='playlists';

-- увидеть имена всех таблиц в БД
SELECT name FROM sqlite_master WHERE type="table";




-- таблица SQLITE_SEQUENCE

SELECT * FROM SQLITE_SEQUENCE;

/*
Эта таблица используется для поддержания работы ограничения
AUTOINCREMENT в базе данных SQLite.

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

Эту таблицу можно редактировать, будьте аккуратны.

*/


-- таблица SQLITE_STAT2

SELECT * FROM sqlite_stat2;

/*
В современных версиях библиотеки SQLite3 этой таблицы не
существует, но раньше она использовалась для хранения
информации о распределнии ключей в БД.

*/


-- таблица SQLITE_STAT3

SELECT * FROM sqlite_stat3;

/*
Данная внтренняя таблица SQLite появляется только в том
случае, когда библиотека собрана с параметром
SQLITE_ENABLE_STAT3 или SQLITE_ENABLE_STAT4 (у нашей
тестовой БД эти параметры отключены). Эта таблица содержит
в себе информацию о распределении ключей в пределах индекса.

У внутренней таблицы sqlite_stat3 шесть столбцов:

tbl – имя таблицы;

idx – имя индекса;

nEq – приблизительное среднее число записей в таблице,
левый столбец которых равен sample;

nLt – приблизительное среднее число записей в таблице,
левый столбец которых меньше sample;

nDlt – приблизительное среднее число разных записей в
таблице, левый столбец которых меньше sample;

sample – содержит значение крайнего левого столбца индекса;

*/

SELECT * FROM sqlite_stat3;


-- таблица SQLITE_STAT4


/*
Данная внтренняя таблица SQLite появляется только в том
случае, когда библиотека собрана с параметром
SQLITE_ENABLE_STAT4. Эта таблица содержит в себе информацию
о распределении ключей в пределах индекса.

tbl – имя таблицы;

idx – имя индекса;

nEq – список чисел, где k-ое число это приблизительное
число записей в таблице, в которых k левых столбцов,
равны k левым столбцам индекса;

nLt – список чисел, где k-ое число это приблизительное число
записей в таблице, в которых k левых столбцов, в
совокупности, меньше k левых столбцов индекса;

nDLt – список чисел, где k-ое число это приблизительное
число разных записей в таблице, в которых k левых столбцов,
в совокупности, меньше k левых столбцов индекса;

sample – содержание индекса в формате записи (record format);

SQLITE_STAT4 является обощенным вариантом SQLITE_STAT3.

*/

Кирилл Антонов
17 Просмотры · 4 лет тому назад

Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Если вы хотите быть SQL-разработчиком, администратором или архитектором баз данных:
1. Здесь можно выделить четыре основных направления.
а) теория реляионных баз данных и реляционная алгебра/алгоритмы и структуры данных/дискретная математика;
б) необохдимо изучить инструмент, который будете применять в работе (стандарты читать не надо, а вот активное
юзанье документации пойдет на пользу);
в) получение практики: повторение примеров из книг и видео уроков, разбор архитектуры БД и Query-листа приложения с открытым
исходным кодом, самостоятельный выбор любого объекта (предметной области) из нашего бренного мира и его описание, это может
быть даже дом, в котором вы живете;
г) изучение предметной области, в которой вы хотите работать.
2. Если у вас нет даже базовых знаний, то начинать нужно с простых и понятных материалов, которые не отобьют у вас желание учиться
и позволят почувствовать уверенность в своих силах и понять, что базы данных и SQL - это не так уж и сложно. Для этих целей
прекрасно подойдут материалы, которые вы сможете нагуглить или видосы с Ютуба, благо этого добра навалом.

Книги по SQL и базам данных для новичка:
«Изучаем SQL», Бейли Л.;
«SQL для простых смертных», Грабер Мартин;
«SQL за 10 минут», Бен Форта;
«Изучаем SQL», Алан Бьюли;
«Язык запросов SQL. Учебный курс», Филипп Андон, Валерий Резниченко;
«SQL For Dummies», Allen G. Taylor
«SQL-запросы для простых смертных. Практическое руководство по манипулированию данными в SQL», Майкл Дж. Хернандес, Джон Л. Вьескас;
«MySQL. Сборник рецептов», Поль Дюбуа.

Документация самых популярных СУБД:
документация SQLite: http://sqlite.org/docs.html;
документация MySQL: https://dev.mysql.com/doc/
документация PostgreSQL: https://www.postgresql.org/doc....s/9.6/static/index.h
документация PostgreSQL на русском: https://postgrespro.ru/docs/postgresql/9.6/;
документация MS SQL: https://technet.microsoft.com/....ru-ru/library/ms1302
документация Oracle: http://docs.oracle.com/cd/E11882_01/index.htm;
сюда можно добавить книги по различным СУБД, ориентированные на читателя со средней и высокой подготовкой;
и, конечно же, учебник и словарик английского языка, если вы его не знаете.

Теоретические знания: уровень Будда SQL и реляционных баз данных

Книги по теории реляционных баз данных:
«Введение в системы баз данных», Кристофер Дж. Дейт
«SQL и реляционная теория. Как грамотно писать код на SQL», Кристофер Дж. Дейт
«Основы будущих систем баз данных: Третий манифест»., Кристофер Дж. Дейт
«Базы данных и UML», Роберт Дж. Мюллер
«Теория и практика построения баз данных», Крёнке Д.
«Системы баз данных: проектирование, реализация и управление.», Питер Роб, Карлос Коронел
«Системы баз данных. Полный курс.», Гектор Гарсиа-Молина, Джеффри Ульман, Дженнифер Уидом
Книги по алгоритмам и структурам данных:
«Алгоритмы. Вводный курс», Томас Х. Кормен;
«Алгоритмы», Дасгупта С., Пападимитриу Х., Вазирани У.;
«Анализ алгоритмов. Вводный курс», Дж. Макконелл;
«Алгоритмы. Теория и практическое применение», Род Стивенс;
«Автоматное программирование», Поликарпова Н. И., Шалыто А. А.;
«Алгоритмы и структуры данных. Новая версия для Оберона», Н. Вирт;
«Алгоритмы. Построение и анализ.», Т.Кормен, Ч.Лейзерсон, Р.Ривест, К.Штайн;
Книги и учебники по дискретной математике:
«Дискретная математика для программистов», Р. Хаггарти;
«Введение в схемы, автоматы и алгоритмы», Дехтярь М. И.;
«Графы и алгоритмы», Алексеев В. Е., Таланов А. В..

Где, черт возьми, мне брать практику?

Повторяйте примеры из книг, учебников, видео.
Оглянитесь вокруг: любой предмет, который вы видите, можно описать в базе данных, например, ваш дом, жэк и его жильцы.
Ну хорошо, сделайте базу данных для КЛАДР и нормализуйте ее до улицы или сделайте базу данных всех номеров для всех провайдеров во всем мире или России (при этом учтите номера спец. служб, деление на мобильные и стационарные, да, номера еще и внутри страны делятся по регионам и есть всякие 8 800).
Мы пришли к тому, что перед проектированием БД нужно хоть чуток разбираться в предметной области, для тех кто хочет сделать КЛАДР: не забывайте, что Москва – это не только город.
Если вы хотите проектировать базы данных для Web, то скачайте самые популярные и востребованные CMS (Drupal, WordPress, Joomla, Typo3) и посмотрите на их базы данных, а также изучите запросы к базам данных, это полезная практика.
Если вас интересует другая предметная область – Гугл вам в помощь, вы сможете найти различные биллинговые системы, CRM, ARM и другие системы учета с открытым исходным кодом и документацией.

Кирилл Антонов
4 Просмотры · 4 лет тому назад

Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

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

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

Итак, подведем итог сделанному:

1. За шесть месяцев было записано более 150 видео.
2. Эти видео разбиты на 19 тем.
3. В среднем тема состоит из 8 частей.
4. Каждая часть это небольшой узконаправленный видео урок, раскрывающий тему с той или иной стороны, в этом уроке есть как теория
так и примеры, средняя продолжительность видео где-то 6 минут.
5. Если прикинуть, то получается примерно 900 минут или 15 часов видео.
6. Мы двигались от простого к сложному.
7. Начинали мы с установки и настройки нашей СУБД.
8. А заканчивали мы оптимизацией производительности SQL запросов и рекурсией.
9. Между этим двумя крайностями было следующее.
10. Теория реляционных баз данных.
11. Структура языка SQL.
12. Разница между языком SQL и реляционной теорией баз данных.
13. И, конечно же, мы выделили основные и самые важные функции языка SQL и подробно с ними разобрались.
14. Если вам кто-то пообещает SQL за час, то не верьте.

Еще я хотел бы по благодорить вас, зрителей моего канала, за поддержку в виде просмотров, отзывов и лайков к видео, нашлось даже
три человека, которые донатили, жаль я не знаю их имен, так бы поблагодарил отдельно, на самом деле, ребят, я хочу сказать
огромное спасибо вам: в то время как на Ютубе есть котики, ментос и газировка, политика и другие темы, вы смотрите мой скучный
бубнеж про всякие SQL, HTML, CSS и не просто смотрите, а еще и поддерживает! Это круто!


Теперь немного о планах публикации видео на канале, этот плейлист (видео уроки по основам SQL и реляционных баз данных на
примере библиотеки SQLite) закончен и пополняться больше не будет от слова совсем. Зато начнут появляться видео по работе
с сервером баз данных MySQL и его графическим клиентом MySQL Workbench. Также на канале есть еще один плейлист, который близок
к завершению, в котором я рассказываю про HTML, поэтому основной упор будет сделан на него.

Также, отмечу, что плейлисты по JavaScript и CSS не будут обновляться до завершения HTML. В общем, как-то так я вижу ближайшую перспективу моего канала.

Кирилл Антонов
3 Просмотры · 4 лет тому назад

Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-m...
Текстовая версия: http://zametkinapolyah.ru/zame....tki-o-mysql/tema-16-
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223




Showing 3 out of 4