Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MySQL工作台添加外键时出现MySQL错误1064_Mysql_Sql_Mysql Workbench - Fatal编程技术网

使用MySQL工作台添加外键时出现MySQL错误1064

使用MySQL工作台添加外键时出现MySQL错误1064,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,因此,当我想添加外键时,出现了一个错误。我在MySQL Workbench中添加了外键和EER图模型。工作台尝试添加的行包括:` CREATE SCHEMA IF NOT EXISTS `barberDB` DEFAULT CHARACTER SET latin1 ; USE `barberDB` ; -- ----------------------------------------------------- -- Table `barberDB`.`BARBER` -- --------

因此,当我想添加外键时,出现了一个错误。我在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
我搜索了一些解决方案,发现括号很重要或者是反勾号,但是由于代码是由工具创建的,所以我觉得它是正确的。
什么可能导致错误?

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

谢谢@imnohuman

在MacOS的MySQL工作台版本中,您可以在这里设置MySQL脚本版本:

从打开的EER图:
型号->型号选项。
MySQL选项卡。
取消选中“使用全局设置中的默认值”。

在“目标MySQL版本”输入中设置版本。

检查您的MySQL版本并在以下位置更新:

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


我的MySQL版本是5.7.21。

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


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

我使用的是MySQL版本5.5.62

评语
索引'fk\u CUSTOMER\u BARBER\u idx'('BARBER\u ID'ASC)可见,

did对我有效。

它可以用于mysql的当前版本,而不是默认版本的工作台:

在workbench中更改mysql的默认目标版本:


参考->建模->MySQL->默认目标MySQL版本

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

您的MySQL版本不理解MySQL 8中引入的
VISIBLE
关键字。只要删除它。当我通过“mysql-V”检查mysql版本时,它会显示“mysql版本14.14发行版5.7.23,适用于Linux(armv7l),使用EditLine包装器”,所以它应该正常还是不正常?您的版本是5.7.23。它不支持索引可见性。@BurakTopuz。我想补充一点,明确地将索引声明为可见是不必要的;默认情况下,索引是可见的。我只会在测试从现有系统中删除一个或多个索引的可行性时使用索引可见性。好的,删除可见索引后没有错误,谢谢!