【问题标题】:MariaDB Table Creation Error with Foreign Key带有外键的 MariaDB 表创建错误
【发布时间】: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 foreign-keys mariadb mysql-workbench


【解决方案1】:

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

【讨论】:

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

在 MySQL 工作台中:

转到:

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

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

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

【讨论】:

  • 试过但没有帮助。还是一样的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 2012-03-20
  • 2016-08-18
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多