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

(错误) ORA-02270:此列列表没有匹配的唯一键或主键

ORA-02270 错误通常出现在使用 Oracle 数据库时,表示在创建表或修改表结构时,外键约束引用的列列表中没有匹配的唯一键或主键。这个错误提示你引用的列没有正确地设置唯一性约束或主键约束。

基础概念

  • 主键(Primary Key):表中的一个或多个列,其值能唯一地标识表中的每一行。
  • 唯一键(Unique Key):表中的一个或多个列,其值能唯一地标识表中的每一行,但允许有空值。
  • 外键(Foreign Key):表中的一个或多个列,其值必须匹配另一个表的主键或唯一键。

产生原因

  1. 引用的列没有设置主键或唯一键:当你尝试创建一个外键约束时,引用的列必须已经设置了主键或唯一键。
  2. 引用的列存在重复值:即使引用的列设置了主键或唯一键,但如果这些列中存在重复值,也会导致这个错误。

解决方法

  1. 检查引用的列是否设置了主键或唯一键
  2. 检查引用的列是否设置了主键或唯一键
  3. 确保引用的列已经设置了主键或唯一键。
  4. 添加主键或唯一键: 如果引用的列没有设置主键或唯一键,可以添加:
  5. 添加主键或唯一键: 如果引用的列没有设置主键或唯一键,可以添加:
  6. 检查引用的列是否存在重复值
  7. 检查引用的列是否存在重复值
  8. 如果存在重复值,需要处理这些重复值,例如删除重复行或合并数据。

示例

假设有两个表 orderscustomersorders 表中的 customer_id 列引用了 customers 表中的 id 列。

代码语言:txt
复制
-- customers 表
CREATE TABLE customers (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(100)
);

-- orders 表
CREATE TABLE orders (
    order_id NUMBER PRIMARY KEY,
    customer_id NUMBER,
    order_date DATE,
    CONSTRAINT fk_orders_customers FOREIGN KEY (customer_id) REFERENCES customers(id)
);

如果 customers 表中的 id 列没有设置主键,或者 id 列中存在重复值,就会导致 ORA-02270 错误。

参考链接

通过以上步骤,你应该能够解决 ORA-02270 错误。

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

相关·内容

【MySQL 系列】MySQL 语句篇_DDL 语句

外键相对于主键而言,用来引用其他表。外键通过子表一个多个列对应到父表主键一键值,将子表行和父表行建立起关联关系。 例如,Sakila 示例数据库中 country 表和 city 表。...我们可以使用以下 3 个策略中一个: CASCADE:如果被引用表中一行被删除更新,该表中匹配值会自动删除更新。...SET NULL:如果被引用表中一行被删除更新,该表中匹配值设置为 NULL。...RESTRICT: 如果被引用表中一行在该表中有匹配行,试图删除更新被引用表中行时会引发 MySQL 错误。这是默认策略。...当父表键值更新时候,子表中匹配字段也会被更 3.3、唯一键约束 唯一约束与主键约束有一个相似的地方,就是它们都能够确保列唯一性。

24510

MySQL查询重写插件

,"DBAs"); 查询刚刚插入规则: ? 输出规则每一列内容如下: id: 规则ID。此列是表主键。可以使用该ID唯一标识任何规则。 pattern: 指示规则匹配语句模式模板,使用?...表示匹配数据值。 pattern_database: 该数据库用于匹配语句中非限定表名。...此列可以在不删除规则情况下停用规则:将列设置为除YES表之外值 ,然后将表重新加载到插件中。 message: 该插件使用此列与用户进行通信。...如果将规则表加载到内存中时没有发生错误,则插件会将message 列设置为NULL。非NULL值表示错误,列内容是错误消息。...在这些情况下可能会发生错误:1.模式替换是一个产生语法错误错误SQL语句。2.替换包含比模式更多参数标记。

