Как мы можем создать последовательность в mariadb [duplicate]

13
задан Ben 27 October 2014 в 00:29
поделиться

4 ответа

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

Короче говоря, как и другие уже упомянутые в комментариях, последовательности, которые, как они думают и обрабатываются в Oracle, не существуют в MySQL. Однако вы можете использовать auto_increment, чтобы выполнить то, что хотите.

Без дополнительной информации о конкретной ошибке трудно предоставить более конкретную помощь.

UPDATE

CREATE TABLE ORD (
  ORDID INT NOT NULL AUTO_INCREMENT,
  //Rest of table code
  PRIMARY KEY (ordid)
)
AUTO_INCREMENT = 622;

Эта ссылка также полезно для описания использования auto_increment. Установка значения AUTO_INCREMENT является параметром таблицы таблицы , а не тем, что конкретно указано в качестве атрибута столбца.

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

ALTER TABLE ORD AUTO_INCREMENT = 622;

UPDATE 2 Ниже приведена ссылка на рабочий пример sqlfiddle с использованием автоматического увеличения. Надеюсь, эта информация поможет.

15
ответ дан Daileyo 27 August 2018 в 22:31
поделиться

Создавая таблицу приращений, вы должны знать, что не удалять вставленные строки. Причина этого заключается в том, чтобы избежать хранения больших немых данных в db с идентификаторами в нем. В противном случае в случае перезагрузки mysql он получит максимальную существующую строку и продолжит приращение с этой точки, как упоминается в документации http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling .html

2
ответ дан Dato Janez 27 August 2018 в 22:31
поделиться

Если вам нужно sth, отличное от AUTO_INCREMENT, вы все равно можете использовать триггеры.

0
ответ дан Marek Lisiecki 27 August 2018 в 22:31
поделиться

Это решение , предложенное руководством MySQl :

Если expr задано как аргумент LAST_INSERT_ID (), значение аргумента возвращается функция и запоминается как следующее значение, которое будет возвращено LAST_INSERT_ID (). Это можно использовать для имитации последовательностей:

Создать таблицу для хранения счетчика последовательности и инициализировать его:

    mysql> CREATE TABLE sequence (id INT NOT NULL);
    mysql> INSERT INTO sequence VALUES (0);

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

    mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
    mysql> SELECT LAST_INSERT_ID();

Оператор UPDATE увеличивает счетчик последовательностей и вызывает следующий вызов LAST_INSERT_ID () для возврата обновленного значения. Оператор SELECT извлекает это значение. Для получения значения также можно использовать функцию API mysql_insert_id () C. См. Раздел 23.8.7.37, «mysql_insert_id ()».

Вы можете генерировать последовательности без вызова LAST_INSERT_ID (), но утилита использования этой функции заключается в том, что значение идентификатора поддерживается на сервере как последнее автоматически генерируемое значение. Он многопользовательский, поскольку несколько клиентов могут выдавать инструкцию UPDATE и получать свое значение последовательности с помощью инструкции SELECT (или mysql_insert_id ()), не затрагивая или не подвергаясь воздействию других клиентов, которые генерируют свои собственные значения последовательности.

20
ответ дан pupitetris 27 August 2018 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: