【问题标题】:How to fix Error 1064 while creating tables with foreign keys?如何在使用外键创建表时修复错误 1064?
【发布时间】:2019-09-29 04:15:48
【问题描述】:

MySql 工作台告诉我我的 SQL 语法中有一个错误,对应于我的 MariaDB 服务器版本,我不知道为什么。

我已经查看了其他问题,但似乎都没有帮助,所以我现在问自己的问题...我真的不知道我的代码有什么问题,也不知道问题出在哪里我的语法是。我尝试设置一些逗号或重命名列等,并将模型中的 SQL 版本更改为我与 xampp 一起使用的 sql 版本。但是,在更改版本后,我仍然收到该错误...

创建表的sql是(我已经把cmets拿出来了):

CREATE SCHEMA IF NOT EXISTS `testDB` DEFAULT CHARACTER SET utf8 ;
USE `testDB` ;

CREATE TABLE IF NOT EXISTS `testDB`.`person` (
  `personID` INT NOT NULL AUTO_INCREMENT,
  `firstname` VARCHAR(45) NULL,
  `lastname` VARCHAR(45) NULL,
  PRIMARY KEY (`personID`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `testDB`.`comment` (
  `commentID` INT NOT NULL AUTO_INCREMENT,
  `comment` VARCHAR(45) NOT NULL,
  `person_personID` INT NOT NULL,
  PRIMARY KEY (`commentID`),
  INDEX `fk_comment_person_idx` (`person_personID` ASC) VISIBLE,
  CONSTRAINT `fk_comment_person`
    FOREIGN KEY (`person_personID`)
    REFERENCES `testDB`.`person` (`personID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

我得到的错误是:

Executing SQL script in server
ERROR: Error 1064: You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to use near '
  CONSTRAINT `fk_comment_person`
    FOREIGN KEY (`person_personID`)
    REFERE' at line 9
SQL Code:
        -- -----------------------------------------------------
        -- Table `testDB`.`comment`
        -- -----------------------------------------------------
        CREATE TABLE IF NOT EXISTS `testDB`.`comment` (
          `commentID` INT NOT NULL AUTO_INCREMENT,
          `comment` VARCHAR(45) NOT NULL,
          `person_personID` INT NOT NULL,
          PRIMARY KEY (`commentID`),
          INDEX `fk_comment_person_idx` (`person_personID` ASC) VISIBLE,
          CONSTRAINT `fk_comment_person`
            FOREIGN KEY (`person_personID`)
            REFERENCES `testDB`.`person` (`personID`)
            ON DELETE NO ACTION
            ON UPDATE NO ACTION)
        ENGINE = InnoDB

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

Fetching back view definitions in final form.
Nothing to fetch

【问题讨论】:

  • 注意:如果right syntax to use near 之后引用的代码没有问题,则问题通常就在该代码之前,在您的情况下为VISIBLE

标签: mysql mysql-workbench


【解决方案1】:

删除您的陈述中的“可见”一词:

CREATE SCHEMA IF NOT EXISTS `testDB` DEFAULT CHARACTER SET utf8 ;
USE `testDB` ;

CREATE TABLE IF NOT EXISTS `testDB`.`person` (
  `personID` INT NOT NULL AUTO_INCREMENT,
  `firstname` VARCHAR(45) NULL,
  `lastname` VARCHAR(45) NULL,
  PRIMARY KEY (`personID`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `testDB`.`comment` (
  `commentID` INT NOT NULL AUTO_INCREMENT,
  `comment` VARCHAR(45) NOT NULL,
  `person_personID` INT NOT NULL,
  PRIMARY KEY (`commentID`),
  INDEX `fk_comment_person_idx` (`person_personID` ASC),
  CONSTRAINT `fk_comment_person`
    FOREIGN KEY (`person_personID`)
    REFERENCES `testDB`.`person` (`personID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

因为在 MariaDB 中还没有实现 INVISIBLE 选项。此选项在 ORACLE 中实现

【讨论】:

  • @Lars - 请注意,即使对于 oracles,MySQL VISIBLE 也是默认值。所以不需要显式设置。
猜你喜欢
  • 1970-01-01
  • 2015-06-08
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
相关资源
最近更新 更多