<rmcreative>

RSS

Все заметки с тегом «MySQL»

Можно уточнить:

    (1)
    (1)
    (1)
    (3)
  1. (1)
    (1)
  1. (1)
    (3)
  1. (1)
  2. (2)
  3. (1)
  4. (1)
  5. (2)
  1. MySQL, InnoDB и внешние ключи

    14 мая 2010

    Довольно часто при попытке создать внешний ключ MySQL вываливает невнятные errno: xxx. Их описания в большинстве случаев ничего не дают, даже запутывают ещё больше.

    Реальных причин может быть несколько:

    1. Тип таблицы, на которую указывает ключ не InnoDB, SolidDB или PBXT.

    2. С одной из сторон ключа нет индекса (да, создавать его надо руками).

    3. С одной из сторон ключа нет столбца с указанными именем.

    4. Неверное описание отношения, например ON DELETE SET NULL для столбца NOT NULL.

    5. Ограничение с таким именем уже есть.

    6. Несовпадение типов полей, связываемых отношением. Например, нельзя использовать с одной стороны int(10) unsigned, а с другой int(11) или bigint.

    7. Нарушение целостности данных (integrity violation), т.е. когда ссылающийся id прописан, а в связываемой таблице его нет.

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

    2 комментария
  2. MySQL, удаление дубликатов

    10 марта 2010

    Существует множество универсальных решений данной задачи, но в MySQL всё решается ещё проще:

    ALTER IGNORE TABLE my_table ADD UNIQUE INDEX(a, b);
    2 комментария
  3. Sypex Dumper 2 Beta

    16 октября 2009

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

    Вкусности новой версии:

    • Работает в 7-8 раз быстрее старой версии (а она работала очень даже шустро).

    • «Умный» лёгкий дамп.

    • Разные стратегии восстановления.

    • Ещё более приятный интерфейс.

    • Корректное автоматическое продолжение работы при завершении по таймауту.

    • Сервисные функции MySQL в интерфейсе.

    • Можно сохранять задачи для быстрого запуска вручную или по крону.

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

    • Можно завершить, поставить на паузу.

    • Отзывчивый прогресс-бар.

    • API для прикручивания сторонней авторизации.

    Пробуем

    4 комментария
  4. «Лёгкий» дамп MySQL

    14 апреля 2009

    Иногда, чтобы что-нибудь поотлаживать, требуется быстро получить структуру и 100—200 записей в каждой таблице из очень большой базы.

    Для MySQL это делается так:

    mysqldump mydatabase --where="true limit 100"  | gzip > mydatabase.sql.gz
    
    
    5 комментариев
  5. Нужно ли переходить с MyISAM на InnoDB?

    15 марта 2009

    Чётко и понятно о плюсах и минусах MyISAM и InnoDB.

    Peter из компании Percona в переводе Владимира.

    Читаем

    3 комментария
  6. Множественный UPDATE в MySQL

    11 марта 2009

    Сразу предупреждаю, что эффективней использовать несколько «классических» запросов и, по возможности, транзакции (которые MyISAM не поддерживает). Так что… для общего развития:

    Способ №1

    UPDATE tbl_country SET price = CASE
    WHEN code = 1 THEN 123;
    WHEN code = 2 THEN 456;
    …
    END
    WHERE code IN (1,2,…)

    Способ №2

    INSERT INTO tbl_country
    (code, price)
    VALUES
    (1, 123),
    (2, 456),
    …
    ON DUPLICATE KEY UPDATE tbl_country.price = VALUES(price);
    25 комментариев
  7. utf8_unicode_ci или utf8_general_ci?

    7 марта 2009

    Какую таблицу из двух выбрать для своей базы данных в случае использования UTF?

    utf8_general_ci

    Убирает все акценты и приводит к верхнему регистру: ÀÁÅåāă = A, ü = U.

    Не очень точно отрабатывает при сортировках. Иногда полезно при поиске. Быстрее utf8_unicode_ci.

    Подходит для Русского. При использовании Белорусского и Украинского сортировка будет не верной.

    utf8_unicode_ci

    Довольно точно при сортировке и поиске. Например, ß (немецкий эсцет) будет при сортировке располагаться рядом с ss, как ему и положено. Медленнее utf8_general_ci.

    Замечательно подходит для Русского, Белорусского и Украинского.

    Итог

    Если проект исключительно русскоязычный и скорость поиска и сравнения критична — можно остановится на utf8_general_ci. Если же есть планы по поддержке большего количества языков — лучше использовать utf8_unicode_ci.

    Полные таблички utf8_unicode_ci и utf8_general_ci (там, кстати, и все остальные есть).

    UPD 2016: Кодировку на сегодняшний день для MySQL рекомендую utf8mb4. Collation utf8mb4_unicode_ci потому что юникод расширился несколько и в utf8 не всё влезает.

    12 комментариев
  8. MySQL: выбрать новости с определёнными id соблюдая порядок

    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)
    9 комментариев
  9. toggle для mysql

    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
    5 комментариев
  10. MySQL, сложение и NULL

    10 февраля 2009

    Вчера столкнулся с интересной штукой при работе с MySQL:

    SELECT NULL + 13

    даст нам NULL.

    Чтобы получилось ожидаемое (по крайней мере я почему-то ожидал) 13:

    SELECT IFNULL(NULL, 0) + 13

    IFNULL возвращает то, что передано вторым параметром, если первый равен NULL.

    Вместо NULL, как вы наверное догадались, было поле типа INT.

    14 комментариев