Четверг Мая 17 , 2012
TEXT_SIZE
   


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

Добавить комментарий


Защитный код
Обновить

Рейтинг пользователей: / 0
ХудшийЛучший 

Метео

Войти

Голосование

Идеальный вариант проведения новогодней корпоративной вечеринки - это…

Сейчас на сайте

Сейчас 7 гостей онлайн