Oracle主键和外键相关知识

[email protected]> create table emp_1 as select * from emp; --附表
Table created.
[email protected]> create table dept_1 as select * from dept; --主表
Table created.
[email protected]> alter table dept_1 add constraint PK_DEPT_1 primary key(deptno); --主表添加主键约束
Table altered.
 [email protected]> alter table emp_1 add constraint FK_EMP_1 foreign key(deptno) references dept_1(deptno);
Table altered. --添加外键约束

查询表的索引键值情况:

SELECT a.owner, --主键拥有者          
       a.table_name, --主键表         
       b.column_name, --主键列         
       c.owner, --外键拥有者          
       c.table_name, --外键表          
       d.column_name --外键列    
  FROM user_constraints a
  LEFT JOIN user_cons_columns b
    ON a.constraint_name = b.constraint_name
  LEFT JOIN user_constraints c
    ON c.r_constraint_name = a.constraint_name
  LEFT JOIN user_cons_columns d
    ON c.constraint_name = d.constraint_name
 WHERE a.constraint_type = ‘P‘   
   AND a.table_name IN (‘DEPT_1‘, ‘EMP_1‘) --需要查看主外键关系的表    
 16   ORDER BY a.table_name;
OWNER    TABLE_NAME    COLUMN_NAM OWNER  TABLE_NAME  COLUMN_NAM
---------- --------------- ---------- ---------- --------------- ----------
SCOTT    DEPT_1    DEPTNO     SCOTT  EMP_1   DEPTNO
1 row selected.

通过以上发现dept_1和emp_1 列deptno主外键关系。

如果删除dept_1的数据,那么必须对附表emp_1进行全表扫描:

以下语句可以查询:那些外键没有索引:

SELECT TABLE_NAME, 
       CONSTRAINT_NAME, 
       CNAME1 || NVL2(CNAME2, ‘,‘ || CNAME2, NULL) || 
       NVL2(CNAME3, ‘,‘ || CNAME3, NULL) || 
       NVL2(CNAME4, ‘,‘ || CNAME4, NULL) || 
       NVL2(CNAME5, ‘,‘ || CNAME5, NULL) || 
       NVL2(CNAME6, ‘,‘ || CNAME6, NULL) || 
       NVL2(CNAME7, ‘,‘ || CNAME7, NULL) || 
       NVL2(CNAME8, ‘,‘ || CNAME8, NULL) COLUMNS 
  FROM (SELECT B.TABLE_NAME, 
               B.CONSTRAINT_NAME, 
               MAX(DECODE(POSITION, 1, COLUMN_NAME, NULL)) CNAME1, 
               MAX(DECODE(POSITION, 2, COLUMN_NAME, NULL)) CNAME2, 
               MAX(DECODE(POSITION, 3, COLUMN_NAME, NULL)) CNAME3, 
               MAX(DECODE(POSITION, 4, COLUMN_NAME, NULL)) CNAME4, 
               MAX(DECODE(POSITION, 5, COLUMN_NAME, NULL)) CNAME5, 
               MAX(DECODE(POSITION, 6, COLUMN_NAME, NULL)) CNAME6, 
               MAX(DECODE(POSITION, 7, COLUMN_NAME, NULL)) CNAME7, 
               MAX(DECODE(POSITION, 8, COLUMN_NAME, NULL)) CNAME8, 
               COUNT(*) COL_CNT 
          FROM (SELECT SUBSTR(TABLE_NAME, 1, 30) TABLE_NAME, 
                       SUBSTR(CONSTRAINT_NAME, 1, 30) CONSTRAINT_NAME, 
                       SUBSTR(COLUMN_NAME, 1, 30) COLUMN_NAME, 
                       POSITION 
                  FROM USER_CONS_COLUMNS) A, 
               USER_CONSTRAINTS B 
         WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME 
           AND B.CONSTRAINT_TYPE = ‘R‘ 
         GROUP BY B.TABLE_NAME, B.CONSTRAINT_NAME) CONS 
 WHERE COL_CNT > ALL 
 (SELECT COUNT(*) 
          FROM USER_IND_COLUMNS I 
         WHERE I.TABLE_NAME = CONS.TABLE_NAME 
           AND I.COLUMN_NAME IN (CNAME1, CNAME2, CNAME3, CNAME4, CNAME5, 
                CNAME6, CNAME7, CNAME8) 
           AND I.COLUMN_POSITION <= CONS.COL_CNT 
 37           GROUP BY I.INDEX_NAME) ;
TABLE_NAME CONSTRAINT_NAME      COLUMNS
--------------- -------------------- ---------------
EMP_1  FK_EMP_1      DEPTNO
1 row selected.

====外键上面要建立索引===========

时间: 2024-10-28 16:39:59

