【问题标题】:Importing a database script into my database throws an #1064 error将数据库脚本导入我的数据库会引发 #1064 错误
【发布时间】:2021-11-09 12:38:54
【问题描述】:

你能帮帮我吗?我购买了一个域只是为了学习数据库等,并在 MySQL Workbench 中创建了我的数据库模型。我生成了一个脚本并尝试使用 phpMyAdmin 将其导入我的数据库。这是脚本:

CREATE TABLE IF NOT EXISTS `knight` (
    `idKnight` INT NOT NULL AUTO_INCREMENT,
    `strength` INT NOT NULL DEFAULT 1,
    `agility` INT NOT NULL DEFAULT 1,
    `vitality` INT NOT NULL DEFAULT 1,
    `attack` INT GENERATED ALWAYS AS (agility*strength) STORED,
    `defense` INT GENERATED ALWAYS AS (vitality*strength) STORED,
    `idUser` INT NOT NULL,
    `idTavern` INT NULL,
    PRIMARY KEY (`idKnight`),
    INDEX `fk_user_idx` (`idUser` ASC),
    INDEX `fk_tavern_idx` (`idTavern` ASC),
    CONSTRAINT `fk_user` FOREIGN KEY (`idUser`)
        REFERENCES `user` (`idUser`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
    CONSTRAINT `fk_tavern` FOREIGN KEY (`idTavern`)
        REFERENCES `tavern` (`idTavern`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
ENGINE = InnoDB

这是错误:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在 'GENERATED ALWAYS AS (agility*strength) STORED 附近使用, defense INT 始终在第 6 行生成

现在的问题是如何同步生成脚本的数据库的 MySQL Workbench 版本和数据库本身。数据库是 Inno DB。

感谢您的帮助

编辑:我的服务器的 MySQL 版本是:5.6.28

【问题讨论】:

标签: mysql database mysql-error-1064


【解决方案1】:

这类问题说明了在开发中使用与部署到生产服务器时最终使用的相同版本数据库的重要性。所以你不会对不兼容感到惊讶。

只有在您避免在较新版本的 MySQL 中引入的 SQL 功能时,您才能针对您的 MySQL 5.6 服务器运行该脚本。这包括在 MySQL 5.7 中首次引入的生成列。

因此您需要删除这些列,或者将它们更改为纯 INT 列,而不使用生成的选项。

`attack` INT GENERATED ALWAYS AS (agility*strength) STORED,
`defense` INT GENERATED ALWAYS AS (vitality*strength) STORED,

如果您需要查询结果集中的这些列,您有几个替代解决方案:

将它们作为表达式添加到 SELECT 查询的选择列表中:

SELECT (agility*strength) AS `attack`, (vitality*strength) AS `defense`
FROM `knight` ...

或者您可以create a VIEW 使用这些表达式对查询进行编码。

或者您可以将这些列添加为纯整数,并添加write TRIGGERs on INSERT and UPDATE 以使它们与其他列保持同步。

MySQL 5.6.28 于 2015 年 12 月发布,整个 5.6 分支已超过其支持终止日期。这意味着如果从现在开始发现任何安全漏洞,它们将不会被修复。此外,您已经在使用过时的 5.6 版本,存在许多错误。上一个 5.6 版本是 2021 年 1 月的 5.6.51。

【讨论】:

    猜你喜欢
    • 2015-10-03
    • 2017-10-23
    • 2017-03-18
    • 1970-01-01
    • 2011-10-26
    • 2019-05-24
    • 2021-04-24
    • 1970-01-01
    相关资源
    最近更新 更多