带有外键的 MariaDB 表创建错误

Posted

技术标签:

【中文标题】带有外键的 MariaDB 表创建错误【英文标题】:MariaDB Table Creation Error with Foreign Key 【发布时间】:2019-04-28 01:38:54 【问题描述】:

这样的问题有很多,但我在其中找不到答案。

你能告诉我这里有什么问题吗?该脚本是由 mysql Workbench 创建的,但除了答案之外它没有

-- MySQL Script generated by MySQL Workbench
-- Mon Nov 26 14:14:46 2018
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;    
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE,     SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`Owner`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Owner` ;

CREATE TABLE IF NOT EXISTS `mydb`.`Owner` (
  `OwnerId` CHAR(36) NOT NULL,
  `Name` NVARCHAR(60) NOT NULL,
  `DateOfBirth` DATE NOT NULL,
  `Adress` NVARCHAR(100) NOT NULL,
  PRIMARY KEY (`OwnerId`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Account`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Account` ;

CREATE TABLE IF NOT EXISTS `mydb`.`Account` (
  `AccountId` CHAR(36) NOT NULL,
  `DateCreated` DATE NOT NULL,
  `AccountType` VARCHAR(45) NOT NULL,
  `OwnerId` CHAR(36) NULL,
  PRIMARY KEY (`AccountId`),
  INDEX `fk_Account_Owner_idx` (`OwnerId` ASC) VISIBLE,
  CONSTRAINT `fk_Account_Owner`
    FOREIGN KEY (`OwnerId`)
    REFERENCES `mydb`.`Owner` (`OwnerId`)
    ON DELETE RESTRICT
    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;

给定的错误是

错误代码:1064。您的 SQL 语法有错误;检查 手册 对应于您的 MariaDB 服务器版本,以便使用正确的语法 靠近 ' 约束 fk_Account_Owner 外键 (OwnerId) 参考第 7 行的“myd”

【问题讨论】:

MySQL Workbench and phpMyadmin的可能重复 另外,复制:***.com/a/52785302/2469308 MySQL Workbench: Error in query (1064): Syntax error near 'VISIBLE' at line 1的可能重复 【参考方案1】:

又一个需要去掉VISIBLE这个词的情况。

【讨论】:

但是工作台创建的脚本不应该是正确的吗?我正在尝试你现在写的。 其实真正的罪魁祸首不是VISIBLE关键字,而是为建模设置的服务器版本(参见模型偏好)。 @Johnyy66554 - Workbench 由 Oracle 构建,最新版本针对 MySQL (8.0) 的最新版本,其中有一个 new 关键字 VISIBLE。由于 Workbench 似乎想要积极地包含该词,它会导致 所有 旧版本的 MySQL 和所有版本的 MariaDB 中出现错误。这个论坛到处都是问题。【参考方案2】:

在 MySQL 工作台中:

转到:

编辑 > 首选项 > 建模 > MySQL。

然后,将“默认目标 MySQL 版本”设置为 5.7

来自https://***.com/a/52785302/2625955

【讨论】:

试过但没有帮助。还是一样的问题。

以上是关于带有外键的 MariaDB 表创建错误的主要内容,如果未能解决你的问题,请参考以下文章

插入带有外键的查询

迁移错误后处于带有外键的奇怪状态

创建带有外键的表会出现错误 ORA-00904: : oracle 10g 中的无效标识符 [重复]

创建外键的问题

使用非主键的列创建外键

使用 SequelizeJS 编写带有外键的迁移