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

外键在MySQL中不起作用:为什么我可以插入不在外部列中的值?

在MySQL中,外键约束是一种用于确保数据完整性的机制。外键约束可以在两个表之间建立关系,并确保在一个表中的值存在于另一个表中的外键列中。

如果在MySQL中插入不在外部列中的值,可能的原因是外键约束没有启用或者被禁用。要启用外键约束,可以使用以下命令:

代码语言:txt
复制
SET FOREIGN_KEY_CHECKS = 1;

这个命令将启用外键约束,并确保只有在外部列中存在的值才能插入到表中。

如果您想要在MySQL中插入不在外部列中的值,可以临时禁用外键约束,如下所示:

代码语言:txt
复制
SET FOREIGN_KEY_CHECKS = 0;

这个命令将禁用外键约束,并允许您插入任何值。但是,请注意,禁用外键约束可能会导致数据不一致和完整性问题,因此应谨慎使用。

总之,如果您在MySQL中插入不在外部列中的值,请确保外键约束已启用。如果需要插入这些值,可以临时禁用外键约束,但请注意风险。

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

相关·内容

约束

,,让某字段在整个表中是唯一的 PRIMARY KEY #主键约束 FOREIGN KEY #外键约束 CHECK #检查约束 8.0才支持的,5.7还不支持 DEFAULT #默认值约束 非空约束 建表的时候给它约束...主键约束的列不允许重复,也不允许出现空值 一个表最多有一个主键约束,建立主键约束可以在列级别创建,也可以在表级别创建 主键约束对应表中的一列或者多列(复合主键) MySQL的主键名总是PRIMARY,自己命名了也没有用...FOREIGN KEY约束 外键约束 外键约束会涉及到主表和从表 主表(父表):被引用的表 从表(子表):引用别人的表 从表的外键必须引用主表的主键或者唯一性约束的列 在创建外键的时候,如果不给外键约束的话...在阿里开发规范中:不得使用外键约束与级联,一切外键概念必须在应用层解决 CHECK约束 检查模字段的值是否复合要求 MySQL5.7可以支持该约束,但是不起作用。...但是在MySQL8.0中就可以使用check约束了 DEFAULT约束 指定某个字段默认值,意思就是当该字段没有插入数据的时候,使用默认值 就是在后面加上default

80520

-基础面试题总结

truncate (清空数据) : truncate table 表名 ,只删除表中的数据,再插入数据的时候自增长 id 又从 1 开始,在清空表中数据的时候使用。...外键(外码) :外键用来和其他表建立联系用,外键是另一表的主键,外键是可以有重复的,可以是空值。一个表可以有多个外键。 6. 为什么不推荐使用外键与级联?...外键与级联更新适用于单机低并发,不适合分布式、高并发集群; 级联更新是强阻塞,存在数据库更新风暴的风 险; 外键影响数据库的插入速度 为什么不要用外键呢?...所以,我觉得这个影响可以忽略不计。) 外键还会因为需要请求对其他表内部加锁而容易出现死锁情况; 对分库分表不友好 :因为分库分表下外键是无法生效的。 .........我个人觉得上面这种回答不是特别的全面,只是说了外键存在的一个常见的问题。

66450
  • MySQL从删库到跑路_高级(一)——数据完整性

    D、自定义完整性:用户自己定义的业务规则,比如使用触发器实现自定义业务规则。 ? 2、数据完整性实现方式 ? MySQL不支持Check约束,虽然可以在列上添加check约束,但不起作用。...B、唯一值约束:一张表可以有多个列添加唯一值约束,一直允许一条记录为空值。 实体完整性,由主键和唯一性约束来实现,确保表中记录有一列唯一标识。...MyISAM类型的存储引擎不会在主键列上创建索引,表中记录的存储顺序与插入顺序相同。 ? InnoDB存储引擎会自动在主键列上创建索引,插入的记录会根据主键的值的顺序排放。...四、参照完整性 1、参照完整性简介 MySQL参照完整性一般是通过MySQL外键(foreign key)实现的。 外键(仅innoDB支持)所引用表的列必须是主键。...如果外键约束指定了参照动作,主表记录做修改,删除,从表引用的列会做相应修改,或不修改,拒绝修改或设置为默认值。 引用表的列名必须是主键,且在删除引用表时必须删除引用关系或者删除当前表。

    1.9K20

    MySQL中MyISAM与InnoDB存储的区别

    .2 MyISAM特点 不支持行锁(MyISAM只有表锁),读取时对需要读到的所有表加锁,写入时则对表加排他锁; 不支持事务 不支持外键 不支持崩溃后的安全恢复 在表有读取查询的同时,支持往表中插入新纪录...所以在InnoDB上执行count(*)时一般要伴随where,且where中要包含主键以外的索引列。为什么这里特别强调“主键以外”?...(例如外键)的表不适用 对AUTO_INCREMENT的操作 每表一个AUTO_INCREMEN列的内部处理。...(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。...AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引

    1.3K10

    MySQL存储引擎之Myisam和Innodb总结性梳理

    3.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键...MyISAM为INSERT和UPDATE操 作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不 能再利用。...(当AUTO_INCREMENT列被定义为多列索引的最后一列, 可以出现重使用从序列顶部删除的值的情况)。...AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但 是在MyISAM表中,可以和其他字段一起建立联...2)MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用 3)InnoDB支持外键,MyISAM不支持 4)从MySQL5.5.5以后,InnoDB是默认引擎 5)

    98950

    MySQL:表的约束

    默认值default 默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。...对于default而言,当用户忽略这一列的时候,如果设置了default,则使用默认值;如果没有设置default,则报错。 而对于age列: 下来再来看这个: 为什么还是让插入了呢?...并且建表之后添加主键需要保证在表中需要设置主键的那列元素不能冲突。...外键 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。...外键需要注意: (1)从表和主表的关联关系 (2)产生外键约束 总结: 好了,到这里今天的知识就讲完了,大家有错误一点要在评论指出,我怕我一人搁这瞎bb,没人告诉我错误就寄了。

    6710

    MySQL常见约束条件「建议收藏」

    约束条件:限制表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败!...约束条件在创建表时可以使用, 也可以修改表的时候添加约束条件 1、约束条件分类: 1)not null :非空约束,保证字段的值不能为空 s_name VARCHAR(10) NOT NULL...id INT PRIMARY KEY,#主建约束(唯一性,非空) 6)foreign key:外键约束,用于限制两个表的关系,保证从表该字段的值来自于主表相关联的字段的值!...teacher_id INT REFERENCES teacher(id) #这是外键,写在列级,Mysql无效 注意 1....列级约束 上面6种约束都可以写,语法都支持,不报错,但外键约束写了mysql无效不起作用 2. 表级约束 非空、默认不支持,其他都可以!

    1.6K40

    【MySQL】MySQL数据库的初阶使用

    enum在插入数值时,除插入枚举所给的选项外,也可以插入每个选项值对应的数字,从1开始依次向后为每个选项对应的数字下标。...可以看到在插入数据时,如果你插入的gender字段不在枚举选项里面,则MySQL会直接拦截你对数据的插入,这再一次说明了类型本身就是约束,同时也可以看到枚举选项也可以用数字下标来代替,例如12分别代表枚举选项中的男和女...建表的时候,可以在圆括号外面指定自增长的初始值,如果没指明也没有关系,默认从1开始,在插入数据的时候,我们可以忽略有自增长字段的列,该列会自动每次从当前字段中已有的最大值,加上1然后分配给新插入的数据。...当建立外键约束后,外键为stu表中的class_id,引用自class表中的id,如果此时将学生插入到不存在的班级,或者删除某个班级,一个学生插入到两个班级等等不合逻辑的操作,都会被MySQL拦截掉,保证表与表之间正确的关联关系...其实这里的外键,个人觉得和复合主键有那么一点点相似,必须保证外键和引用之间的唯一性,但外键的约束显然是要比复合主键更严格的,比如删除引用(引用中还存在着外键)是不被允许的,一个外键列中的字段只能配一个引用列中的字段

    34630

    MySQL实战七:你不知道的外键与约束使用!

    2.2 外键 2.2.1 创建外键 (1)不带别名的外键,数据库自动生成 首先创建department表: CREATE TABLE department ( dept_name varchar...,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的。...学习 cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表(子表)中也更新,主键表(父表)中的记录被删除,外键表(子表)中改行也相应删除。...上述on delete cascade换成on update cascade,可以发现只能更新父表的主键,同时父子表数据都会被更新,但是在子表的外键上做更新操作无效!...而on update只能删除子表外键数据,不能删除父表主键数据,只能更新父表的主键,同时父子表数据都会被更新,但是在子表的外键上做更新操作无效。

    4.3K20

    SQL重要知识点梳理!

    数据库的话我只对MySQL有些熟悉,因此我们以MySQL为主进行知识点的整理。...MySQL数据库-基础知识 1.说说主键、外键、超键、候选键的差别并举例 超键(super key): 在关系中能唯一标识元组的属性集称为关系模式的超键。...外键(foreign key):如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键。...主键:就是用户从很多候选键选出来的一个键就是主键,比如你要求学号是主键,那么身份证号就不可以是主键了! 外键:宿舍号就是学生信息表的外键。 2.为什么一般用自增列作为主键?...第二范式:(确保表中的每列都和主键相关)在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中,数据表里的非主属性都要和这个数据表的候选键有完全依赖关系。

    82020

    【Mysql】:linux环境下表的三部曲(数据操作 + 类型解析 + 约束规则)

    表内外约束:创建表时,除了在表内设置 auto_increment 约束外,还可以在表外设置 auto_increment 的值,这代表下一次插入的起始值。...产生外键约束 为什么需要外键约束?...外键 用于定义 主表 和 从表 之间的关系: 外键约束主要定义在从表上 主表则必须是有主键约束或 unique 约束 当定义外键后,要求外键列数据必须在主表的主键列存在或为 NULL 在从表中,设置外键约束...,这样,当业务调整的时候,我们可以尽量不会对主键做过大的调整 3.8 外键(foreign Key) 外键: 从表和主表的关联关系 产生外键约束 为什么需要外键约束?...外键 用于定义 主表 和 从表 之间的关系: 外键约束主要定义在从表上 主表则必须是有主键约束或 unique 约束 当定义外键后,要求外键列数据必须在主表的主键列存在或为 NULL 在从表中,设置外键约束

    3300

    MySQL中 InnoDB 和 MyISAM 小结

    LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键...(例如外键)的表不适用 对AUTO_INCREMENT的操作 每表一个AUTO_INCREMEN列的内部处理。  ...(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。  ...5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键...如果应用程序中有大量的跳跃并发连接并且 Threads_Created 的值也比较大,那么我就会加大它的值。它的目的是在通常的操作中无需创建新线程。

    96430

    面向对象(二十九)-MySql

    所以今天,我们使用关系数据库管理系统(RDBMS)来存储和管理体积庞大的数据。这就是所谓关系数据库,因为所有的数据存储到不同的表和关系建立使用主键或外键等其它键。...外键:外键是两个表之间的连接值。...此时该列的取值范围为 0到16777215; "not null" 说明该列的值不能为空, 必须要填, 如果不指定该属性, 默认可为空; "auto_increment" 需在整数列中使用, 其作用是在插入数据时若该列为...在每张表中仅能有一个这样的值且所在列必须为索引列。 "primary key" 表示该列是表的主键, 本列的值必须唯一, MySQL将自动索引该列。...Mysql.net扩展包 v4.0和v4.5中,分别针对于.NetFramework的版本号。 这里我选用v4.0,在项目中添加引用: ? 添加引用 ? 添加引用 ?

    1.6K10

    MYSQL优化有理有据全分析(面试必备)

    5、 ref_or_null该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化。 上面这五种情况都是很理想的索引使用情况。...如果该列为NULL,说明没有使用索引,可以对该列创建索引来提高性能。 key 显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。 可以强制使用索引或者忽略索引: ?...· range checked for each record (index map: #):MySQL没有发现好的可以使用的索引,但发现如果来自前面的表的列值已知,可能部分索引可以使用。...使用LIKE关键字的查询 在使用LIKE关键字进行查询的查询语句中,如果匹配字符串的第一个字符为"%",索引不起作用。只有"%"不在第一个位置,索引才会生效。 ? ?...禁用外键检查 插入数据之前执行禁止对外键的检查,数据插入完成后再恢复,可以提供插入速度。

    1.3K30

    Mysql学习笔记,持续记录

    作用 ANALYZE TABLE分析后的统计结果会反应到cardinality的值,该值统计了表中某一键所在的列,不重复的值的个数。...外键创建失败的几种原因 外键的字段与关联的字段的类型不匹配(包括编码格式的不匹配) 外键的名字是一个已经存在的键值,要保证名字的唯一 mysql引擎引起的外键创建不能保存或者不能发挥作用的情况,mysql...在navicat设定的表格主键中 有 主键1,主键2,主键3,的区别,主键1不能被级联更新(删除)(CASCADE) 外键存在默认值,引起的冲突 混合键值缺少索引引起的情况,需要为他单独申请索引 在sql...,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为列不在GROUP BY从句中 STRICT_TRANS_TABLES:严格模式,在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作...在非严格模式,可以接受该日期,但会生成警告(注:年月日中任意一个不为零都可插入,全为0报错) ERROR_FOR_DIVISION_BY_ZERO:在严格模式,在INSERT或UPDATE过程中,如果被零除

    1.2K50

    【MySQL数据库】详细讲解MySQL的查询

    )多对多一对一一对多(多对一)案例:部门和员工之间的关系 关系:一个部门对于多个员工,一个员工对应一个部门实现在多的一方建立外键,指向少的一方的主键 图片多对多案例:学生与课程之间的关系 关系:一个学生可以选修多门课程...,一门课程也可以供多个学生选择实现建立第三张中间表,中间表至少包含两个外键分别关联两方主键 图片 ️‍创建两个表并且插入数据create table student( id int auto_increment...:用户与用户详情的关系 关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(unique...常用操作符:in,not in,any,some,all操作符描述in在指定的集合范围之内,多选一not in不在指定的集合范围之内any子查询返回列表中,有任意一个满足即可some与any等同,使用some...的地方都可以使用anyall子查询返回列表的所有值都必须满足行子查询子查询返回的是一行(可以是多列) 常用操作符:= in ,not in 图片表子查询子查询返回的是多行多列 常用运算符:in 图片如果大家有不明白的地方

    26840

    【DB应用】MySQL: InnoDB OR MyISAM?

    · NULL值被允许在索引的列中。这个占每个键的0-1个字节。 · 所有数字键值以高字节为先被存储以允许一个更高地索引压缩。...在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索 引的最后一列,可以出现重使用从序列顶部删除的值的情况 )。...在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。 InnoDB是为处理巨大数据量时的最大性能设计。...思考上面这些问题可以让你找到合适的方向,但那并不是绝对的。如果你需要事务处理或是外键,那么InnoDB 可能是比较好的方式。...5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键

    71650

    不懂就问,MySQL索引是啥?

    ,是基于数据表创建的,它包含了一个表中某些列的值以及记录对应的地址,并且把这些值存在一个数据结构中,常见的有使用哈希表、B+树作为索引。...找到键值19后,因为是范围查找,这时可以在叶子节点里进行链表的查询,依次遍历并匹配满足的条件,一直找到键值21,到最后一个数据仍不能满足我们的要求,此时会拿着页8的指针P去读取页9的数据,页9不在内存中同样需要磁盘加载读进内存...在InnoDB中处了主键索引外其他索引都可以称为辅助索引或二级索引。 MySQL中的MyISAM使用的就是非聚集索引。...若在则直接插入,若不在,则先放入Insert Buffer,之后在一一定频率和情况镜像Insert Buffer和辅助索引页子节点的合并操作。将多次插入合并为一次操作,减少磁盘离散读取。...,更强调性能)支持(包括外键、安全、回滚等高级功能)auto_increment自增长列必须是索引,联合索引中可不是第一列自增长列必须是索引,联合索引中也必须是第一列锁支持表级锁支持行级锁全文索引支持FULLTEXT

    1.3K20

    数据库之数据表控制语句

    3、向表中插入一个新的字段 1)在最后一列插入新列: mysql> desc tab3; +-------+-------------+------+-----+---------+-------+ |...2)在表格开头插入新列: mysql> alter table tab3 add sex char(10) first; 3)在指定的列后面插入新列: mysql> alter table tab3 add...'; 5、添加一个外键 进行此操作前,需要自行找一个有主键的表(我这里tab1表的name列是主键) tab1表结构: ?...所以在设计的时候。就给表1加入一个外键,这个外键就是表2中的学号字段。那么这样表1就是主表,表2就是子表。 你的主从关系理解颠倒了。你的图中,表1的确是主表。...你能够这样说:表1的学号字段是表2的外键 ————————外键解释结束—————— 7、删除列 mysql> alter table tab3 drop zuihou; 注意:如果要删除的列和其他表中的列有关联关系

    1.1K40

    2024Mysql And Redis基础与进阶操作系列(4)作者——LJS

    例如:学生表、课程表、选课表:选课表的学生和课程要分别参考学生表和课程表,学生表和课程表是 主表,选课表是从表。 1.4 特点 从表的外键列,必须引用/参考主表的主键或唯一约束的列 为什么?...因为被依赖/被参考的值必须是唯一的 在创建外键约束时,如果不给外键约束命名,默认名不是列名,而是自动产生一个外键名 例如 student_ibfk_1,也可以指定外键约束名。...如果要删除数据,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据 在“从表”中指定外键约束,并且一个表可以建立多个外键约束 从表的外键列与主表被参照的列名字可以不相同,但是数据类型必须一样,逻辑意义一致...比如:在员工表中,可以添加一个员工的信息,它的部门指定为一个完全不存在的部门。 问题3:那么建和不建外键约束和查询有没有关系?...例如:在表中插入第一 条记录,同时指定id值为5,则以后插入的记录的id 值就会从6开始往上增加。 添加主键约束时,往往需要设置字段自动增加属性。

    11310

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券