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

Можно уточнить:
    1. Пятница, 14 мая

      MySQL, InnoDB и внешние ключи

      Довольно часто при попытке создать внешний ключ 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 прописан, а в связываемой таблице его нет.

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


    1. Среда, 10 марта

      MySQL, удаление дубликатов

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


      ALTER IGNORE TABLE my_table ADD UNIQUE INDEX(a, b);


    1. Пятница, 16 октября 2009

      Sypex Dumper 2 Beta

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

      Вкусности новой версии:
      - Работает в 7-8 раз быстрее старой версии (а она работала очень даже шустро).
      - «Умный» лёгкий дамп.
      - Разные стратегии восстановления.
      - Ещё более приятный интерфейс.
      - Корректное автоматическое продолжение работы при завершении по таймауту.
      - Сервисные функции MySQL в интерфейсе.
      - Можно сохранять задачи для быстрого запуска вручную или по крону.
      - Возможность автоматического удаления старых дампов.
      - Можно завершить, поставить на паузу.
      - Отзывчивый прогресс-бар.
      - API для прикручивания сторонней авторизации.

      Пробуем


    1. Вторник, 14 апреля 2009

      «Лёгкий» дамп MySQL

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

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


      mysqldump mydatabase --where="true limit 100" | gzip > mydatabase.sql.gz


    1. Воскресенье, 15 марта 2009

      Нужно ли переходить с MyISAM на InnoDB?

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

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

      Читаем


    1. Среда, 11 марта 2009

      Множественный UPDATE в MySQL

      Сразу предупреждаю, что эффективней использовать несколько «классических» запросов и, по возможности, транзакции (которые 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);


    1. Суббота, 7 марта 2009

      utf8_unicode_ci или utf8_general_ci?

      Какую таблицу из двух выбрать для своей базы данных в случае использования 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 (там, кстати, и все остальные есть).


    1. Четверг, 5 марта 2009

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

      Задача: выбрать новости с 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)


    1. Среда, 18 февраля 2009

      toggle для mysql

      Что только не придумают иногда программисты… Задача — изменить значение 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


    1. Вторник, 10 февраля 2009

      MySQL, сложение и NULL

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

      SELECT NULL + 13


      даст нам NULL.

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


      SELECT IFNULL(NULL, 0) + 13



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

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


  1. 1
  2. 2
  3. Последняя

Подписаться на RSS

Интересное

Разделы

  1. (5)
  2. (11)
  3. (6)
  4. (9)
  5. (6)
  6. (6)
  7. (16)
  8. (60)
  9. (274)
  10. (52)
  11. (16)
  12. (12)
  13. (37)
  14. (6)
  15. (10)
  16. (14)
  17. (18)
  18. (16)
  19. (7)
  20. (8)
  21. (7)
  22. (7)
  23. (31)
  24. (76)
  25. (27)
  26. (68)
  27. (5)
  28. (203)
  29. (59)
  30. (6)
  31. (19)
  32. (73)
  33. (27)
  34. (70)
  35. (33)
  36. (10)
  37. (5)
  38. (6)
  39. (5)
  40. (341)
  41. (14)
  42. (11)
  43. (6)
  44. (13)
  45. (8)
  46. (18)
  47. (6)
  48. (15)
  49. (115)
  50. (18)
  51. (6)
  52. (9)
  53. (71)
  54. (16)
  55. (6)
  56. (25)
  57. (13)
  58. (5)
  59. (39)
  60. (7)
  61. (31)
  62. (7)
  63. (12)
  64. (11)
  65. (124)
  66. (34)
  67. (5)
  68. (18)
  69. (28)
  70. (9)
  71. (6)
  72. (8)
  73. (41)
  74. (10)
  75. (6)
  76. (12)
  77. (5)
  78. (9)
  79. (6)

Друзья