Spec-Zone .ru
спецификации, руководства, описания, API
|
AUTO_INCREMENT
атрибут может использоваться, чтобы генерировать уникальные
идентификационные данные для новых строк:
CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id));INSERT INTO animals (name) VALUES ('dog'),('cat'),('penguin'), ('lax'),('whale'),('ostrich');SELECT * FROM animals;
Который возвращается:
+----+---------+| id | name |+----+---------+| 1 | dog || 2 | cat || 3 | penguin || 4 | lax || 5 | whale || 6 | ostrich |+----+---------+
Никакое значение не было определено для AUTO_INCREMENT
столбец, таким образом,
MySQL присвоенные порядковые номера автоматически. Можно также явно присвоиться NULL
или 0 к столбцу, чтобы генерировать порядковые номера.
Можно получить новое AUTO_INCREMENT
значение с LAST_INSERT_ID()
Функция SQL или mysql_insert_id()
C API-функция. Эти функции специфичны для соединения, таким
образом, на их возвращаемые значения не влияет другое соединение, которое также выполняет, вставляет.
Используйте самый маленький целочисленный тип данных для AUTO_INCREMENT
столбец,
который является достаточно большим, чтобы содержать максимальное значение последовательности, в котором Вы
будете нуждаться. Когда столбец достигает верхнего предела типа данных, следующая попытка генерировать
порядковый номер сбои. Используйте UNSIGNED
припишите если возможный, чтобы
позволить больший диапазон. Например, если Вы используете TINYINT
, максимальный допустимый порядковый номер 127. Для TINYINT UNSIGNED
, максимум 255. См. Раздел
11.2.1, "Целочисленные Типы (Точное Значение) - INTEGER
, INT
, SMALLINT
, TINYINT
, MEDIUMINT
, BIGINT
"для диапазонов всех целочисленных типов.
Поскольку многократная строка вставляет, LAST_INSERT_ID()
и mysql_insert_id()
фактически возвратитесь AUTO_INCREMENT
ключ от первой из вставленных строк. Это включает многократной
строке, вставляет, чтобы быть воспроизведенным правильно на других серверах в установке репликации.
Если AUTO_INCREMENT
столбец является частью многократных, индексирует, MySQL
генерирует значения последовательности, используя индексирование, которое начинается AUTO_INCREMENT
столбец, если есть тот. Например, если animals
содержавшая таблица индексирует
PRIMARY KEY (grp, id)
и INDEX (id)
, MySQL
проигнорировал бы PRIMARY KEY
для того, чтобы генерировать значения
последовательности. В результате таблица содержала бы единственную последовательность, не последовательность на
grp
значение.
Запускаться с AUTO_INCREMENT
значение кроме 1, устанавливает то значение с CREATE
TABLE
или ALTER TABLE
, как это:
mysql> ALTER TABLE tbl AUTO_INCREMENT =
100;
Для InnoDB
таблицы, быть осторожным, если Вы изменяете столбец, содержащий
автоинкрементное значение в середине последовательности INSERT
операторы. Например, если Вы используете UPDATE
оператор, чтобы поместить новое, большее значение в столбец
автоприращения, последующее INSERT
мог встретиться с "Двойной записью"
ошибка. Тест, присутствует ли автоинкрементное значение уже, происходит, если Вы делаете a DELETE
сопровождаемый больше INSERT
операторы, или когда Вы COMMIT
транзакция, но не после UPDATE
оператор.
Для MyISAM
таблицы, можно определить AUTO_INCREMENT
на
вторичном столбце в многократном столбце индексируют. В этом случае, сгенерированное значение для AUTO_INCREMENT
столбец вычисляется как MAX(
. Это полезно, когда Вы хотите
поместить данные в упорядоченные группы. auto_increment_column
) + 1 WHERE
prefix=given-prefix
CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id)) ENGINE=MyISAM;INSERT INTO animals (grp,name) VALUES ('mammal','dog'),('mammal','cat'), ('bird','penguin'),('fish','lax'),('mammal','whale'), ('bird','ostrich');SELECT * FROM animals ORDER BY grp,id;
Который возвращается:
+--------+----+---------+| grp | id | name |+--------+----+---------+| fish | 1 | lax || mammal | 1 | dog || mammal | 2 | cat || mammal | 3 | whale || bird | 1 | penguin || bird | 2 | ostrich |+--------+----+---------+
В этом случае (когда AUTO_INCREMENT
столбец является частью многократного столбца,
индексируют), AUTO_INCREMENT
значения снова используются, если Вы удаляете строку с
самым большим AUTO_INCREMENT
значение в любой группе. Это происходит даже для MyISAM
таблицы те, для который AUTO_INCREMENT
значения обычно не снова используются.
Больше информации о AUTO_INCREMENT
доступно здесь:
Как присвоиться AUTO_INCREMENT
припишите столбцу: Раздел
13.1.17,"CREATE TABLE
Синтаксис", и Раздел
13.1.7,"ALTER TABLE
Синтаксис".
Как AUTO_INCREMENT
ведет себя в зависимости от NO_AUTO_VALUE_ON_ZERO
Режим SQL: Раздел 5.1.7, "Режимы SQL Сервера".
Как использовать LAST_INSERT_ID()
функционируйте, чтобы найти строку, которая содержит
новое AUTO_INCREMENT
значение: Раздел
12.14, "информационные Функции".
Установка AUTO_INCREMENT
значение, которое будет
использоваться: Раздел 5.1.4, "Системные Переменные
Сервера".
AUTO_INCREMENT
и репликация: Раздел
16.4.1.1, "Репликация и AUTO_INCREMENT
".
Переменные системы сервера, связанные с AUTO_INCREMENT
(auto_increment_increment
и auto_increment_offset
)
это может использоваться для репликации: Раздел 5.1.4, "Системные
Переменные Сервера".