2.6K30
  • Hive优化器原理与源码解析系列—统计信息UniqueKeys列集合

    如两个RelNode进行Join时,Join返回记录数多少由主键侧记录数选择率和外键侧非重复值UniqueKeys唯一键共同决定。...强调一点,这里讲到主键侧PK side不是指其主键,是带有主键那一侧,就JoinKey关联键外键而言,它是重复,如员工表外键部门编号就是含有重复值,所以使用主键选择率和外键非重复记录数进行估算...Hive优化器原理与源码解析系列—统计信息中间结果估算文章只是提到了UniqueKeys唯一键使用,但没有展开UniqueKeys唯一键是如何识别的,接下来我们讲解分析。...遍历每列统计信息NDV(Number of Distinct Value)与中记录数进行表,如果非重复个数大于等于总记录数数,说明此列为UniqueKey。...} colStatsPos++;//统计信息位置递增, } return keys;//返回非重复keys列表 判断每列是否为主键列,组成集合并返回。

    1K20

    主键、唯一索引、普通索引及约束

    唯一索引是这样一种索引,它通过确保表中没有两个数据行具有完全相同键值来帮助维护数据完整性。 换个说法,有了唯一索引就可以确保数据表不会有相同行数据(组成唯一索引键列)....唯一索引允许空值存在,空值将视为。如果由单列组成唯一索引,则此列仅允许一个空值存在;如果由多列组成唯一索引,则值与空值组合仅允许一个存在。 1.1 唯一键约束 什么是唯一键约束?...唯一键约束与唯一索引又有什么区别? 唯一键约束与唯一索引区别只有一个:唯一键约束不允许空值存在,而唯一索引是允许空值存在。 2....又叫普通索引,应当为经常出现在查询条件 where 排序条件 order by列建立普通索引。 3....数据表通常用一列多列来唯一标识行数据,这一列多列就是主键。 Q:主键索引与唯一索引有啥区别呢? A:1. 主键不允许空值存在;2. 一个表仅有一个主键

    4.6K30

    详解 MySQL 执行计划 -- Explain

    SUBQUERY subquery 表示在 select 结果字段列表 where 条件中包含子查询。 3.2.5. UNION union 表示一个 union 查询子查询。 3.2.6....Null 表示在优化器优化后就已经得到结果,不需要再通过执行器访问存储引擎来实现查询操作,例如: explain select max(id) from person; 3.5.2. const 当使用主键一键进行查询且只匹配一行时...3.5.3. eq_ref 对于每个来自于前面的表行组合,从该表中读取一行,并通过这一行可以通过主键一键定位到聚簇索引中具体一系列数据。...如果此列是 NULL,则没有相关索引。 3.7. key key 列指出了 MySQL 优化器最终选定索引。...3.9. ref 该字段显示使用哪个列常数与 key 一起从表中选择数据行,有三种选项可选: NULL — 不使用索引 func — 用于索引匹配值是函数计算结果 const — 用于索引匹配值是常量

    90611

    MySQL_库和表使用(部分未完

    只能查看已存在表 本质上是打印出来创建表时候执行所有语句 省略长横线: 新增列(新增字段) 在SC表中Cno列后面新增一列Grade 如果不加after,默认加在最后一列 新增一列之后,此列数据默认为...设置现有列(字段)为主键 在添加新字段时设置为主键 前提是表中没有主键 设置复合主键 创建新表时设置 不能用第一种方式创建 会报错“定义了重复主键” 设置现有字段为复合主键 此前表中没有主键 更多...,其主键一键,与表中现存数据重合,则插入数据失败。...在test表中插入数据Sno、Sage(Sno必填,因为是主键),如果填入内容与主键发生重复冲突,则更新update语句后面指定字段中内容 示例中是,如果发生主键/唯一键冲突,则将该主键/唯一键对应数据中...要插入数据主键/唯一键与现有数据冲突时,replace将现有数据所有字段删除,将要插入数据重新插入。即replace在遇到冲突时,是先删除,后插入。

    12010

    mysql 分区 varchar_MySQL分区总结

    MySQL分区类型主要包括:range分区、list分区、hash分区、key分区; 无论是那种MySQL分区类型,要么分区表上没有主键/唯一键,要么分区表主键/唯一键都必须包含分区键,也就是说不能使用主键.../唯一键字段之外其他字段分区。...如果增加商店ID大于等于30行,超出分区范围,会出现错误。...将要匹配任何值都必须在值列表中。 四:Hash 分区 Hash 分区主要用来分散热点读,确保数据在预先确定个数分区中尽可能平均分布。...分区支持使用 Blob Text 类型外其他类型列作为分区键 创建 Key 分区表时候,可以不指定分区键,默认会首先选择使用主键作为分区键 在没有主键情况,会选择非空唯一键作为分区键,分区键一键必须是非空

    3.3K20

    mysql学习笔记(四)约束与索引

    它是应防止数据库中存在不符合语义规定数据和防止因错误信息输入输出造成无效操作错误信息而提出。...PRIMARY KEY主键约束不能重复,不能为空NOT NULL 非空约束不能为空DEFAULT默认约束插入数据时此列没有值插入,则使用默认值UNIQUE KEY唯一约束此列不能有重复值FROEIGN...no action方式:不作为,同4 restrict方式:如果主表被依赖字段值被从表引用了,那么主表对该字段修改和删除就被完全限制了,主表没有主动权,必须先处理从表值。...add constraint 约束名 check (列名 between 1 and 100)  注:MYSQL不支持 四、唯一约束(unique constraint)  一个表可以有多个唯一约束,唯一键意味着唯一...ID值有自动递增特性,当语句执行失败事务回滚时,ID值不会回滚,这会导致ID列值不连续。

    2K00

    spring batch数据库表数据结构

    DOUBLE_VAL:参数值,如果类型是双倍。 IDENTIFYING:指示参数是否有助于相关身份标志JobInstance。 请注意,此表没有主键。这是因为框架没有用于一个,因此不需要它。...以下清单显示了该BATCH_JOB_EXECUTION 表定义: 以下列表描述了每列: JOB_EXECUTION_ID:唯一标识此执行主键。...当作业当前未运行时,此列空值表示存在某种类型错误,并且框架无法在失败之前执行上次保存。 STATUS:表示执行状态字符串。这可能是 COMPLETED,STARTED等等。...以下清单显示了该BATCH_STEP_EXECUTION表定义: 以下列表描述了每列: STEP_EXECUTION_ID:唯一标识此执行主键。...END_TIME:表示执行完成时时间戳,无论成功失败。即使作业当前未运行,此列空值也表示存在某种类型错误,并且框架无法在失败之前执行上次保存。 STATUS:表示执行状态字符串。

    4.5K80

    面试命中率90%点——MySQL索引

    (从磁盘取数据是最影响性能) Join 对Join语句匹配关系(on)涉及字段建立索引能够提高效率 索引覆盖 如果要查询字段都建立过索引,那么引擎会直接在索引表中查询而不会访问原始数据(否则只要有一个字段没有建立索引就会做全表扫描...2.哈希索引 简要说下,类似于数据结构中简单实现Hash表(散列表)一样,当我们在MySQL中用哈希索引时,主要就是通过Hash算法(常见Hash算法有直接定址法、平方取中法、折叠法、除数取余法、随机数法...八、索引设计原则? 1.适合索引列是出现在Where子句中列,或者连接子句中指定列。 2.基数较小类,索引效果较差,没有必要在此列建立索引。...使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用于两种情况: 基于一个范围检索,一般查询返回结果集小于表中记录数30% 基于非索引检索 十三、百万级别或以上数据如何删除...在InnoDB中,只有主键索引是聚簇索引,如果没有主键,则挑选一个唯一键建立聚簇索引。如果没有一键,则隐式生成一个键来建立聚簇索引。

    2K21

    2021年最新最全MySQL索引面试知识点

    (从磁盘取数据是最影响性能) Join 对Join语句匹配关系(on)涉及字段建立索引能够提高效率 索引覆盖 如果要查询字段都建立过索引,那么引擎会直接在索引表中查询而不会访问原始数据(否则只要有一个字段没有建立索引就会做全表扫描...2.哈希索引 简要说下,类似于数据结构中简单实现Hash表(散列表)一样,当我们在MySQL中用哈希索引时,主要就是通过Hash算法(常见Hash算法有直接定址法、平方取中法、折叠法、除数取余法、随机数法...八、索引设计原则? 1.适合索引列是出现在Where子句中列,或者连接子句中指定列。 2.基数较小类,索引效果较差,没有必要在此列建立索引。...使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用于两种情况: 基于一个范围检索,一般查询返回结果集小于表中记录数30% 基于非索引检索 十三、百万级别或以上数据如何删除...在InnoDB中,只有主键索引是聚簇索引,如果没有主键,则挑选一个唯一键建立聚簇索引。如果没有一键,则隐式生成一个键来建立聚簇索引。

    34521

    MySQL索引原理、失效情况

    但从更新上来看,如果数据不在内存中, 一索引需要将数据从磁盘上读取到内存中,这样会引发随机读,导致IO消耗增多,而普通索引可以利用change buffer,IO上边要节省很多。...这是const连接类型特殊情况。 const: 表中一个记录最大值能够匹配这个查询(索引可以是主键惟一索引)。...eq_ref: 在连接中,MySQL在查询时,从前面的表中,对每一个记录联合都从表中读取一个记录,它在查询使用了索引为主键一键全部时使用。...ref: 这个连接类型只有在查询使用了不是惟一主键键或者是这些类型部分(比如,利用最左边前缀)时发生。对于之前每一个行联合,全部记录都将从表中读出。...这个类型严重依赖于根据索引匹配记录多少—越少越好。 range: 这个连接类型使用索引返回一个范围中行,比如使用><查找东西时发生情况。

    1.1K11

    主键、唯一键与唯一索引区别

    索引和键混淆通常是由于数据库使用索引来实施完整性约束。 接下来我们看看数据库中主键约束、唯一键约束和唯一索引区别。...,而且也不允许再在此列上创建唯一索引非唯一索引。...* from test; ID NAME ———- ——————– 1 Sally Tony Jack 从实验结果来看,唯一键约束并没有非空要求...如果我们让主键约束或者唯一键约束失效,Oracle自动创建唯一索引是否会受到影响? SQL> drop table test purge; Table dropped....总结如下: (1)主键约束和唯一键约束均会隐式创建同名唯一索引,当主键约束或者唯一键约束失效时,隐式创建唯一索引会被删除; (2)主键约束要求列值非空,而唯一键约束和唯一索引不要求列值非空; (3)

    1.3K20

    Mysql索引

    索引结构 关系数据库会自动对其创建主键索引,使用主键索引效率是最高,因为主键会保证绝对唯一 有B+树和哈希,B+树索引三层但已经足够使用了,使用哪种是引擎所决定,不是我们能干预 B+树(log N...): 第一层:最大目录项 第二次:普通目录项 第三层:主键存放记录地址,非主键存放主键和索引项 Hash: 没有排序 键大量重复效率也低,哈希碰撞 4....聚集和非聚集索引 聚集索引:索引键值逻辑顺序与表中记录物理顺序一致(主键索引,叶子节点存放记录地址) 非聚集索引:索引键值逻辑顺序与表中记录物理顺序不一致(非主键索引,叶子节点存放主键和索引项...最左匹配原则 使用索引是从左到右匹配索引字段,前一个不匹配,后一个就不使用索引,所以总是从第一个开始匹配,因为B+树只能以一个值(即主键)来建树 联合索引时,索引只能用于查找key是否存在相等,遇到范围查询...(>、<、between、like),就不能进一步匹配了,退化为线性查询,因此列排列顺序决定了可命中索引列数 ----

    40430

    MySQL 约束介绍

    并且组合值不允许重复 当创建主键约束时,系统默认会在所在列组合上建立对应主键索引 CREATE TABLE 表名称( 字段名 数据类型 PRIMARY KEY, #列级模式 字段名 数据类型...); #字段列表可以是一个字段,也可以是多个字段,如果是多 个字段的话,是复合主键 ALTER TABLE 表名称 ADD PRIMARY KEY(字段名1,字段名2); 4、自增长约束 某个字段值自增...一个表最多只能有一个自增长列 当需要产生唯一标识符顺序值时,可设置自增长 自增长列约束列必须是键列(主键列,唯一键列) 自增约束数据类型必须是整数类型 -- 建表 CREATE TABLE...从表外键列,必须引用/参考主表主键唯一约束列 在创建外键约束时,如果不给外键约束命名,默认名不是列名,而是自动产生一个外键名(例如student_ibfk_1;),也可以指定外键约束名。.../delete掉子表匹配记录 Set null方式:在父表上update/delete记录时,将子表上匹配记录列设为null,但是要注意子表外键列不能为not null No action方式:如果子表中有匹配记录

    1.6K41

    SqlAlchemy 2.0 中文文档(三十八)

    默认值是字符串"auto",表示应自动为单列(即非复合)主键提供自动递增语义,该主键为 INTEGER 类型且没有其他客户端服务器端默认构造指示。...这基于由Column.autoincrement参数定义Column规则,通常意味着不受外键约束单个整数列主键约束中列。如果表没有这样主键约束,则没有“自动增量”列。...默认值为字符串"auto",表示应自动为具有整数类型且没有其他客户端服务器端默认构造单列(即非复合)主键接收自动递增语义。...当编译和执行单行insert()构造时,如果没有设置Insert.inline()修饰符,此列新生成主键值将在语句执行时自动通过特定于正在使用数据库驱动程序方法检索: MySQL,SQLite...Table 指定了额外其他结构修改表状态标志,那么将引发错误

    18710

    数据库基础

    第⼆范式:在第⼀范式基础上,要求每条记录由主键⼀区分,记录中所有属性都依赖于主键。 第三范式:在第⼆范式基础上,要求所有属性必须直接依赖主键,不允许间接依赖。...⼀旦写数据任务没有完成,数据是不能被其他任务读取,这对并发操作有较⼤影响。共享/排他锁释放⽅式为 commit rollback 。...记录锁总是会锁住索引记录,如果 innoDB 存储引擎表在建⽴时候没有设置任何⼀个索引,那么innoDB存储引擎会使⽤隐式主键来进⾏锁定。...当查询索引含有⼀属性(⼀索引主键索引)时,Innodb 存储引擎会对临键锁进⾏优化,将其降为行锁,即仅锁住索引本身,⽽不是范围。...这种索引⼀般⽤来保证数据⼀性,⽐如保存账户信息表,每个账户id必须保证⼀,如果重复插⼊相同账户id时会MySQL返回异常。 主键索引 :是⼀种特殊⼀索引,但是它不允许出现空值。

    8110

    技术分享 | MySQL 可以对相同字段创建不同索引?

    同事问了个问题,MySQL 某个测试库,发现有这种情况: 给已设置为主键列又加了一次索引,如下前两条 SQL 语句。 给同一个字段加了 2 次索引,如下后两条 SQL 语句。...这种情况是不是没有意义? 这两个问题考察都是关于索引基础知识,如果对此很熟悉,答案不言自明,即使不熟悉,只需要做些简单测试,就可以了解,加深印象。...因为这两个最主要区别就是主键除了包含索引外,还需保证唯一,而此处索引,就是普通索引,不是唯一索引,因此从逻辑上,这两个是不等价。...但是由于主键包含了索引,因此可以删除第二个索引,它属于重复主键定义包含了索引定义。...Oracle 19c,在主键字段上创建索引,会提示 此列列表已索引 错误。在相同字段上创建第二个索引,也是提示 此列列表已索引 错误

    36640

    MySQL初级篇(二)

    一、列属性1、 主键主键(primary key):又叫主键约束,是表中一个多个字段,它值用于唯一标识表中某一条记录。...(字段名称,)---但不常用---删除主键alter table 表名 drop primary key;12345678主键建立原则:主键应是对用户没有意义不要更新主键主键不应包含动态变化数据,...如时间戳等主键应由计算机自动生成一般来说就是id,特殊情况除外2、 唯一键一键(unique key):又叫唯一约束,其保证在一个字段一组字段里数据与表中其他行数据相比是唯一。...1特点:一张表中可以存在多个唯一键一键所在列中数据不能重复唯一键允许该列数据为null,并且可以存在多个(但是不提倡)与主键区别:主键唯一,唯一键不唯一,主键不为null,唯一键可为null---...drop index 唯一键名称;注意:与主键删除略有不同1234567893、 自动增长自增长(auto increment):当对应字段不给值null时候,系统会自动触发**从当前字段中已有的最大值执行

    16560

    explain | 索引优化这把绝世好剑,你真的会用吗?

    SELECTWHERE列表中包含了子查询 DERIVED FROM列表中包含子查询,即衍生 UNION UNION关键字之后查询 UNION RESULT 从UNION后表获取结果集 下面看看这些...const 通过一次索引就能找到数据,一般用于主键唯一索引作为条件查询sql中,执行sql如下: explain select * from test2 whereid=1; 结果: eq_ref...常用于主键唯一索引扫描。...答:const只索引一次,而eq_ref主键主键匹配,由于表中有多条数据,一般情况下要索引多次,才能全部匹配上。 ref 常用于非主键和唯一索引扫描。...请注意,此列完全独立于表顺序,这就意味着possible_keys在实践中,某些键可能无法与生成表顺序一起使用。 如果此列是NULL,则没有相关索引。

    1K20
    领券