【发布时间】: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