我想在SQL中自动生成唯一的ID

时间:2018-12-27 06:39:50

标签: mysql-error-1064

我正在创建一个Foods表,我可以在其中为插入表中的每种食物自动生成一个ID。

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
);

我希望创建表,并且如果我给出一个id(即1),则应该创建一个id作为itemId00000001。 但是我遇到了一个错误,错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在'(ID int IDENTITY(1,1)NOT NULL PRIMARY KEY CLUSTERED,ItemId AS'itemId'+ RIGHT('在第1行

1 个答案:

答案 0 :(得分:0)

在MySQL documentation中,仅NDB存储引擎支持计算列。我的猜测是您使用的是默认存储引擎InnoDB,因此您将无法使用计算列。

此外,您似乎在混合使用SQL Server和MySQL语法。

考虑到这两个因素,建议使用以下create语句,然后在表顶部构建一个视图,以生成所需的项目ID:

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
)