Архив рубрики: MySQL

MySQL

Основы реляционных БД

Не забываем основы!

Реляционная БД:

Реляционная БД (Relational database) — это база данных с табличной организацией данных.

Где:
Отношение (relation, base relvar) — таблица (table);
Имена атрибутов (attribute) — столбцы (column) этой таблицы;
Кортеж (tuple) — отдельная строка (row) или запись в таблице
Индекс (index) — это отсортированный список значений полей, предназначенный для ускорения поиска в базе данных.
Читать далее

MySQL: отличия между MyISAM и InnoDB

Отличия между системами хранения данных MyISAM и InnoDB простым языком.

В данной таблице я попробовал показать разницу между MyISAM и InnoDB на простых примерах: Читать далее

Задача по Mysql: выбор последних имеющихся валют

Задали интересную задачу по MySQL.

Есть БД с курсами валют за определенный день


CREATE TABLE  `test` (
    `id` int(11) NOT NULL auto_increment,
    `date` date NOT NULL,
    `currency` varchar(3) NOT NULL,
    `value` int(11) NOT NULL,
    PRIMARY KEY  (`id`)
) ENGINE=MyISAM ;

INSERT INTO `test` (`id`, `date`, `currency`, `value`) VALUES
(1, '2011-05-02', 'rur', 183),
(2, '2011-05-01', 'rur', 124),
(3, '2011-04-15', 'usd', 123),
(4, '2011-05-01', 'usd', 14),
(5, '2011-04-02', 'rur', 1),
(6, '2011-04-01', 'usd', 2);

Читать далее

Безопасность: не храните бэкап сайта на хостинге.

Вы знаете как проще всего украсть базу данных вашего сайта?

Ее можно просто скачать с вашего сервера. Многие люди оставляют бэкапы там где их оставили ваши CMS или скрипты. и Злоумышленники могут найти их и скачать по стандартным названиям.

Вот пути по которым ищутся дампы:
/mysqld.sql
/zencart.sql
/database.sql
/dba.sql
Читать далее

Просто о кодировке MySQL. Как избежать всех ошибок.

О кодировках Mysql много информации написано, много вопросов уже задано, но судя по такому количеству новых вопросов и проблем еще многим не все понятно.

Для начала объясним основные понятия вообще:

Что такое кодировка (character set):
Допустим, у нас есть символы «А», «Б», «а», «б». Мы присвоим каждому символу определенный код: «А» = 0, «Б» = 1, «а» = 2, «б» = 3.
Читать далее

Настройки mysql отвечающие за кодировки

Настройки mysql отвечающие за кодировки:

character_set_client — кодировка, в которой данные будут поступать от клиента
character_set_connection — кодировка по умолчанию для всего, что в рамках соединения не имеет кодировки
Читать далее

Ошибка MySQL Error writing file Errcode: 28

При выполнении некоторых требовательных sql запросов на локалке в Mysql стала выпадать ошибка Error writing file ‘C:\WINDOWS\TEMP\MY46F.tmp’ (Errcode: 28).

Причина оказалась в нехватке места для временных файлов.

Выхода два:
1) Очистить место на диске C:
2) Использовать другую директорию для временных файлов:

В файле конфига my.ini в секции [mysqld] указать:
tmpdir=»E:/php5/tmp»  или
tmpdir = /another_path/tmp

MySQL ошибка Incorrect key file for table

При некоторых запросах к MySQL возникала следующая ошибка:
Incorrect key file for table ‘#sql_e04_0.MYI’; try to repair it

После долгих разбирательств, выяснил причину.

Оказалось, что для выполнения данного запроса Mysql создавал временный файл sql_e04_0.MYI . Когда данный файл вырастал до больших размеров и заканчивалось свободное место, выскакивала данная ошибка.

Так что после увеличения размера диска на хостинге или места под mysql проблема будет решена.

Установка правильной временной зоны в php и mysql

Установка временной зоны в mysql из php делается следующим образом:

$db->query("SET time_zone = 'Europe/Moscow'");

Установка временной зоны в php для функций работы с датой и временем :

if (function_exists('date_default_timezone_set'))
date_default_timezone_set('Europe/Moscow');

Временные зоны:
Читать далее

Оптимизация таблиц и запросов в MySQL

Для просмотра, что можно оптимизировать подойдет следующий sql запрос:
SELECT *
FROM `table_name`
PROCEDURE ANALYSE ( )

Оценка производительности отдельного запроса происходит так:
EXPLAIN EXTENDED {ВАШ_ЗАПРОС}

Периодически нужно делать :
OPTIMIZE TABLE `table_name`
, что позволяет упорядочить данные если было удалено много записей.

При оптимизации важно измерять время без кэширование запросов. Данного можно добиться следующей конструкцией:
SELECT SQL_NO_CACHE *
FROM `table_name`