0

我正在创建一个 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 (ie) 1 它应该创建一个 id 作为 itemId00000001 。但是我收到一个错误,ERROR 1064 (42000): You have an error in your SQL syntax; 检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '(ID int IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,ItemId AS 'itemId' + RIGHT(' 附近使用正确的语法

4

1 回答 1

0

从 MySQL文档中,只有 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
)
于 2018-12-27T06:51:36.107 回答