MySQL, удаление дубликатов
Существует множество универсальных решений данной задачи, но в MySQL всё решается ещё проще:
ALTER IGNORE TABLE my_table ADD UNIQUE INDEX(a, b);
Существует множество универсальных решений данной задачи, но в MySQL всё решается ещё проще:
ALTER IGNORE TABLE my_table ADD UNIQUE INDEX(a, b);
Довольно часто требуется получить ID только что вставленной в базу записи. В MySQL это чаще всего решается при помощи LAST_INSERT_ID.
В PostgreSQL можно сделать так:
INSERT
INTO "Post"(
title,
text
)
VALUES (
'Я заголовок',
'Я текст'
)
RETURNING id
Сразу предупреждаю, что эффективней использовать несколько «классических» запросов и, по возможности, транзакции (которые MyISAM не поддерживает). Так что… для общего развития:
UPDATE tbl_country SET price = CASE
WHEN code = 1 THEN 123;
WHEN code = 2 THEN 456;
…
END
WHERE code IN (1,2,…)
INSERT INTO tbl_country
(code, price)
VALUES
(1, 123),
(2, 456),
…
ON DUPLICATE KEY UPDATE tbl_country.price = VALUES(price);
Задача: выбрать новости с id = [2, 10, 3, 88, 23] соблюдая порядок.
SELECT *
FROM news
WHERE id IN (2, 10, 3, 88, 23)
ORDER BY FIELD (id, 2, 10, 3, 88, 23)
Что только не придумают иногда программисты… Задача — изменить значение cron в таблице ml на противоположное. Код немного не SQL т.к., скорее всего, писался под Drupal:
UPDATE {ml} SET cron = (SELECT if(cron = 0,"1","0")) WHERE yid = %d
Хотя на самом деле можно проще, быстрее и понятней:
UPDATE {ml} SET cron = !cron WHERE yid = %d
Вчера столкнулся с интересной штукой при работе с MySQL:
SELECT NULL + 13
даст нам NULL.
Чтобы получилось ожидаемое (по крайней мере я почему-то ожидал) 13:
SELECT IFNULL(NULL, 0) + 13
IFNULL возвращает то, что передано вторым параметром, если первый равен NULL.
Вместо NULL, как вы наверное догадались, было поле типа INT.
Две очень толковых статьи Михаила Стадника о хранении иерархических структур в базе данных.
Настоятельно рекомендую к прочтению.
Иерархические структуры данных и Doctrine
Иерархические структуры данных и производительность
Иногда требуется вставить запись в таблицу, если её там до сих пор нет. Можно сделать пару запросов: одним —проверить, другим — вставить, а можно и одним:
INSERT IGNORE INTO `users`
SET `login` = 'samdark', `password` = 'mypassword';
Поле `login` должно быть уникальным.
WWW SQL Designer позволяет визуально разрабатывать схему БД (E-R диаграмму) прямо в браузере. Отлично работает в Firefox, IE6/7/8, Safari и Opera.
Поддерживает ключи, комментарии, индексы. Можно сохранять схему, печатать её, экспортировать в SQL. Также её можно импортировать из базы.
Всё это дело даже можно поставить себе. Распространяется по GNU GPL.
Демо
Описание и загрузка
Бонус: форматтер SQL
Зарелизилась новая версия MySQL за номером 5.1. Уже чувcтвуется положительное влияние Sun.
Из вкусного:
— Физическое разбиение таблиц на несколько файлов (подробнее).
— Построчная репликация.
— API для плагинов полнотекстового поиска.
— Встроенный планировщик.
— Системные таблички для логов.
— mysql_upgrade (коррекция баз прошлых версий MySQL).
— Кластер в комплекте.
— Больше информации в метаданных.
— XML, XPath.
— Эмулятор нагрузок.
What's New in MySQL 5.1
Пробуем