首页
学习
活动
专区
工具
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

79420

-基础面试题总结

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

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

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

    1.9K20

    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)

    97750

    MySQLMyISAM与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常见约束条件「建议收藏」

    约束条件:限制表数据,保证添加到数据表数据准确和可靠性!凡是不符合约束数据,插入时就会失败!...约束条件创建表时可以使用, 也可以修改表时候添加约束条件 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

    MySQLMySQL数据库初阶使用

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

    33630

    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.为什么一般用自增列作为主键?...第二范式:(确保表都和主键相关)一个数据库表,一个表只能保存一种数据,不可以把多种数据保存在同一张数据库表,数据表里非主属性都要和这个数据表候选有完全依赖关系。

    80820

    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 也比较大,那么就会加大它。它目的是通常操作无需创建新线程。

    95330

    面向对象(二十九)-MySql

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

    1.6K10

    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优化有理有据全分析(面试必备)

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

    1.3K30

    数据库之数据表控制语句

    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

    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 图片如果大家有不明白地方

    26540

    【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特性(例如

    70650

    不懂就问,MySQL索引是啥?

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

    1.3K20

    MySQL】04_约束

    唯一约束可以是某一个唯一,也可以多个组合唯一。 唯一性约束允许为空。 创建唯一约束时候,如果不给唯一约束命名,就默认和列名相同。...,然后才可以删除主表数据 “从表”中指定约束,并且一个表可以建立多个约束 从表与主表被参照列名字可以不相同,但是数据类型必须一样,逻辑意义一致。..., 都是立即检查约束 Set default方式 (可视化工具SQLyog可能显示空白):父表有变更时,子表将设置成一个默认,但Innodb不能识别 如果没有指定等级,就相当于Restrict...答:MySQL,默认AUTO_INCREMENT初始是1,每新增一条记录,字段自动加1。...设置自增属性(AUTO_INCREMENT)时候,还可以指定第一条插入记录自增字段,这样新插入记录自增字段从初始开始递增,如在表插入第一条记录,同时指定id为5,则以后插入记录id

    2.4K20

    MySQL使用详解--Java学习网

    (1)只有InnoDB类型表才可以使用mysql默认是MyISAM,这种类型不支持约束 (2)好处:可以使得两张表关联,保证数据一致性和实现一些级联操作; (3)作用: 保持数据一致性...使两张表形成关联,只能引用外表! (4)建立前提: 两个表必须是InnoDB表类型。 使用在外关系域必须为索引型(Index)。...(id) references outTable(id) on delete cascade on update cascade); 说明:把id 设为 参照外表outTableid删除...本表对应筛除 当改变 本表对应改变。...做优化时候类似查询缓存,索引缓存之类优化对InnoDB类型表是不起作用,还有在数据库整体架构中用得同步复制也是对InnoDB类型表不生效,像数据库核心表类似商品表请大家尽量不要是使用

    91640

    MySQL优化--概述以及索引优化分析

    例如表不适用 对AUTO_INCREMENT操作 每表一个AUTO_INCREMEN内部处理。...(当AUTO_INCREMENT被定义为多索引最后一可以出现重使用从序列顶部删除情况)。...AUTO_INCREMENT可用ALTER TABLE或myisamch来重置 对于AUTO_INCREMENT类型字段,InnoDB必须包含只有该字段索引,但是MyISAM表可以和其他字段一起建立联合索引...可简单理解为“排好序快速查找数据结构” 2.2、索引分类 索引类型 索引含义 单索引 一个索引仅包含一个 唯一索引 索引必须唯一,可以有空 复合索引 一个索引包含多个 2.3、基本语法...设置; 2.6、索引失效情况 全值匹配最爱 最佳左前缀法则 不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描 存储引擎不能使用索引范围条件右边

    65210

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券