Использование последовательностей 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 неизбежно, способ сделать это - удалить столбец из таблицы, а затем добавить его снова.
В следующем примере показано, как изменить нумерацию id values в таблице с использованием этой техники.
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;