Я хочу автоматически генерировать уникальный идентификатор в SQL - PullRequest
0 голосов
/ 27 декабря 2018

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

create table Foods (
    (ID int IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
    ItemId AS 'itemId' + RIGHT('00000000' + CAST (ID AS VARCHAR(8)), 8) PERSISTED,
    item_name varchar(10),
    price int
);

Я хочу, чтобы таблица была создана, и если я даю идентификатор (т.е.) 1 он должен создать идентификатор как itemId00000001.Но я получаю сообщение об ошибке: ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '(ID int IDENTITY (1,1) NOT NULL PRIMARY KEY CLUSTERED, ItemId AS' itemId '+ RIGHT (' в строке 1

1 Ответ

0 голосов
/ 27 декабря 2018

Из документации MySQL только подсистема хранения NDB поддерживает вычисляемые столбцы.Я предполагаю, что вы используете механизм хранения по умолчанию InnoDB, поэтому вы не сможете использовать вычисляемые столбцы.

Кроме того, вы, похоже, смешиваете синтаксис SQL Server и MySQL.

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

CREATE TABLE Foods (
    ID int NOT NULL AUTO_INCREMENT,
    item_name varchar(10),
    price int,
    PRIMARY KEY(ID)
);

Затем создайте представление, которое может повернутьсяиз вычисленных элементов, которые вы хотите:

CREATE VIEW Foods_View AS (
    SELECT
        ID,
        RIGHT(CONCAT('00000000', CAST(ID AS CHAR(8))), 8) AS ItemId,
        item_name,
        price
    FROM Foods
)
...