Поиск по сайту:
Ложное знание опаснее невежества (Б. Шоу).

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
24.04.2017
SQL - Использование последовательностей

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

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

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

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

Пример

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

mysql> CREATE TABLE ANDREYEX
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # Тип
   -> date DATE NOT NULL, # Дата
   -> origin VARCHAR(30) NOT NULL # Цель
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO ANDREYEX (id,name,date,origin) VALUES
   -> (NULL,'promotion','2017-04-23','home'),
   -> (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, генерируемого запроса. Этот атрибут доступен либо через handle базы данных или дескриптор, в зависимости от того, как оформить запрос. Следующий пример ссылается через handle базы данных.

$dbh->do ("INSERT INTO ANDREYEX (name,date,origin)
VALUES('design','2017-04-24','home')");
my $seq = $dbh->{mysql_insertid};

 

Пример PHP

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

mysql_query ("INSERT INTO ANDREYEX (name,date,origin)
VALUES('design','2017-04-24','home')", $conn_id);
$seq = mysql_insert_id ($conn_id);

 

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

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

Если вы определили необходимость переупорядочивания столбца AUTO_INCREMENT неизбежно, то это сделать надо так: удалить столбец из таблицы, а затем добавить его снова.

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

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

 

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

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

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

mysql> CREATE TABLE ANDREYEX
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 250,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # Тип
   -> date DATE NOT NULL, # Дата
   -> origin VARCHAR(30) NOT NULL # Цель
);

 

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

mysql> ALTER TABLE t AUTO_INCREMENT = 250;

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей

Мне кажется, что человек, который понимает язык этой статьи, уже знает ответ на вопрос, в чём разница между статическим и динамическим SQL. А я не понял. Я хотел понять, в чём разница между статическим и динамическим запросом. Яндекс даёт эту статью на первой странице в ответ на запрос «Что такое динамический запрос». Вроде статья должна ответить на этот вопрос, но уровень явно для академиков.

Спасибо!

Теперь редакторы в курсе.