Существует множество универсальных решений данной задачи, но в MySQL всё решается ещё проще:
ALTER IGNORE TABLE my_table ADD UNIQUE INDEX(a, b);
10 марта 2010
Существует множество универсальных решений данной задачи, но в MySQL всё решается ещё проще:
ALTER IGNORE TABLE my_table ADD UNIQUE INDEX(a, b);
11 марта 2009
Сразу предупреждаю, что эффективней использовать несколько «классических» запросов и, по возможности, транзакции (которые 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);
5 марта 2009
Задача: выбрать новости с 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)
18 февраля 2009
Что только не придумают иногда программисты… Задача — изменить значение 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
10 февраля 2009
Вчера столкнулся с интересной штукой при работе с MySQL:
SELECT NULL + 13
даст нам NULL.
Чтобы получилось ожидаемое (по крайней мере я почему-то ожидал) 13:
SELECT IFNULL(NULL, 0) + 13
IFNULL возвращает то, что передано вторым параметром, если первый равен NULL.
Вместо NULL, как вы наверное догадались, было поле типа INT.
19 декабря 2008
Иногда требуется вставить запись в таблицу, если её там до сих пор нет. Можно сделать пару запросов: одним —проверить, другим — вставить, а можно и одним:
INSERT IGNORE INTO `users` SET `login` = 'samdark', `password` = 'mypassword';
Поле login
должно быть уникальным.
28 ноября 2008
Зарелизилась новая версия MySQL за номером 5.1. Уже чувcтвуется положительное влияние Sun.
Из вкусного:
— Физическое разбиение таблиц на несколько файлов (подробнее).
— Построчная репликация.
— API для плагинов полнотекстового поиска.
— Встроенный планировщик.
— Системные таблички для логов.
— mysql_upgrade (коррекция баз прошлых версий MySQL).
— Кластер в комплекте.
— Больше информации в метаданных.
— XML, XPath.
— Эмулятор нагрузок.
22 октября 2008
MySQL и PostgreSQL позволяют использовать результат логической операции при сортировке. Довольно удобно, когда нужно выдать какие-то записи первыми.
select * from address order by (state = 'CA') desc, (state = 'CT') desc
select * from posts order by (id=123), created_at
18 августа 2008
О встроенном в MySQL механизме кэширования запросов.
13 февраля 2008
Заметка о том, как возвратить даты на русском.