Я'пытаюсь создать последовательность в MySQL (я'очень новичок в SQL в целом). Я использую следующий код, но он вызывает ошибку:
CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622;
ORDID ссылается на поле в таблице, которую я использую. Как мне правильно создать последовательность?
Редактировать:
Утверждается, что MySQL не использует последовательности. Сейчас я использую следующий код, но он тоже вызывает ошибки. Как мне их исправить?
CREATE TABLE ORD (
ORDID NUMERIC(4) NOT NULL AUTO_INCREMENT START WITH 622,
//Rest of table code
Редактировать:
Кажется, я нашел решение. Для phpMyAdmin (который я использовал) вы можете использовать следующий код.
ALTER TABLE ORD AUTO_INCREMENT = 622;
Я понятия не имею, почему он предпочитает это, но если кому-то еще нужна помощь с этим, то вот, пожалуйста. :)
Это решение предложено в руководстве 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(), но полезность использования функции таким образом заключается в том, что значение ID сохраняется в сервере как последнее автоматически сгенерированное значение. Это является многопользовательской безопасной, потому что несколько клиентов могут выпустить оператор UPDATE и получить свое собственное значение последовательности с помощью оператора SELECT (или mysql_insert_id()), не затрагивая и не подвергаясь воздействию других клиентов, которые генерируют значение последовательности. клиентов, которые генерируют свои собственные значения последовательности.
Ознакомьтесь с этой статьей. Думаю, она поможет вам добиться желаемого. Если ваша таблица уже существует, и в ней уже есть данные, то ошибка, которую вы получаете, может быть вызвана тем, что 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;
ОБНОВЛЕНИЕ 2
Вот ссылка на рабочий пример sqlfiddle, использующий автоинкремент.
Надеюсь, эта информация поможет.
При создании таблицы инкремента вы должны знать, что не следует удалять вставленные строки. Причина этого в том, чтобы избежать хранения больших тупых данных в базе данных с ID-ми в них. Иначе в случае перезапуска mysql он получит максимальный существующий ряд и продолжит инкремент с этой точки, как указано в документации http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html.