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

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

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

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

Самый простой способ использования последовательностей в MySQL — определить столбец как AUTO_INCREMENT, а обо всем остальном позаботиться MySQL.

Пример

Попробуйте следующий пример. Это создаст таблицу, а затем вставит несколько строк в эту таблицу, где не требуется указывать идентификатор записи, потому что он автоматически увеличивается MySQL.

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
);
Query OK, 0 rows affected (0.02 sec)
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');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 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

LAST_INSERT_ID () является функцией SQL, так что вы можете использовать его из любого клиента , который понимает , как делать заявление SQL. В противном случае сценарии PERL и PHP предоставляют эксклюзивные функции для получения автоматически увеличиваемого значения последней записи.

Пример 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

После выполнения запроса, который генерирует значение AUTO_INCREMENT, получите значение, вызвав команду mysql_insert_id () .

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

Перенумерация существующей последовательности

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

Если вы определите, что изменение последовательности столбца 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);

Запуск последовательности с определенным значением

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

Следующая программа представляет собой пример, показывающий, как MySQL начинает последовательность с 100.

mysql> CREATE TABLE insect
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);

Кроме того, вы можете создать таблицу, а затем установить начальное значение последовательности с помощью команды ALTER TABLE .

mysql> ALTER TABLE t AUTO_INCREMENT = 100;
Выберите поля, которые будут показаны. Прочие будут скрыты. Перктаскивайте мышкой для изменения порядка полей.
  • Изображение
  • SKU
  • Рейтинг
  • Цена
  • Запасы
  • Доступность
  • В корзину
  • Описание
  • Содержимое
  • Вес
  • Размеры
  • Дополнительная информация
  • Атрибуты
  • Custom attributes
  • Настраиваемые поля
Сравнить
Список желаний 0
Открыть страницу желаний Продолжить покупки