Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
с обычными и полнотекстовыми индексами
И теперь, даже если мы не вставили новый ряд, наш счётчик AUTO_INCREMENT вырос до 3. Это, вообще-то, ожидаемое поведение.
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
A large integer. The signed range is -9223372036854775808 to 9223372036854775807. The unsigned range is 0 to 18446744073709551615.
SERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.
18446744073709551615 - unsigned
9223372036854775807 - signed
unsigned в 2 раза больше чем signed. The behavior of the auto-increment mechanism is not defined if a user assigns a negative value to the column (мануал) — следовательно, мы теряем половину диапазона.Failed to read auto-increment value from storage engine. К проблеме это не относится, но может испортить настроение.INSERT INTO table (field_1, field_2) VALUES (1, foo), (2, bar), (3, baz) ON DUPLICATE KEY UPDATE field_2 = VALUES (field_2);
REPLACE INTO table (field_1, field_2) VALUES (1, foo), (2, bar), (3, baz);
--
-- База данных: `test_db`
--
-- --------------------------------------------------------
--
-- Структура таблицы `table_test`
--
CREATE TABLE `table_test` (
`field_1` int(10) UNSIGNED NOT NULL COMMENT 'Уникальный идентификатор',
`field_2` varchar(255) NOT NULL COMMENT 'Какое-то значение'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Тестовая таблица';
--
-- Дамп данных таблицы `table_test`
--
INSERT INTO `table_test` (`field_1`, `field_2`) VALUES
(1, 'foo'),
(2, 'bar'),
(3, 'baz');
--
-- Индексы таблицы `table_test`
--
ALTER TABLE `table_test`
ADD PRIMARY KEY (`field_1`);
--
-- AUTO_INCREMENT для таблицы `table_test`
--
ALTER TABLE `table_test`
MODIFY `field_1` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Уникальный идентификатор', AUTO_INCREMENT=4;
INSERT INTO table_test (field_1, field_2) VALUES (1, 'foo2'), (2, 'bar2'), (3, 'baz2') ON DUPLICATE KEY UPDATE field_2 = VALUES (field_2)
--
-- База данных: `test_db`
--
-- --------------------------------------------------------
--
-- Структура таблицы `table_test`
--
CREATE TABLE `table_test` (
`field_1` int(10) UNSIGNED NOT NULL COMMENT 'Уникальный идентификатор',
`field_2` varchar(255) NOT NULL COMMENT 'Какое-то значение'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Тестовая таблица';
--
-- Дамп данных таблицы `table_test`
--
INSERT INTO `table_test` (`field_1`, `field_2`) VALUES
(1, 'foo2'),
(2, 'bar2'),
(3, 'baz2');
--
-- Индексы таблицы `table_test`
--
ALTER TABLE `table_test`
ADD PRIMARY KEY (`field_1`);
--
-- AUTO_INCREMENT для таблицы `table_test`
--
ALTER TABLE `table_test`
MODIFY `field_1` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Уникальный идентификатор', AUTO_INCREMENT=4;
Поведение INSERT… ON DUPLICATE KEY UPDATE в крайней ситуации