
- Главная
- Каталог
- Интернет технологии
- SQL Ready | Базы Данных
SQL Ready | Базы Данных
Авторский канал про Базы Данных и SQL
Статистика канала
UNIQUE, но итоговое состояние корректно:
BEGIN;{}
Включаем отложенную проверку конкретного ограничения, оно проверится только при COMMIT:
SET CONSTRAINTS users_email_uniq DEFERRED;{}
Теперь можно выполнять UPDATE/INSERT, даже если в процессе появляются дубликаты:
UPDATE users
SET email = lower(email);{}
Фиксация происходит один раз, если финальное состояние валидно, транзакция коммитится:
COMMIT;{}
Если уникальность нарушена в конце будет ROLLBACK, без частичных изменений.
UNIQUE.
• Автор показывает, как хранить и группировать SQL-запросы в одном .sql-файле по сущностям;
• Рассказывается, как использовать go:embed для встраивания этих файлов в бинарник и загружать запросы по имени;
• Представлен парсер, который разбирает .sql с именованными секциями;
• Показаны преимущества подхода: подсветка SQL в IDE, чистый Go-код и др.
🔊 Продолжайте читать на Habr!
UNION удаляет дубликаты по всем выбранным колонкам, сравнивая строки целиком, поэтому результат может отличаться от ожиданий.
SELECT message FROM logs_app
UNION
SELECT message FROM logs_system;{}
Одинаковые message схлопнутся в одну строку, даже если это разные события — ошибки не будет.
UNION ALL не удаляет строки из результата запросов, поэтому почти всегда работает быстрее:
SELECT message FROM logs_app
UNION ALL
SELECT message FROM logs_system;{}
Для логов полезно явно добавлять источник:
SELECT 'app' AS src, id, message FROM logs_app
UNION ALL
SELECT 'system' AS src, id, message FROM logs_system
ORDER BY src, id;{}
Пересечение (INTERSECT) в MySQL не поддерживается, альтернатива:
SELECT DISTINCT a.message
FROM logs_app a
WHERE EXISTS (SELECT 1 FROM logs_system s WHERE s.message = a.message)
LIMIT 10;{}
Если хотите увидеть, какие строки пропадут при UNION из-за совпадений между таблицами, используйте UNION ALL и проверяйте строки, встречающиеся в обоих источниках:
SELECT message, COUNT(*) AS cnt, COUNT(DISTINCT src) AS sources
FROM (
SELECT message, 'app' AS src FROM logs_app
UNION ALL
SELECT message, 'system' AS src FROM logs_system
) t
GROUP BY message
HAVING sources > 1;{}
UNION — когда нужна дедупликация, UNION ALL — когда важна каждая строка и производительность.
Skiplist ускоряет поиск в памяти, Hash-индекс даёт доступ за O(1), а B-tree и LSM-дерево оптимизируют работу с диском и записью.
На картинке — 8 структур данных, которые стоит держать под рукой, чтобы понимать, как устроены индексы и хранение в БД.
Сохрани, чтобы не забыть!
JOIN по колонке, которая логически должна совпадать в обоих наборах:
JOIN table_b b ON a.id = b.id{}
Выберите только ключи, чтобы исключить лишние проекции и ускорить анализ наборов:
SELECT a.id{}
Проверьте сами на интерактивном примере:
CREATE TABLE table_a(id int);
CREATE TABLE table_b(id int);
INSERT INTO table_a VALUES (1),(2),(3);
INSERT INTO table_b VALUES (2),(3),(4);{}
Повторите исходный JOIN, вы увидите только 2,3 как пересечение наборов.
Получаем платную версию:🤩🤩🤩🤩🤩🤩🔐
Оживляем фото, генерим студийную фотосессию с собой 💪
Делаем из нейронки флирт бота влюбляем в себя любую ❤️
Зарабатываем на крипте с помощью прогнозов нейронки 💸
Снимаем цензуру одним промтом🤬
Как сделать из нейронки помощника или друга ✍️
Решаем любую домашку одной фоткой📸
UPDATE:
WITH c AS (SELECT id FROM products WHERE price < 0 LIMIT 3){}
CTE c вернёт проблемные id.
Теперь обновим только найденные строки, не дублируя условие в клиенте:
UPDATE products SET price = 0{}
Ссылаемся на выборку из CTE, чтобы не рассинхронизировать find/update:
WHERE id IN (SELECT id FROM c);{}
Попробуйте сами на тестовой таблице:
CREATE TABLE products(id int PRIMARY KEY, price int);
INSERT INTO products VALUES (1,-10),(2,-5),(3,100);{}
Запустите find+update снова и убедитесь, что исправление точечное и атомарное.
Отзывы канала
всего 4 отзыва
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
SQL Ready | Базы Данных — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 14.2K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 14.8, количество отзывов – 4, со средней оценкой 4.8.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 1538.46 ₽, а за 8 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий