#mysql

Значение в скобках указывает на максимальную длину отображения числа, и то только если у поля указана опция ZEROFILL, которая очень редко используется.

Поэтому для полей типа INT есть смысл указывать в скобках стандартное значение 11

И тоже самое справедливо для TINYINT(3), SMALLINT(5), MEDIUMINT(8), BIGINT(20)

Значение в скобках влияет на размер используемой памяти только для полей CHAR(n), VARCHAR(n), BINARY(n), VARBINARY(n)

Добавить в начало sql файла:

SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT, AUTOCOMMIT = 0;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS = 0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0;

И в конец файла:

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET AUTOCOMMIT = @OLD_AUTOCOMMIT;
COMMIT;

Увеличить в конфиге key_buffer_size до 30% доступной памяти

Выставить в конфиге innodb_flush_log_at_trx_commit = 2

Возможные значения:

Допустим мы получили данные о текущем состоянии счёта пользователя (по первичному ключу) из mysql, выполнив запрос:

SELECT * FROM `balance` WHERE `user_id` = 1;

Теперь, когда мы знаем сколько у пользователя на счету, нам, например, нужно добавить на счёт определённую сумму. Считаем новую сумму и отправляем запрос на обновление строки:

Для связи таблиц в дочерней таблице мы можем создать внешний ключ, описывающий связь с записями родительской таблицы.

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

Допустим у нас есть таблица с годами:

CREATE TABLE `year` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `year` INT(11) NOT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

таблица с месяцами:

CREATE TABLE `month` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `month` INT(11) NOT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

и таблица с днями: