学习场景
数据库约束学习
-- 主表 班级表
create table classinfo(cid number(4), -- 班级编号cname varchar2(100), -- 班级名称cyear number(4), -- 入学年份clen number(1) -- 学制
);-- 从表 学生表
create table stuInfo(stuNo number(10) primary key, cid number(4),stuName varchar2(100) not null,stuCardID varchar2(18),sex varchar2(4),stuAge int,stuTel varchar2(11),stuAddr varchar2(100)
)
演示过程添加的不同数据
查询两张表信息如下入所示
异常信息
设计外键时后提示一下异常信息
ORA-02270.此列列表的唯关键字或主键不匹配
解决过程
1、从表-学生表stuInfo
添加外键失败提示异常ORA-02270
2、查询表中数据得知从表-学生表stuInfo
中CID列 编号1010 并不存在于主表-classinfo
中,优先delete该数据
3、继续添加外键约束失败,删除两张表中所有数据后,依然失败!!!
4、怀疑主表-classinfo
的主键约束被删掉或禁用掉
select * from user_constraints where table_name = upper('stuInfo');alter table stuInfo disable constraint SYS_C009447;
5、设置或者启用主键约束,构建成功!
解决思路
1、设计外键关联的时候,从表外键列是否正确引入主表主键列数据
- 主表主键列的值是否存在
- 主外键列数据类型是否一致
2、从表外键列谁否引用的时主表主键列
3、主表主键约束是否误执行关闭、删除等