SQL в целом: CRUD, джойны и диалекты

Содержание
Введение
Четыре команды на каждый день
Джойны без боли
Диалекты
Индексы
Транзакции

Введение

SQL это декларативный язык: вы описываете, какие данные хотите получить, а СУБД сама решает, как их достать. Один и тот же запрос работает в MySQL, PostgreSQL и MSSQL с поправкой на диалект.

Четыре команды на каждый день

Почти вся работа это CRUD: SELECT читает, INSERT добавляет, UPDATE меняет, DELETE удаляет. Выучите их порядок и синтаксис WHERE, и дальше всё остальное это комбинации:

SELECT name, price FROM products WHERE price > 100 ORDER BY price DESC;

Джойны без боли

INNER JOIN оставляет только совпавшие строки, LEFT JOIN сохраняет все строки левой таблицы и подставляет NULL справа. Правило большого пальца: начинайте с LEFT JOIN, пока не убедитесь, что «лишних» строк нет, иначе отчёты тихо потеряют данные.

Диалекты

Стандарт один, мелочи разные: кавычки для идентификаторов, LIMIT против TOP и FETCH, автоинкремент против SERIAL и IDENTITY, функции дат. Пишите переносимый код на общем подмножестве, а специфику прячьте в миграции, а не в application code.

Если схема ещё не выбрана, почитайте, когда вместо реляционной базы берут NoSQL.

Индексы

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

Транзакции

Транзакция это «всё или ничего» для группы изменений: деньги списались и зачислились атомарно, а не по частям. Держите транзакции короткими — долгие держат локи и душат параллельность. Уровень изоляции по умолчанию подходит почти всегда; лезть в SERIALIZABLE стоит только с измеренной гонкой в руках.

Похожие статьи
Базы данных
SQL in general
NoSQL databases
MySQL
PostgreSQL

Search this site

Subscribe to Telegram channel @aofeed to follow new articles and updates to old ones

Go to channel

@aofeed

Ask a question in the Telegram group

@aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su, info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: