使用MySQL Workbench添加外键时出现MySQL错误1064

时间:2018-08-19 12:46:46

标签: mysql sql

因此,当我想添加外键时出现错误。我在带有EER图模型的MySQL Workbench中添加了外键。工作台尝试添加的行是:

    String command = "abc:/b1c\\xy";
    Pattern COMMAND_PATTERN = Pattern.compile("[a-z]{1}[a-z0-9:]*\\/[a-z0-9]*\\\\[a-z]+");
    Matcher matcher = COMMAND_PATTERN.matcher(command);

    while (matcher.find())
        count++;

    System.out.println("MATCH COUNT = " + count);

我得到的错误是:

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;

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

7 个答案:

答案 0 :(得分:11)

对于任何看到此内容的人,都可以在EER Diagram Model窗口中设置要用于生成SQL脚本的MySQL版本。转到“编辑”,“首选项”,然后是“ MySQL”“建模”部分,并设置自定义MySQL版本。

答案 1 :(得分:1)

感谢@imnothuman

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

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

答案 2 :(得分:1)

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

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

我的MySQL版本是5.7.21。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

我正在使用mysql 5.5.62版本。

注释该行 INDEX 'fk_CUSTOMER_BARBER_idx' ('BARBER_ID' ASC) VISIBLE, 确实为我工作。

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

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