English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Использование последовательностей MySQL

MySQL последовательность - это набор целых чисел: 1, 2, 3, ..., так как в одной таблице может быть только один поле с автоматическим увеличением главного ключа, Если вы хотите реализовать автоматическое увеличение других полей, вы можете использовать последовательности MySQL.

В этой главе мы рассмотрим, как использовать последовательности в MySQL.

Использование AUTO_INCREMENT

Самый простой способ использования последовательностей в MySQL - это использование MySQL AUTO_INCREMENT для определения последовательности.

Онлайн пример

В следующем примере создается таблица insect, В таблице insect поле id автоматически увеличивается без указания значения.

mysql> CREATE TABLE insect
    -> (
    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    -> PRIMARY KEY (id),
    -> name VARCHAR(30) NOT NULL, # type of insect
    -> date DATE NOT NULL, # date collected
    -> origin VARCHAR(30) NOT NULL # where collected
;
Запрос ОК, изменено 0 строк (0.02 сек)
mysql> INSERT INTO insect (id, name, date, origin) VALUES
    -> (NULL, 'housefly', '2001-09-10', 'kitchen'),
    -> (NULL, 'millipede', '2001-09-10', 'driveway'),
    -> (NULL, 'grasshopper', '2001-09-10', 'front yard');
Запрос ОК, изменено 3 строки (0.02 сек)
Записи: 3  Дубликаты: 0  Предупреждения: 0
mysql> SELECT * FROM insect ORDER BY id;
+----+-------------+------------+------------+
| id  | name        | date       | origin     |
+----+-------------+------------+------------+
|   1 | housefly    | 2001-09-10 | kitchen    |
|   2 | millipede   | 2001-09-10 | driveway   |
|   3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

Получение значения AUTO_INCREMENT

В клиенте MySQL вы можете использовать Функция LAST_INSERT_ID() в SQL для получения значения AUTO_INCREMENT из последнего вставленного столбца.

В скриптах PHP и PERL также предоставлены соответствующие функции для получения значения AUTO_INCREMENT из последнего вставленного столбца.

Пример PERL

Использование атрибута mysql_insertid для получения значения AUTO_INCREMENT. Пример:

$dbh->do("INSERT INTO insect (name,date,origin
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysql_insertid};

Пример PHP

PHP использует функцию mysql_insert_id () для получения значения AUTO_INCREMENT столбца из выполняемого INSERT SQL запроса.

mysql_query("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);

Сброс последовательности

Если вы удалили多条 записей из таблицы данных и хотите переразместить AUTO_INCREMENT столбец оставшихся данных, вы можете это сделать, удалив столбец AUTO_INCREMENT и затем заново добавив его. Однако, этот процесс требует особой осторожности, так как если в процессе удаления добавляются новые записи, может возникнуть путаница в данных. Операция выполняется следующим образом:

mysql> ALTER TABLE insect DROP id;
mysql> ALTER TABLE insect
    -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
    -> ADD PRIMARY KEY (id);

Установка начального значения последовательности

Обычно начальное значение последовательности равно 1, но если вам нужно указать начальное значение 100, вы можете реализовать это следующим образом:

mysql> CREATE TABLE insect
    -> (
    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    -> PRIMARY KEY (id),
    -> name VARCHAR(30) NOT NULL, 
    -> date DATE NOT NULL,
    -> origin VARCHAR(30) NOT NULL
)engine=innodb auto_increment=100 charset=utf8;

Или вы также можете реализовать это после успешного создания таблицы следующим образом:

mysql> ALTER TABLE t AUTO_INCREMENT = 100;