Oracle主键和外键相关知识的相关文章

ORACLE: 查询(看)表的主键、外键、唯一性约束和索引

ORACLE: 查询(看)表的主键.外键.唯一性约束和索引 1.查找表的所有索引(包括索引名,类型,构成列) select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 表名 2.查找表的主键(包括名称,构成列): select cu.* from user_co

Oracle 获取表的主键、外键以及唯一约束条件

Oracle 获取表的主键.外键以及唯一约束条件 Select a.Owner 主键拥有者, a.table_name 主键表, b.Column_Name 主键列, b.Constraint_Name 主键名 From user_Constraints a, user_Cons_Columns b Where a.Constraint_Type = 'P' --P-主键:R-外键:U-唯一约束 and a.Constraint_Name = b.Constraint_Name And a.Ow

Chapter 1. 数据库概述、主键、外键

数据库 database: 存储数据的仓库,用表来分类数据 特点:海量存储:查找速度快:并发性问题的控制:安全性:数据完整性(保存在数据库中的数据是正确的真实的) 数据库软件:DBSM   database management system 常见数据库软件:MySQL  MSSQL server  Oracle  Access SQL:Structured Query Language 结构化查询语言   特点:语言简洁.易学易用. SQL Server:是一种基于网络的大型数据库软件.主要用

SQL语句建表、设置主键、外键、check、default、unique约束

· 什么是数据库? 存放数据的仓库. · 数据库和数据结构有什么区别? 数据结构要解决在内存中操作数据的问题,数据库要解决在硬盘中操作数据的问题.数据结构研究一些抽象数据模型(ADT)和以及定义在该模型上的一些操作,数据库是由表.关系.操作组成. · 什么是主键? 主键用来标识记录的唯一性. · 什么是外键? 外键用来标识表与表之间的联系. · 什么是check约束? check约束限制了输入值的范围. · 什么是default约束? 给某个属性一个默认值. · 什么是unique约束? 限制某

PHP数据连接主键与外键!

设置MySQL数据表主键: 使用"primary key"关键字创建主键数据列.被设置为主键列不允许出现重复的值,很多情况下与"auto_increment"递增数字相结合.如下SQL语句所示: Mysql>create table books(bookid int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,bookname varchar(50)); Mysql>insert into books(bookname

关于主键和外键

数据库主键和外键 1 什么是主键 外键 学生表(学号,姓名,性别,班级)   学号是一个主键 课程表(课程号,课程名,学分) 课程号是一个主键 成绩表(学号,课程号,成绩) 学号和课程号的属性组构成一个主键 成绩表中的学号不是成绩表的主键,不过是学生表的主键,成绩表的外键,同理课程号也是成绩表的外键 定义:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键 以一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表 2 外键的作用 外键用于保持数据一致性

SQL主键,外键,范式,查询,运算符

主键和外键主键:是一个索引,帮我们快速的查找,在数据库里拿出一列来作为主键,数据是唯一的不可重复的数据不能为空的数据,减慢新增的数据右键点表,点设计,右击列,设为主键primary key设为主键的关键词外键是一个约束,约束来源与另一个表里面的一列数据,这一列要求是唯一标示的一列unique(把一列的数据弄成唯一的) 删除主键里面的数据之前要先删除外键里面的引用identity(1,1)标识规范(是标识)标识种子(设置int型) 范式第一范式:每一列数据内容要单一,统一第二范式:尽量与主键直接相

Oracle表中添加外键约束

添加主键约束: ALTER TABLE GA_AIRLINE ADD CONSTRAINT PK_AIRLINE_ID PRIMARY KEY(AIRLINE_ID); 有三种形式的外键约束: 1.普通外键约束(如果存在子表引用父表主键,则无法删除父表记录) 2.级联外键约束(可删除存在引用的父表记录,而且同时把所有有引用的子表记录也删除) 3.置空外键约束(可删除存在引用的父表记录,同时将子表中引用该父表主键的外键字段自动设为NULL,但该字段应允许空值) 这三种外键约束的建立语法如下: 例如

主键、外键和子查询

1 主键和外键的区别 1.1定义 主键--唯一标识一条记录,不能有重复的,不允许为空 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空 1.2作用 主键--用来保证数据完整性 外键--用来和其他表建立联系用的 1.3个数: 主键--主键只能有一个 外键--一个表可以有多个外键 2 主键语句code int PRIMARY KEY IDENTITY(1,1), --PRIMARY KEY 标识主键--IDENTITY(1,1) 从一开始,每增加一行加一: 插入数据不用再写. 3 外键

SQL的主键和外键的作用

SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除. (4)更新主键记录时,同样有级联更新和拒绝执行的选择. 简而言之,SQL的主键和外键就是起约束作用. 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,