MySQL:创建表时出现 FK 错误(errno 150)

2024-03-02

我创建了一个模型MySQL工作台 http://dev.mysql.com/workbench/现在我正在尝试将其安装到 mysql 服务器。

Using 文件 > 导出 > 正向工程 SQL CREATE 脚本...它为我输出了一个不错的大文件,其中包含我要求的所有设置。我切换到MySQL 图形用户界面工具 http://dev.mysql.com/downloads/gui-tools/5.0.html(特别是查询浏览器)并加载此脚本(请注意,我将从一个官方 MySQL 工具转换为另一个)。但是,当我尝试实际执行该文件时,我一遍又一遍地收到相同的错误

SQLSTATE[HY000]:一般错误:1005 无法创建表 './srs_dev/location.frm'(错误号:150)

“好吧”,我对自己说,位置表出了问题。所以我检查了输出文件中的定义。

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='TRADITIONAL';

-- -----------------------------------------------------
-- Table `state`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `state` ;

CREATE  TABLE IF NOT EXISTS `state` (
  `state_id` INT NOT NULL AUTO_INCREMENT ,
  `iso_3166_2_code` VARCHAR(2) NOT NULL ,
  `name` VARCHAR(60) NOT NULL ,
  PRIMARY KEY (`state_id`) )
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `brand`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `brand` ;

CREATE  TABLE IF NOT EXISTS `brand` (
  `brand_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NOT NULL ,
  `domain` VARCHAR(45) NOT NULL ,
  `manager_name` VARCHAR(100) NULL ,
  `manager_email` VARCHAR(255) NULL ,
  PRIMARY KEY (`brand_id`) )
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `location`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `location` ;

CREATE  TABLE IF NOT EXISTS `location` (
  `location_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(255) NOT NULL ,
  `address_line_1` VARCHAR(255) NULL ,
  `address_line_2` VARCHAR(255) NULL ,
  `city` VARCHAR(100) NULL ,
  `state_id` TINYINT UNSIGNED NULL DEFAULT NULL ,
  `postal_code` VARCHAR(10) NULL ,
  `phone_number` VARCHAR(20) NULL ,
  `fax_number` VARCHAR(20) NULL ,
  `lat` DECIMAL(9,6) NOT NULL ,
  `lng` DECIMAL(9,6) NOT NULL ,
  `contact_url` VARCHAR(255) NULL ,
  `brand_id` TINYINT UNSIGNED NOT NULL ,
  `summer_hours` VARCHAR(255) NULL ,
  `winter_hours` VARCHAR(255) NULL ,
  `after_hours_emergency` VARCHAR(255) NULL ,
  `image_file_name` VARCHAR(100) NULL ,
  `manager_name` VARCHAR(100) NULL ,
  `manager_email` VARCHAR(255) NULL ,
  `created_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  PRIMARY KEY (`location_id`) ,
  CONSTRAINT `fk_location_state`
    FOREIGN KEY (`state_id` )
    REFERENCES `state` (`state_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_location_brand`
    FOREIGN KEY (`brand_id` )
    REFERENCES `brand` (`brand_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

CREATE INDEX `fk_location_state` ON `location` (`state_id` ASC) ;

CREATE INDEX `fk_location_brand` ON `location` (`brand_id` ASC) ;

CREATE INDEX `idx_lat` ON `location` (`lat` ASC) ;

CREATE INDEX `idx_lng` ON `location` (`lng` ASC) ;

对我来说看起来不错。我猜测查询浏览器可能有问题,所以我将此文件放在服务器上并尝试以这种方式加载它

] mysql -u admin -p -D dbname < path/to/create_file.sql

我得到同样的错误。所以我开始谷歌这个问题,找到各种帐户谈论 InnoDB 样式表的错误,这些表因外键而失败,解决方法是添加“SET FOREIGN_KEY_CHECKS = 0;”到 SQL 脚本。好吧,正如您所看到的,这已经是 MySQL Workbench 生成的文件的一部分。

所以,我的问题是,为什么当我在做我认为应该做的事情时这不起作用?

版本信息:

  • MySQL:5.0.45

  • 图形用户界面工具:1.2.17
  • 工作台:5.0.30

外键中字段的类型必须与其引用的列的类型相同。您有以下内容(截图):

