【问题标题】:MySQL Error 1064 when adding foreign key with MySQL Workbench使用 MySQL Workbench 添加外键时出现 MySQL 错误 1064
【发布时间】:2019-01-25 19:40:49
【问题描述】:

所以当我想添加外键时出现错误。我在 MySQL Workbench 中使用 EER 图模型添加了外键。工作台尝试添加的行是:`

CREATE SCHEMA IF NOT EXISTS `barberDB` DEFAULT CHARACTER SET latin1 ;
USE `barberDB` ;

-- -----------------------------------------------------
-- Table `barberDB`.`BARBER`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `barberDB`.`BARBER` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  PRIMARY KEY (`ID`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `barberDB`.`CUSTOMER`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `barberDB`.`CUSTOMER` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  `isHaircut` INT NULL,
  `isBeard` INT NULL,
  `isEyebrows` INT NULL,
  `BARBER_ID` INT NOT NULL,
  PRIMARY KEY (`ID`),
  INDEX `fk_CUSTOMER_BARBER_idx` (`BARBER_ID` ASC) VISIBLE,
  CONSTRAINT `fk_CUSTOMER_BARBER`
    FOREIGN KEY (`BARBER_ID`)
    REFERENCES `barberDB`.`BARBER` (`ID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

我得到的错误是:

ERROR: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VISIBLE,
  CONSTRAINT `fk_CUSTOMER_BARBER`
    FOREIGN KEY (`BARBER_ID`)
    REF' at line 12
SQL Code:
        -- -----------------------------------------------------
        -- Table `barberDB`.`CUSTOMER`
        -- -----------------------------------------------------
        CREATE TABLE IF NOT EXISTS `barberDB`.`CUSTOMER` (
          `ID` INT NOT NULL AUTO_INCREMENT,
          `name` VARCHAR(45) NULL,
          `isHaircut` INT NULL,
          `isBeard` INT NULL,
          `isEyebrows` INT NULL,
          `BARBER_ID` INT NOT NULL,
          PRIMARY KEY (`ID`),
          INDEX `fk_CUSTOMER_BARBER_idx` (`BARBER_ID` ASC) VISIBLE,
          CONSTRAINT `fk_CUSTOMER_BARBER`
            FOREIGN KEY (`BARBER_ID`)
            REFERENCES `barberDB`.`BARBER` (`ID`)
            ON DELETE CASCADE
            ON UPDATE CASCADE)
        ENGINE = InnoDB

SQL script execution finished: statements: 6 succeeded, 1 failed

Fetching back view definitions in final form.
Nothing to fetch

我搜索了解决方案,发现括号很重要或反引号,但由于代码是由工具创建的,所以对我来说似乎是正确的。 什么可能导致错误?

【问题讨论】:

  • 您的 MySQL 版本不理解 VISIBLE 关键字 - 这是 MySQL 8 中引入的。删除它即可。
  • 当我通过 'mysql -V' 检查 mysql 的版本时,它显示 'mysql Ver 14.14 Distrib 5.7.23, for Linux (armv7l) using EditLine wrapper' 所以应该可以吗?
  • 您的版本是 5.7.23。它不支持索引可见性。
  • @BurakTopuz 。 . .我要补充一点,将索引明确声明为visible 是不必要的;默认情况下,索引是可见的。我只会将索引可见性作为测试从现有系统中删除一个或多个索引的可行性的一部分。
  • 好的,删除VISIBLE后没有错误谢谢!

标签: mysql sql mysql-workbench


【解决方案1】:

对于任何查看此内容的人,在 EER 图模型窗口中,您可以设置要用于生成 SQL 脚本的 MySQL 版本。转到编辑、首选项、建模部分、MySQL 并设置您的自定义 MySQL 版本。

【讨论】:

    【解决方案2】:

    检查您的 MySQL 版本并更新:

    首选项 -> 建模 -> MySQL -> 默认目标 MySQL 版本

    我的 MySQL 版本是 5.7.21。

    【讨论】:

      【解决方案3】:

      在 MySQL Workbench 中,当您连接到服务器时,单击主菜单中的“服务器”,然后单击“服务器状态”。

      使用“版本:X.X”转到您的 EER 图标签,从主菜单和“首选项”中单击“编辑”,然后在建模部分“MySQL”中设置您之前使用的自定义 MySQL 版本。

      【讨论】:

        【解决方案4】:

        感谢@imnothuman

        MacOS MySQL Workbench 版本中,您可以在此处设置 MySQL 脚本版本:

        从打开的 EER 图:
        模型 -> 模型选项。
        MySQL 选项卡。
        取消选中“使用全局设置中的默认值”。
        在“目标 MySQL 版本”输入中设置版本。

        【讨论】:

          【解决方案5】:

          我使用的是 mysql 版本 5.5.62 。

          注释行 INDEX 'fk_CUSTOMER_BARBER_idx' ('BARBER_ID' ASC) VISIBLE, 确实对我有用。

          【讨论】:

            【解决方案6】:

            可以针对当前版本的mysql针对默认版本工作台:

            在工作台中更改默认目标版本mysql:

            references -> Modeling -> MySQL -> Default Target MySQL Version

            【讨论】:

              【解决方案7】:

              如果低于 mysql 5.7,删除 VISIBLE 关键字并运行代码

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-03-05
                • 2018-04-14
                • 1970-01-01
                • 2011-04-17
                • 1970-01-01
                • 2014-07-16
                • 2013-11-16
                • 2017-05-06
                相关资源
                最近更新 更多