Учебники

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

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

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

В MySQLi самый простой способ использовать Sequence — определить столбец как AUTO_INCREMENT и оставить все остальное на усмотрение MySQLi.

пример

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

mysql>CREATE TABLE tutorials_auto(
   id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL,PRIMARY KEY(id));
Query OK, 0 rows affected (0.28 sec)

mysql>INSERT INTO tutorials_auto(id,name) VALUES(NULL,'sai'),(NULL,'ram');
Query OK, 2 rows affected (0.12 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM insect ORDER BY id;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | ram  |
+----+------+
2 rows in set (0.05 sec)

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

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

Пример PERL

Используйте атрибут mysql_insertid для получения значения AUTO_INCREMENT, сгенерированного запросом. Этот атрибут доступен через дескриптор базы данных или дескриптор оператора, в зависимости от того, как вы выполняете запрос. Следующий пример ссылается на него через дескриптор базы данных:

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

Пример PHP

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

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

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

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

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

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

Начало последовательности по определенному значению

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

mysql> CREATE TABLE tutorials_auto
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, 
   -> );

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