MySQL - шпаргалки
Сегодня я решил опубликовать свои шпаргалки, на самые часто встречающиеся ошибки при работе с MySQL.
Работа с бекапами
Делаем бекапmysqldump -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql
Создаём структуру базы без данныхmysqldump --no-data - u USER -pPASSWORD DATABASE > /path/to/file/schema.sql
Заливаем бекап в базу данныхmysql -u USER -pPASSWORD DATABASE < /path/to/dump.sql
Создаём новую базу данныхmysqladmin -u USER -pPASSWORD create NEWDATABASE
Подробнее
Общие фактыПолезно под каждую базу на боевом сервере создавать своего пользователяКодировка базы может быть любой, если она UTF8В большинстве случаев лучше использовать движок InnoDBВ php лучше забыть про сильно устаревшее расширение mysql и по-возможности использовать pdo или mysqliНовую копию MySQL всегда можно настроить и оптимизироватьБез особой нужды не стоит открывать MySQL наружу. Вместо этого можно сделать проброс портовssh -fNL LOCAL_PORT:localhost:3306 REMOTE_USER@REMOTE_HOSTРабота с даннымиЧислаНе ставьте для типа INTEGER свойство UNSIGNED, если вы не знаете что делайте. Из коробки php не поддерживает числа такого большого размераСвязанные таблицы («Foreign keys») должны иметь полное сходство по структуре ключей. Т.е. если у нас на одной таблице для поля указано «INTEGER UNSIGNED DEFAULT 0 NOT NULL» то и на другой должно быть указано аналогичноДля хранения булевых значений, нужно использовать TINYINT(1)А деньги лучше хранить в DECIMAL(10, 2), где первое число обозначает количество всех знаков, включая запятую, а второе — количество знаков после запятой… Итого, у нас получится что DECIMAL(10,2) Может сохранить 9999999,99СтрокиVARCHAR ограничена 255 символами, поэтому нет никакого смысла указывать VARCHAR(300)Помните, что тип TEXT ограничен только 64 килобитами, поэтому что бы сохранять «Войну и Мир» пользуйтесь «LONGTEXT»Самая правильная кодировка для вашей БД UTF8ДатыНе забывайте, что
DATE, TIME, DATETIME — это по-сути строки, поэтому поиск и сравнение дат происходит через преобразованиеTIMESTAMP — хранится в виде INTEGER UNIXTIMESTAMP, что существенно облегчает выборку и сортировкуПеречисленияДля перечислений правильно использовать тип ENUMПравильно пишется так: ENUM('мама', 'мыла', 'раму')Можно ставить значение по-умолчанию, как и для любой строкиВ базе поле с перечислением хранится как число, поэтому скорость работы — потрясающе высокаяКоличество перечислений ~ 65 тысячdev.mysql.com/doc/refman/4.1/en/storage-requirements.htmlhelp.scibit.com/mascon/masconMySQL_Field_Types.html
ОтладкаЕсли запросы тормозят, то можно включить лог для медленных запросов в /etc/mysql/my.cnfА потом оптимизировать запросы через EXPLAINИ наблюдать за запросами удобно через программу mytopПожалуйста, сообщите мне, если вы заметили неточность или есть желание поделиться советом или шпаргалкой.
Основы работы с Microsoft ADO.NET
Использование поставщика данных .NET
Метео


