带有外键的 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 表创建错误的主要内容,如果未能解决你的问题,请参考以下文章