首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

获取以下错误“150”外键约束在控制台上格式不正确“”

错误“150”通常与MySQL数据库中的外键约束有关。这个错误提示表明在尝试创建外键约束时,MySQL无法正确解析或验证外键定义。以下是关于这个错误的基础概念、可能的原因以及解决方案。

基础概念

外键约束:外键是表中的一个字段或字段组合,其值必须匹配另一个表的主键值。外键约束用于确保引用完整性,即在一个表中的数据必须与另一个表中的数据相匹配。

可能的原因

  1. 数据类型不匹配:外键列和参照的主键列的数据类型必须完全相同。
  2. 索引问题:参照的主键列必须有索引。
  3. 字符集和排序规则不一致:外键列和参照的主键列的字符集和排序规则必须一致。
  4. 表引擎不支持:某些存储引擎(如MyISAM)不支持外键约束。
  5. 语法错误:SQL语句中可能存在语法错误。

解决方案

检查数据类型

确保外键列和参照的主键列的数据类型完全相同。

代码语言:txt
复制
CREATE TABLE parent (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE child (
    id INT PRIMARY KEY,
    parent_id INT,
    FOREIGN KEY (parent_id) REFERENCES parent(id)
);

确保主键有索引

参照的主键列必须有索引。

代码语言:txt
复制
CREATE TABLE parent (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE child (
    id INT PRIMARY KEY,
    parent_id INT,
    FOREIGN KEY (parent_id) REFERENCES parent(id)
);

检查字符集和排序规则

确保外键列和参照的主键列的字符集和排序规则一致。

代码语言:txt
复制
CREATE TABLE parent (
    id INT PRIMARY KEY,
    name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);

CREATE TABLE child (
    id INT PRIMARY KEY,
    parent_id INT,
    FOREIGN KEY (parent_id) REFERENCES parent(id)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

使用支持外键的存储引擎

确保使用的存储引擎支持外键约束,如InnoDB。

代码语言:txt
复制
CREATE TABLE parent (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=InnoDB;

CREATE TABLE child (
    id INT PRIMARY KEY,
    parent_id INT,
    FOREIGN KEY (parent_id) REFERENCES parent(id)
) ENGINE=InnoDB;

检查SQL语法

仔细检查SQL语句,确保没有语法错误。

代码语言:txt
复制
CREATE TABLE parent (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE child (
    id INT PRIMARY KEY,
    parent_id INT,
    FOREIGN KEY (parent_id) REFERENCES parent(id)
);

应用场景

外键约束广泛应用于需要维护数据完整性的关系型数据库中,例如:

  • 电子商务系统:订单表中的客户ID必须存在于客户表中。
  • 社交网络应用:用户表中的好友ID必须存在于用户表中。
  • 库存管理系统:产品表中的供应商ID必须存在于供应商表中。

通过以上步骤,您应该能够解决“150”外键约束错误。如果问题仍然存在,建议查看MySQL的详细错误日志,以获取更多线索。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ETL测试或数据仓库测试入门

(primary key)、外键(foreign key)、替代键(alternate key)、复合键(composite key)以及代理键(surrogate key)。...ETLTestingProcess.png ETL测试过程主要分为以下五大阶段: 分析需求、业务和源数据 获取数据 实现业务逻辑和维度建模 构建和填充数据 生成报告 ETL测试类型 Production...系统无法运行在用户的平台上 8 版本控制bug 1. 无匹配标识2. 没有可用的版本信息3....一般版本控制bug发生在回归测试时 9 硬件问题 一般发生在应用程序不兼容设备 10 文档错误bug 错误的帮助文档信息 ETL测试与数据库测试的不同 序号 ETL测试 数据库测试 1 验证数据是否按照预期进行了移动...主要验证数据是否遵循了设计预定的数据模式规则或标准 2 验证数据经过业务转换后是否满足预定的转换逻辑以及验证源和目标数据计算是否一致 主要表的主、外键等越苏是否正常 3 验证ETL过程数据表的主外键关系是否保存

1.5K50

ETL测试或数据仓库测试入门

(primary key)、外键(foreign key)、替代键(alternate key)、复合键(composite key)以及代理键(surrogate key)。...ETLTestingProcess.png ETL测试过程主要分为以下五大阶段: 分析需求、业务和源数据 获取数据 实现业务逻辑和维度建模 构建和填充数据 生成报告 ETL测试类型 Production...系统无法运行在用户的平台上 8 版本控制bug 1. 无匹配标识2. 没有可用的版本信息3....一般版本控制bug发生在回归测试时 9 硬件问题 一般发生在应用程序不兼容设备 10 文档错误bug 错误的帮助文档信息 ETL测试与数据库测试的不同 序号 ETL测试 数据库测试 1 验证数据是否按照预期进行了移动...主要验证数据是否遵循了设计预定的数据模式规则或标准 2 验证数据经过业务转换后是否满足预定的转换逻辑以及验证源和目标数据计算是否一致 主要表的主、外键等越苏是否正常 3 验证ETL过程数据表的主外键关系是否保存

1.4K61
  • ETL测试或数据仓库测试入门

    (primary key)、外键(foreign key)、替代键(alternate key)、复合键(composite key)以及代理键(surrogate key)。...ETLTestingProcess.png ETL测试过程主要分为以下五大阶段: 分析需求、业务和源数据 获取数据 实现业务逻辑和维度建模 构建和填充数据 生成报告 ETL测试类型 Production...系统无法运行在用户的平台上 8 版本控制bug 1. 无匹配标识2. 没有可用的版本信息3....一般版本控制bug发生在回归测试时 9 硬件问题 一般发生在应用程序不兼容设备 10 文档错误bug 错误的帮助文档信息 ETL测试与数据库测试的不同 序号 ETL测试 数据库测试 1 验证数据是否按照预期进行了移动...主要验证数据是否遵循了设计预定的数据模式规则或标准 2 验证数据经过业务转换后是否满足预定的转换逻辑以及验证源和目标数据计算是否一致 主要表的主、外键等越苏是否正常 3 验证ETL过程数据表的主外键关系是否保存

    1.7K61

    大数据测试之ETL测试入门

    (primary key)、外键(foreign key)、替代键(alternate key)、复合键(composite key)以及代理键(surrogate key)。...ETLTestingProcess.png ETL测试过程主要分为以下五大阶段: 分析需求、业务和源数据 获取数据 实现业务逻辑和维度建模 构建和填充数据 生成报告 ETL测试类型 Production...系统无法运行在用户的平台上 8 版本控制bug 1. 无匹配标识2. 没有可用的版本信息3....一般版本控制bug发生在回归测试时 9 硬件问题 一般发生在应用程序不兼容设备 10 文档错误bug 错误的帮助文档信息 ETL测试与数据库测试的不同 序号 ETL测试 数据库测试 1 验证数据是否按照预期进行了移动...主要验证数据是否遵循了设计预定的数据模式规则或标准 2 验证数据经过业务转换后是否满足预定的转换逻辑以及验证源和目标数据计算是否一致 主要表的主、外键等越苏是否正常 3 验证ETL过程数据表的主外键关系是否保存

    3K92

    ETL测试或数据仓库测试入门

    (primary key)、外键(foreign key)、替代键(alternate key)、复合键(composite key)以及代理键(surrogate key)。...ETLTestingProcess.png ETL测试过程主要分为以下五大阶段: 分析需求、业务和源数据 获取数据 实现业务逻辑和维度建模 构建和填充数据 生成报告 ETL测试类型 Production...系统无法运行在用户的平台上 8 版本控制bug 1. 无匹配标识2. 没有可用的版本信息3....一般版本控制bug发生在回归测试时 9 硬件问题 一般发生在应用程序不兼容设备 10 文档错误bug 错误的帮助文档信息 ETL测试与数据库测试的不同 序号 ETL测试 数据库测试 1 验证数据是否按照预期进行了移动...主要验证数据是否遵循了设计预定的数据模式规则或标准 2 验证数据经过业务转换后是否满足预定的转换逻辑以及验证源和目标数据计算是否一致 主要表的主、外键等越苏是否正常 3 验证ETL过程数据表的主外键关系是否保存

    2.3K50

    MySql数据库约束

    在InnoDB存储引擎中,域完整性可以通过以下途径来保证:   a. 选择适合的数据类型确保一个数据值满足条件   b. 外键(Foreign Key)约束   c. 编写触发器   d....约束的创建和查找   约束的创建有以下两种方式:   (1)表建立时就进行约束定义   (2)利用alter table命令来进行创建约束   以下几点需要关注和注意:   a....对错误数据的约束   在某些默认设置下,MySql数据库允许非法或不正确的数据的插入或更新,又或者可以在数据库内部将其转化为一个合法的值,如向not null的字段插入一个null值,MySql数据库会将其更改为...外键约束 外键用来保证参照完整性,MySQL数据库的MyIsAM存储引擎本身并不支持外键,对于外键的定义只是起到一个注释的作用,而InonoDB存储引擎则完整支持外键约束。...,不允许这类操作发生 (4)RESTRICT   表示父表发生delete或update操作时,抛出错误,不允许这类操作发生,如果定义外键时没有指定on delete或on update,RESTRICT

    1.2K10

    hhdb数据库介绍(9-6)

    全局唯一约束若开启全局唯一约束功能,计算节点可以保证拥有唯一约束(UNIQUE、PRIMARY KEY)的列在所有节点都是唯一的,包括但不限于以下场景:唯一约束键不是分片字段或不包含分片字段父子表下,子表与父表的关联字段与子表的唯一约束键不是同一列计算节点将全局唯一约束优化精确到表级别...创建表时的表级别控制添加表信息时可以为某张表单独开启/关闭全局唯一约束1.在管理平台上添加表信息时,根据计算节点参数默认显示全局唯一约束开关状态,可手动修改:垂直分片表与全局表没有此入口,因为不需要对唯一约束做额外处理...开启后,在变更方案预检会检测此表唯一约束键的历史数据是否唯一,若唯一,则通过测试。...包括主从存储节点的数据不一致,和数据节点之间的数据不一致:1.人为操作(1)人为或应用程序直接操作存储节点,可能导致任意类型的不一致;(2)使用HINT语句操作数据,可能导致任意类型的不一致;(3)未正确使用外键约束...binlog、部分复制、多主复制、配置不正确的二级从、主从或节点间字符集、时区配置不一致等;(5)在没有开启全局唯一约束的情况下,不含分片字段的唯一键无法保证全局唯一;3.

    7910

    SQL表之间的关系

    SQL表之间的关系要在表之间强制执行引用完整性,可以定义外键。修改包含外键约束的表时,将检查外键约束。定义外键有几种方法可以在InterSystems SQL中定义外键:可以定义两个类之间的关系。...定义关系会自动将外键约束投影到SQL。可以在类定义中添加显式外键定义(对于关系未涵盖的情况)。可以使用CREATE TABLE或ALTER TABLE命令添加外键。...外键引用完整性检查外键约束可以指定更新或删除时的引用操作。 在CREATE TABLE reference action子句中描述了使用DDL定义这个引用操作。...参照完整性检查失败会生成如下错误:错误#5540:SQLCODE:-124消息:表'HealthLanguage.FKey2'中至少存在1行,该行引用键NewIndex1-外键约束'NewForeignKey1...如果发生这种情况,外键将引用不存在的行。如果使用NoCheck定义外键,或者使用%NOCHECK或%NOLOCK指定引用行的DELETE,则不会获取此锁定。

    2.5K10

    2020年MySQL数据库面试题总结(50道题含答案解析)

    InnoDb: (1)支持 ACID 的事务,支持事务的四种隔离级别; (2)支持行级锁及外键约束:因此可以支持写并发; (3)不存储总行数: (4)一个 InnoDb 引擎存储在一个文件空间(共享表空间...每当行被更改时,时间戳字段将获取当前时间戳。 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况? 它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。...分为以下四类: (1)实体完整性: 规定表的每一行在表中是惟一的实体。 (2)域完整性: 是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。...若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。...主键、外键和索引的区别 定义: 主键——唯一标识一条记录,不能有重复的,不允许为空 外键——表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引——该字段没有重复值,但可以有一个空值 作用:

    4K20

    MySQL 给你问懵了?50 道 MySQL 高频面试题详解来了

    InnoDb: (1)支持 ACID 的事务,支持事务的四种隔离级别; (2)支持行级锁及外键约束:因此可以支持写并发; (3)不存储总行数: (4)一个 InnoDb 引擎存储在一个文件空间(共享表空间...每当行被更改时,时间戳字段将获取当前时间戳。 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况? 它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。...分为以下四类: (1)实体完整性:规定表的每一行在表中是惟一的实体。 (2)域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。...若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。...主键、外键和索引的区别 定义: 主键——唯一标识一条记录,不能有重复的,不允许为空 外键——表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引——该字段没有重复值,但可以有一个空值 作用:

    2.7K11

    MySQL 8.0有趣的新特性:CHECK约束

    (例外:一个临时表可能使用与非临时表一样的约束名称) CHECK的条件表达式必须遵守以下规则,如果包含不允许的结构,将会触发错误: 非生成列和生成列允许被添加到表达式,但包含AUTO_INCREMENT...CONNECTION_ID(),CURRENT_USER(),NOW() 存储函数和用户自定义函数不被允许 存储过程不被允许 变量:系统变量、用户自定义变量和存储过程的本地变量均不被允许使用 子查询不应许被使用 外键参考动作...,如:ON UPDATE, ON DELETE被禁止在包含CHECK约束的列使用,相应的,CHECK约束也被禁止在使用外键参考动作的列使用 CHECK约束在插入、更新、替换(REPLACE)和LOAD...,在提前数据库前检查 一般性的,选择不同方式的原则如下: 如果CHECK约束可以实现,且约束比较稳定,一般用CHECK约束实现,比如:年龄不允许为负数,不允许>150等,比如: CREATE TABLE...CHECK (ID>=1 AND PID >=0); -- remove check ALTER TABLE Departments DROP CHECK CHK_PID; 如果属于数据库逻辑,比如:审计,外键可以使用触发器

    1.1K30

    SqlAlchemy 2.0 中文文档(四十)

    在 SQLAlchemy 中以及在 DDL 中,外键约束可以被定义为表子句中的附加属性,或者对于单列外键,它们可以选择地在单列的定义中指定。...在 SQLAlchemy 以及 DDL 中,外键约束可以作为表子句中的附加属性来定义,或者对于单列外键,它们可以选择地在单列的定义中指定。...请参见 关于与 ORM relationship() 构造的 ON DELETE CASCADE 集成的背景,请参见以下各节: 使用 ORM 关系中的外键 ON DELETE cascade 在多对多关系中使用外键...另见 关于将 ON DELETE CASCADE 与 ORM relationship() 构造集成的背景信息,请参见以下部分: 使用 ORM 关联的外键 ON DELETE cascade 在多对多关系中使用外键...关于外键配置的更多示例在定义外键中。

    26410

    PostgreSQL 13.0-13.15 功能更新和bug fixed列表

    版本号 BUG FIXED/功能更新 PG13.0 wal_keep_segments 改名为 wal_keep_size PG13.0 移除了7.0 8.0 之前的语法定语的运算符支持和外键约束的支持...修复涉及作为外键表的继承子表的常规表的查询的规划错误 PG13.4 在WAL重放事务中引起文件截断时更新最低恢复点文件截断是不可逆转的,因此不再安全地在该记录之前停止恢复。...ALTER TABLE ATTACH PARTITION时修复构建每个分区外键约束的bu PG13.9 修复在创建分区索引时匹配索引表达式和谓词的错误 PG13.9 修复为每个分区外键约束生成约束名称的...PG13.12 避免为伪常数连接子句的外键关联生成不正确的计划,计划器目前不支持在推送下降的远程连接中附加伪常数连接子句的支持,因此在这种情况下禁用生成远程连接。...PG13.14 修复在 PlaceHolderVars 中错误包装子查询输出表达式的问题,此修复解决了在子查询位于外连接下方且其输出列横向引用了外连接范围外的内容时产生错误结果的问题。

    14010

    java数据库的介绍和使用_java实现数据库的查询

    --MySql在Liunx/Unix平台上严格区分字符型数据大小写,但是在window平台上不区分字符型数据大小写 --可以使用BINARY关键字,让MySql在window平台上也严格字符字符型数据的大小写...check(sex='男' or sex='女')--(mysql不支持) /* 引用完整性 */ --外键约束 alter table 左表 add foreign key(左表的某个字段) references...--2.外键的名字可以不相同 --3.外键的数据类型必须与主表中主键的数据类型完全相同 --4.外键可以是null值 /* 表与表之间的关系 */ --1.一对多: 一张表中的一条记录再另一张表中出现多次...--2.多对多: 要想两张表之间实现多对多的关系,必须有一张中间表,通过中间表创建与两张表的外键约束,实现多个一 对多,使用这种方式创建外键约束,非常适合实现多个一对多。...--3.一对一:一张表里的记录,在另外一张表里只能出现一次.表和表之间的关系必须通过外键来创建,但是外键一创建就是一对多,因此在从表里将外键设置唯一性约束,实现一对一 版权声明:本文内容由互联网用户自发贡献

    1.3K30

    SQL命令 INSERT(二)

    如果此类型的字段是外键约束的一部分,则会在插入期间计算此字段的值,以便执行引用完整性检查;不会存储此计算值。...这可以使用以下命令来完成: INSERT INTO Mytable DEFAULT VALUES 使用NOT NULL约束定义的字段和未定义的默认值使用SQLCODE-108使此操作失败。...例如,如果插入指定行中的一行会违反外键引用完整性,则插入将失败,并且不会插入任何行。此默认值是可修改的,如下所述。...但是,如果Source有一个外键public RowID,则不会为目标表保留外键关系。 目的地将拥有新的系统生成的RowIDs。...如果Source具有外键public RowID,并且希望Destination具有相同的外键关系,则必须使用ALLOWIDENTITYINSERT=1参数定义Destination。

    3.4K20

    国产数据库兼容过程中涉及的MySQL非严格模式

    简单举例 以下是一些非严格模式下可能出现的案例情况: 1) 非严格的日期和时间插入:在非严格模式下,MySQL允许插入不符合日期和时间格式的值,会自动进行转换或舍入 eg: 不合法的日期值'0000...可以插入150,且插入后的值自动截断为 127 4) 非严格的零值插入:在非严格模式下,MySQL允许插入字符串类型的值到数值类型字段,会将非数值字符串转换为0 (建议已开启此类严格模式) eg:...NULL值进行比较,这可能导致不确定的结果 (建议已开启此类严格模式) eg: column_name =NULL 或者 column_name NULL 7) 非严格的外键约束:在非严格模式下...,MySQL对外键约束的检查较为宽松,可能会允许插入或更新关联字段中不存在的值。...(建议已开启此类严格模式) eg: tb表外键字段指向ta表的主键,如果tb表的外键字段插入的内容不存在于a表中时也可以写入成功 8) 非严格的除数为0校验:在非严格模式下,MySQL允许除数为0

    36120

    bug常识入门

    ; (6)数据通讯错误; (7)页面出现黄页; (8)业务流程; (9)程序错误; (10)程序接口错误; (11)数据库的表、业务规则、缺省值未加完整性等约束条件; (12)由于程序所引起的死机; 中级错误...中级一较严重错误,系统基本能正常工作但同一错误现象频繁出现或者问题不解决时会给后续工作带来较大风险,包括以下各种错误: (1)操作界面错误(包括数据窗口内列名定义、含义是否一致); (2)打印内容、格式错误...; (3)简单的输入限制未放在前台进行控制; (4)删除操作未给出提示; (5)数据库表中有过多的空字段; (6)JS不稳定 低级错误 低级—较小错误,不影响系统功能,但影响系统的易用性(如界面美观问题...如需求获取不完整,获取的需求歧义等。...用户界面 不合理的界面布局、色调、缩进、对齐方式,注释和拼写错误;不适当的错误提示信息、人机交互方式;指定的功能键不能工作;不正确的菜单导向;缺少必要的效验;没有联机帮助等。

    85220

    MySQL经典52题

    InnoDb:支持ACID的事务,支持事务的四种隔离级别;支持行级锁及外键约束:因此可以支持写并发;不存储总行数;一个InnoDb引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里...每当行被更改时,时间戳字段将获取当前时间戳。10.列设置为AUTO INCREMENT时,如果在表中达到最大值,会发生什么情况?它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。...分为以下四类:实体完整性:规定表的每一行在表中是惟一的实体。域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。...若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。...1、从定义上却分主键:唯一标识一条记录,不能有重复的,不允许为空外键:表的外键是另一表的主键, 外键可以有重复的, 可以是空值索引:该字段没有重复值,但可以有一个空值2、从作用上区分主键:用来保证数据完整性外键

    11410
    领券