CREATE  TABLE IF NOT EXISTS `state` (
  `state_id` INT NOT NULL AUTO_INCREMENT ,
...
CREATE  TABLE IF NOT EXISTS `brand` (
  `brand_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
...
CREATE  TABLE IF NOT EXISTS `location` (
...
  `state_id` TINYINT UNSIGNED NULL DEFAULT NULL ,
...
  `brand_id` TINYINT UNSIGNED NOT NULL ,

所以你想参考INT字段(在表中state and brand) with TINYINT表中的字段location。我认为这就是它所抱怨的错误。不知道它最初是如何出现的,或者为什么要归零FOREIGN_KEY_CHECKS不会阻止 MySQL 诊断错误,但是如果修复这种类型不匹配会发生什么?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL:创建表时出现 FK 错误(errno 150) 的相关文章

  • 比较两个表并找到匹配的列

    我有两个表 table1 和 table2 我需要编写一个选择查询 它将列出两个表中存在的列 mysql 我需要为不同的桌子做 一次2个 这可能吗 我尝试使用INFORMATION SCHEMA COLUMNS但我无法做对 SELECT a
  • 导入mysql数据库出错

    我导出我的数据库并导出到另一台计算机使用 phpmyadmin 但它错误 静态分析 分析过程中发现2处错误 意想不到的角色 靠近位置 53 的 无法识别的语句类型 位置 1 的 div 附近 SQL查询 div class error h1
  • MYSQL 中当前行上日期之前(并包括该日期)的所有行的总和

    重要的是要知道在查询期间日期是未知的 因此我不能只硬编码 WHERE 子句 这是我的桌子 Date ID Customer Order Count 20150101 Jones 6 20150102 Jones 4 20150103 Jon
  • MySQL Spatial CONTAINS 显示错误结果

    我的 MySQL 空间搜索有一个奇怪的行为 我在 GEOM 字段 葡萄牙边界 中创建了一个多边形 然后我尝试在内部找到一个点 发现没问题 下一次尝试是查找多边形外部的点 但查询仍返回 1 个找到的行 请帮忙 我做错了什么 为什么它会找到多边
  • 如何从java中的字符串时间戳中提取日期和时间

    我正在获取日期和时间String TIMESTAMP来自服务器的 MySQL 格式如下 2014 02 15 05 18 08 我想要的是提取日期DD MM YYYY格式和时间HH MM SS AM PM格式 而且这个时间戳的时区是不同的
  • 从 MySQL 返回结果时的数字顺序

    我的数据库表中有以下类型的标题 Topic 1 blah blah Topic 2 blah blah Topic 3 blah blah Topic 10 blah blah Topic 11 blah blah etc 选择查询将始终返
  • MySQL 可以存储多少行?

    所以我是一个初学者 刚刚自学了几个月的MySQL 我在工作中总是使用 phpMyAdmin 我过去的工作只涉及大约 100k 行的表 所以没有什么大问题 然而 我的客户现在想要在表中存储大约 800 万行 MySQL phpMyAdmin
  • 如何在 BigQuery/SQL 中将行转置为包含大量数据的列?

    我在将 BigQuery 中的大量数据表 15 亿行 从行转置为列时遇到问题 我可以弄清楚如何在硬编码时使用少量数据来完成此操作 但是对于如此大量的数据 该表的快照如下所示 CustomerID Feature Value 1 A123 3
  • PDO 多查询“SQLSTATE[HY000]:一般错误”

    我仍在学习 PDO 所以我可能会错过一些东西 但基本上我正在尝试将一行插入表中 然后选择生成的 id 我不确定它是否喜欢一个 pdo 语句中的两个查询 这是我用来执行 SQL 的代码 public function ExecuteQuery
  • 数据库设计 - “推”模型,或写时扇出

    背景信息 我正在尝试检索我关注的人的图像 按最新时间排序 它就像 Twitter 新闻源 显示您朋友的最新动态 Plans 目前我只需要考虑一项 那就是图像 将来我计划分析用户的行为并将他们可能喜欢的其他图像添加到他们的提要中等 http
  • 发布数据以同时创建相关的 Tastypie 资源?

    给定两个相关的 Django 模型A and B in a 一对多关系 模型 py class A models Model name models CharField max length 5 class B models Model n
  • MySql 西班牙语字符数据

    我有一个包含西班牙语字符的数据库 为了填充数据库 我从字符编码 UTF 8 的客户端页面获取值 当我在 mySql 数据库中插入值时 行包含更改的数据 例如 如果我插入 M xico 数据库中的条目是 M xico 其影响是当我对指定 M
  • 无法将外键值插入链接表

    我目前正在尝试将数据插入名为的表中 客户报价 该表充当 顾客 表和 客户关税 桌子 它还记录通过以下方式提交数据的用户 user table 这是我的数据库的架构 https i stack imgur com gyCdb png http
  • mysql 将 varchar 字段排序为整数

    我的表中有一个 varchar 字段 我想对其进行排序 但我需要将此字段作为整数处理 意思是如果按文本排序 顺序是 19 2 20 但我想得到正确的顺序 2 19 20 谁能帮我 我不知何故没有设法运行查询CAST 我总是得到Error C
  • MySql 5.7 函数 UUID() 默认排序规则 - 非法混合排序规则

    Problem MySQL uuid 默认排序规则与配置连接排序规则不进行比较 我有一个使用字符集创建的数据库 表 字段 utf 8和排序规则utf8 polish ci my cnf 如下 init connect SET NAMES u
  • 在关系数据库中存储 1:1 用户关系的最佳方式

    存储用户关系的最佳方式是什么 例如友谊 在关系中必须是双向的 你是我的朋友 因此我是你的朋友 数据库 例如MYSql 我可以想到两种方法 每当一个用户与另一个用户成为好友时 我都会向数据库添加两行 其中 A 行由发起用户的用户 ID 和下一
  • mysql - 选择日期时间和组中的小时

    我有一个 ShoppingDates 的日期时间列 假设我有 1000 行 2012 年 7 月 18 日 5 33 39 下午 2012 年 7 月 16 日 6 64 39 下午 2012 年 7 月 14 日 7 34 39 下午 2
  • MySQL Workbench 深色主题

    我刚刚开始学习 SQL 课程 并且一直在尝试不同的 GUI 我喜欢使用 MySQL Workbench 但白色背景刺瞎了我的眼睛 我已经搜索并找到了一些其他讨论编辑 xml 文件的相关帖子 我尝试用几种不同的方式对其进行编辑 但无济于事 我
  • PHP 和 MySql 检查表是否为空

    我有点菜鸟 而且我很难过 我需要一些代码来搜索数据库表以查找与 id 变量匹配的行 我需要抓取该表 描述 中的一个字段 如果它为空 我需要显示一条消息 如果不是另一条消息 这是我的代码 我知道我需要添加 mysqli 转义字符串 只需从内存
  • Elastic Beanstalk 上的 Django + MySQL - 查询 MySQL 时出错

    当我在 Elastic beanstalk 上托管的 Django 应用程序上查询 MySQL 时 出现错误 错误说 admin login 处出现操作错误 1045 用户 adminDB 172 30 23 5 的访问被拒绝 使用密码 Y

随机推荐

  • X-Editable 在成功更新后将“空”

    我正在使用 X Editable 插件在表格上进行内联编辑 但遇到了一个恼人的问题 请求成功并更新成功后 插件会在表格单元格上放置 空 而不是正确的更新值 我的网站很安静 所以我正在对 URL 执行 PUT 请求 例如http exampl
  • 如何在 Eclipse Kepler 中添加 Web Tools Platform(WTP)

    我安装了Eclipse Kepler在我的系统中 到目前为止我开发了J2SE应用 现在我想发展J2EE应用程序 所以我需要添加WTP在我的日食中 我尝试添加WTP在已经存在的 eclipse 中 为此 我通过以下方式打开安装对话框并提及Na
  • 如何在 Eclipse 中注释块?

    Eclipse 有评论块的热键吗 并取消注释块 Ctrl to toggle comments and Ctrl Shift to toggle comments At least for Java anyway other tooling
  • 为什么set_xticks不设置刻度的标签?

    import matplotlib pyplot as plt x range 1 7 y 220 300 300 290 320 315 def test axes axes bar x y axes set xticks x i 100
  • 使用 DX Compositor 的 UWP 应用程序实时模糊背景

    因此 UWP 合成支持已经有一段时间了 我正在寻找一种对元素进行实时模糊的方法 在移动或加载时进行实时模糊 而不是静态快照 到目前为止 我一直在 stackoverflow 和 google 上查看一些答案 这导致我使用Lumia 成像 S
  • Android Admob 插页式内存泄漏

    我试图在某些活动结束时显示插页式广告 问题是插页式广告似乎阻止了活动被垃圾收集 从而导致内存不足异常 我该如何解决这个问题 提前致谢 public class AdActivity extends FragmentActivity prot
  • 如何更改日期格式

    我需要将日期格式更改为 dd mm YYYY HH mm ss 目前我得到的是 YYY mm dd HH mm ss 任何人都可以帮我解决这个问题吗 for var course in data if data course days va
  • WCF服务自定义配置

    在托管多个 WCF 服务的应用程序中 为每个服务添加自定义配置信息的最佳方法是什么 例如 您可能想要传递或设置公司名称或指定服务或某些其他参数的连接字符串 我猜想通过实现 IServiceBehavior 这可能是可能的 即类似
  • 创建一个 html 表格,动态扩展列数以适应屏幕尺寸

    我有很长的数据列表 例如 国家及其缩写 我想在 HTML 表中显示 我不想在 2 x 50 表中显示数据 而是希望它在更大的屏幕上更紧凑 这样用户就不必上下滚动 但仍然不必水平滚动 所以这会动态增长 State Ab Alabama AL
  • 试图理解sql查询中的“除了所有”

    我看到这个例子 但我不明白它的意思 SELECT drinker FROM Frequents EXCEPT ALL SELECT drinker FROM Likes 关系 经常 饮酒者 酒吧 喜欢 饮酒者 啤酒 在这种情况下 ALL 会
  • 纯 CSS 中旋转图像背后的纯色背景

    有没有办法可以使用纯 CSS 绘制图像后面的黑色 背景 我确信可以使用 before伪类 但我无法让它发挥作用 我也尝试过使用阴影 但最终结果与我想要达到的效果并不相似 范围及要求 现代浏览器 没有 javascript 没有 jQuery
  • CSS-目标文本链接在悬停时具有底部边框,但图像链接没有边框

    我希望能够在鼠标悬停时使用 border bottom 来定位 CSS 中的文本链接 但所有图像链接在悬停时都没有边框 所以 a href img src image png a gt this should not have a bott
  • 使用 PyYAML 库解析 AWS CloudFormation 模板

    我正在使用 PyYAML 库编写一个自定义 Python 应用程序 该应用程序需要读取 AWS CloudFormation YAML 模板 我知道这些模板是有效的 CloudFormation 模板 因为我使用 validate temp
  • Lego Mindstorm NXT 2.0:“错误:NXT 蓝牙密钥确认失败”

    运行 Windows 7 和 Lego Mindstorms NXT 2 0 IDE Windows 蓝牙管理器显示 NXT 已连接 并且 NXT 显示在 Windows 蓝牙设备列表中 然而 当我尝试从 Lego IDE 进行连接时 我收
  • 通过基类专门化类模板

    我将我的疑问提炼为以下代码 struct base struct derived public base template
  • 如何编写Thunderbird扩展(webextension)来修改消息显示?

    我想为 Thunderbird 编写一个扩展来修改消息显示 例如插入 替换文本 标记 图像 不幸的是 缺少文档 由于最近的更改 https developer mozilla org en US docs Mozilla Thunderbi
  • 我们如何获取 Android 的设备令牌以进行推送通知?

    我想在我的应用程序中实现推送通知 我想知道 启用谷歌云消息传递API后 我们如何在android中获取推送通知的设备令牌 我们如何获取特定设备的设备令牌 try InstanceID instanceID InstanceID getIns
  • 单一型号的 Carrierwave 多个上传器

    我在本教程的帮助下创建了一个画廊模块https kolosek com rierwave upload multiple images https kolosek com carrierwave upload multiple images
  • 当 module-info.java 文件存在时,无法访问 JavaFX 16 中的资源文件

    我刚刚开始使用 Java 16 似乎不明白为什么我无法访问资源文件 我进行了一些故障排除 至少缩小了我似乎遇到问题的范围 我正在使用 IntelliJ IDEA 2021 2 内部版本 IU 212 4746 92 我创建了一个新项目 并选
  • MySQL:创建表时出现 FK 错误(errno 150)

    我创建了一个模型MySQL工作台 http dev mysql com workbench 现在我正在尝试将其安装到 mysql 服务器 Using 文件 gt 导出 gt 正向工程 SQL CREATE 脚本 它为我输出了一个不错的大文件