Oracle 外键约束
- 格式:doc
- 大小:71.00 KB
- 文档页数:3
通过搜索摸索,总结了一下 oracle 中查询表的信息,包括表名,字段名,字段类型,主键, 外键唯一性约束信息,索引信息查询 SQL 如下,希望对大家有所帮助:1、查询出所有的用户表select * from user_tables 可以查询出所有的用户表select owner,table_name from all_tables; 查询所有表,包括其他用户表通过表名过滤需要将字母作如下处理select * from user_tables where table_name = upper('表名 '因为无论你建立表的时候表名名字是大写还是小写的, create 语句执行通过之后,对应的 user_tables表中的 table_name字段都会自动变为大写字母, 所以必须通过内置函数 upper 将字符串转化为大写字母进行查询, 否则, 即使建表语句执行通过之后, 通过上面的查询语句仍然查询不到对应的记录。
2、查询出用户所有表的索引select * from user_indexes3、查询用户表的索引 (非聚集索引 :select * from user_indexes where uniqueness='NONUNIQUE'4、查询用户表的主键 (聚集索引 :select * from user_indexes where uniqueness='UNIQUE'5、查询表的索引select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name andt.table_name='NODE'6、查询表的主键select cu.* from user_cons_columns cu, user_constraints au wherecu.constraint_name = au.constraint_name andau.constraint_type = 'P' AND cu.table_name = 'NODE'7、查找表的唯一性约束(包括名称,构成列:select column_name from user_cons_columns cu, user_constraints au wherecu.constraint_name=au.constraint_name andcu.table_name='NODE'8、查找表的外键select * from user_constraints c where c.constraint_type = 'R' andc.table_name='STAFFPOSITION'查询外键约束的列名:select * from user_cons_columns cl where cl.constraint_name = 外键名称查询引用表的键的列名:select * from user_cons_columns cl where cl.constraint_name = 外键引用表的键名9、查询表的所有列及其属性方法一:select * from user_tab_columns where table_name=upper('表名 ';方法二:select cname,coltype,width from col where tname=upper('表名 ';;10. 查询一个用户中存在的过程和函数select object_name,created,status from user_objectswhere lower(object_type in ('procedure','function';11. 查询其它角色表的权限select * from role_tab_privs ;。
Oracle表依赖关系介绍在Oracle数据库中,表之间的依赖关系是非常重要的。
了解表之间的依赖关系可以帮助我们更好地理解数据库结构,优化查询性能以及进行表的维护和修改。
本文将深入探讨Oracle表之间的依赖关系,并介绍如何查询和管理这些依赖关系。
查询表依赖关系在Oracle数据库中,可以使用以下方法查询表的依赖关系:1. 使用ALL_DEPENDENCIES视图Oracle提供了一个ALL_DEPENDENCIES视图,用于查询表之间的依赖关系。
该视图包含了所有的依赖关系信息,包括依赖的表名、依赖的列名等。
以下是一个查询表依赖关系的示例SQL语句:SELECT owner, name, type, referenced_owner, referenced_name, referenced_type FROM all_dependenciesWHERE referenced_name = 'TABLE_NAME';其中,TABLE_NAME是要查询依赖关系的表名。
2. 使用DBA_DEPENDENCIES视图除了ALL_DEPENDENCIES视图外,还可以使用DBA_DEPENDENCIES视图查询表的依赖关系。
DBA_DEPENDENCIES视图包含了数据库中所有对象的依赖关系信息,不仅限于表。
以下是一个查询表依赖关系的示例SQL语句:SELECT owner, name, type, referenced_owner, referenced_name, referenced_type FROM dba_dependenciesWHERE referenced_name = 'TABLE_NAME';3. 使用USER_DEPENDENCIES视图如果只查询当前用户的表依赖关系,可以使用USER_DEPENDENCIES视图。
USER_DEPENDENCIES视图只包含当前用户拥有的对象的依赖关系信息。
oracle常用约束类型
Oracle数据库中常用的约束类型如下:
1. 主键约束(PRIMARY KEY):主键约束确保表中的每一行具有唯一标识,并且不允许主键字段为空。
一个表只能有一个主键。
2. 唯一约束(UNIQUE):唯一约束确保表中指定字段的值是唯一的,但允许空值。
可以在一个表中为多个字段设置唯一约束。
3. 外键约束(FOREIGN KEY):外键约束用于维护表之间的引用完整性。
一个表的外键引用另一个表的主键或唯一约束字段,在参照完整性下,一个表中的外键值必须与被引用表中的主键或唯一约束字段中的某个值相匹配,或者是NULL。
4. 检查约束(CHECK):检查约束用于确保表中的字段值满足特定条件。
例如,可以要求一个字段的值在一个指定的范围内,或符合一定的格式。
5. 非空约束(NOT NULL):非空约束用于保证特定字段的值不能为空。
当一个字段设置了非空约束,插入或更新记录时,需要为这个字段提供非空值。
外键约束先要理清几个概念:1)候选键(Candidate Key):关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选键(候选码)。
2)主键(Primary Key):当有多个候选键时,可以选定一个作为主键,选定的候选键称为主键(主码)。
主键唯一标识表中的每行记录。
主键约束有如下特点:每个表中只能有一个主键,主键可以是一列,也可以是多列的组合;主键值必须唯一并且不能为空,对于多列组合的主键,某列值可以重复,但列的组合值必须唯一。
3)外键(Foreign Key):关系R中的一个属性组,它不是R的候选键,但它与另一个关系S 的候选键相对应,则称这个属性组为R的外键(外码)。
关系R称为参照关系(参照表、从表),关系S称为被参照关系(被参照表、主表)。
外键是指一个表(从表)中的一列或列组合,它虽不是该表的主键,但却是另一个表(主表)的主键。
通过外键约束可以为相关联的两个表建立联系,实现数据的引用完整性,维护两表之间数据的一致性关系。
特殊情况下,参照关系和被参照关系可以是同一个关系。
即,特殊情况下,从表和主表可以是同一个表。
参照[引用]关系(Referencing Relation)、子表、从表、外键表、参照[引用]表,这些作为同一术语的同义词使用。
被参照[被引用]关系(Referenced Relation)、父表、主表、主键表、被参照[被引用]表、查找表,这些作为同一术语的同义词使用。
请注意,在英语国家讲数据库的英语文献中,relation有时指“表”,有时指两表之间的联系(relationship)。
指两表之间的relationship时也常用link[链接]。
relationship和relation通常都翻译为关系,但在数据库中两者含义不同。
relationship [关系;联系;关联],在数据库中指不同表之间的数据彼此联系的方法。
Oracle的Cascade用法介绍Cascade是一个数据库操作相关的概念,在Oracle数据库中有着重要的作用。
Cascade用法的核心思想是当一个操作(比如删除或更新)作用于一个对象时,自动地将该操作作用于与该对象相关联的其他对象。
本文将介绍Oracle数据库中Cascade的详细用法,包括删除Cascade和更新Cascade。
删除Cascade删除Cascade是指当我们删除一个对象时,自动删除与该对象相关联的其他对象。
在Oracle数据库中,我们可以通过设置外键约束来实现删除Cascade的功能。
设置外键约束外键约束是指表之间关系的表达方式。
在Oracle数据库中,我们可以使用ALTER TABLE语句来添加外键约束。
ALTER TABLE child_table ADD CONSTRAINT fk_constraintFOREIGN KEY (foreign_key_column)REFERENCES parent_table(primary_key_column)ON DELETE CASCADE;上述代码中,child_table是子表,parent_table是父表,foreign_key_column是子表中引用父表的列,primary_key_column是父表的主键列。
通过设置ON DELETE CASCADE,当我们删除父表中的某一行数据时,系统会自动删除子表中所有与该行相关联的数据。
示例下面通过一个示例来演示删除Cascade的用法。
创建表首先,我们创建两个表,一个是父表(departments),一个是子表(employees)。
CREATE TABLE departments(department_id NUMBER PRIMARY KEY,department_name VARCHAR2(100));CREATE TABLE employees(employee_id NUMBER PRIMARY KEY,employee_name VARCHAR2(100),department_id NUMBER,CONSTRAINT fk_departmentFOREIGN KEY (department_id)REFERENCES departments(department_id));插入数据然后,我们向这两个表中插入一些数据。
在Oracle中查看所有的表:select * from tab/dba_tables/dba_objects/cat;看用户建立的表 :selecttable_name from user_tables; //当前用户的表selecttable_name from all_tables; //所有用户的表selecttable_name from dba_tables; //包括系统表select * from user_indexes //可以查询出所有的用户表索引查所有用户的表在all_tables主键名称、外键在all_constraints索引在all_indexes但主键也会成为索引,所以主键也会在all_indexes里面。
具体需要的字段可以DESC下这几个view,dba登陆的话可以把all换成dba1、查找表的所有索引(包括索引名,类型,构成列):select t.*,i.index_type from user_ind_columnst,user_indexesi where t.index_nam e = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表2、查找表的主键(包括名称,构成列):select cu.* from user_cons_columns cu, user_constraints au where cu.constraint _name = au.constraint_name and au.constraint_type = 'P' and au.table_name = 要查询的表3、查找表的唯一性约束(包括名称,构成列):selectcolumn_name from user_cons_columns cu, user_constraints au where cu. constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table _name = 要查询的表4、查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询):select * from user_constraints c where c.constraint_type = 'R' and c.table_name = 要查询的表查询外键约束的列名:select * from user_cons_columns cl where cl.constraint_name = 外键名称查询引用表的键的列名:select * from user_cons_columns cl where cl.constraint_name = 外键引用表的键名5、查询表的所有列及其属性select t.*,MENTS from user_tab_columnst,user_col_comments c where t.t able_name = c.table_name and t.column_name = c.column_name and t.table_na me = 要查询的表。
oracle 查询外键的建表语句要查询外键的建表语句,你需要使用Oracle数据库中的系统表来获取外键约束的信息。
在Oracle中,可以使用以下SQL语句来查询外键的建表语句:sql.SELECT.'ALTER TABLE ' || c.table_name || ' ADD CONSTRAINT ' || c.constraint_name || ' FOREIGN KEY (' || c.column_name || ') REFERENCES ' || r_pk.table_name || ' (' ||r_pk.column_name || ');' AS foreign_key_sql.FROM.user_cons_columns c.JOIN.user_constraints fk ON c.constraint_name =fk.constraint_name.JOIN.user_constraints pk ON fk.r_constraint_name = pk.constraint_name.JOIN.user_cons_columns r_pk ON pk.constraint_name =r_pk.constraint_name.WHERE.fk.constraint_type = 'R'。
ORDER BY.c.table_name, c.position;这个SQL查询会返回所有外键约束的建表语句,包括外键的名称、所属表、参考表、参考列等信息。
你可以根据实际情况修改查询条件,比如替换`user_cons_columns`和`user_constraints`为相应的表所有者前缀(如`all_cons_columns`和`all_constraints`),以便查询所有者拥有的表的外键信息。
oracle windows操作语句Oracle是一种关系型数据库管理系统,广泛应用于企业级应用程序开发中。
在Windows操作系统上,可以使用Oracle SQL Developer或SQL*Plus等工具执行Oracle数据库操作语句。
下面列举了十个常用的Oracle Windows操作语句。
1. 创建表(CREATE TABLE)CREATE TABLE语句用于创建数据库中的表。
例如,创建一个名为“employees”的表,包含id、name和age三个字段:```sqlCREATE TABLE employees (id NUMBER,name VARCHAR2(100),age NUMBER);```2. 插入数据(INSERT INTO)INSERT INTO语句用于向表中插入数据。
例如,向“employees”表插入一条记录:```sqlINSERT INTO employees (id, name, age)VALUES (1, 'John', 25);```3. 更新数据(UPDATE)UPDATE语句用于更新表中的数据。
例如,将“employees”表中id为1的记录的年龄改为30:```sqlUPDATE employeesSET age = 30WHERE id = 1;```4. 删除数据(DELETE)DELETE语句用于删除表中的数据。
例如,删除“employees”表中id为1的记录:```sqlDELETE FROM employeesWHERE id = 1;```5. 查询数据(SELECT)SELECT语句用于从表中查询数据。
例如,查询“employees”表中的所有记录:```sqlSELECT * FROM employees;```6. 创建索引(CREATE INDEX)CREATE INDEX语句用于在表上创建索引,以提高查询性能。
SQLServer主键、外键、唯⼀等约束主键(primary key)约束、外键(foreign key)约束、唯⼀(unique)约束、检查(check)约束、默认值(default)约束实例Oracle 有如下类型的约束:NOT NULL(⾮空)、UNIQUE Key(唯⼀约束)、PRIMARY KEY(主键约束)、FOREIGN KEY(外键约束)、CHECK约束Oracle使⽤SYS_Cn格式命名约束.创建约束:在建表的同时创建、建表后创建约束的类型有如下⼏种:C (check constraint on a table)P (primary key)U (unique key)R (Referential AKA Foreign Key)V (with check option, on a view)O (with read only, on a view)1、创建约束CREATE TABLE students(student_id VARCHAR2(10) NOT NULL,student_name VARCHAR2(30) NOT NULL,college_major VARCHAR2(15) NOT NULL,status VARCHAR2(20) NOT NULL,state VARCHAR2(2),license_no VARCHAR2(30)) TABLESPACE student_data;2、创建主键:ALTER TABLE students ADD CONSTRAINT pk_students PRIMARY KEY (student_id)USING INDEX TABLESPACE student_index;Alter table table_name add constrants BID primary key (bookno);ALERT TABLE table_name MODIFY( column1 PRIMARY KEY);3、创建Unique约束:ALTER TABLE students ADD CONSTRAINT uk_students_license UNIQUE (state, license_no)USING INDEX TABLESPACE student_index;4、创建Check约束:定义每⼀记录都要满⾜的条件,条件表达式不允许有:CURRVAL, NEXTVAL, LEVEL, ROWNUM,SYSDATE, UID, USER, USERENV 函数:ALTER TABLE students ADD CONSTRAINT ck_students_st_lic CHECK ((state IS NULL AND license_no IS NULL) OR (state IS NOT NULL AND license_no is NOT NULL));添加check约束(check_1为约束名,dept_salary为字段名 ) alter table emp add constraint check_1 check(dept_salary>0); 5、创建外键约束:ALTER TABLE students ADD CONSTRAINT fk_students_state FOREIGN KEY (state) REFERENCES state_lookup (state);6. 创建不能为空约束 not nullalter table table_name modify(name not null);alter table table_name modify name1 varchar2(20) not null;实例1:⾸先创建学⽣信息表studentinfo和学⽣成绩表testinfo。
oracle数据库约束、索引,enable和disable⽤处1.数据库索引索引:索引是对数据库表中⼀列或多列的值进⾏排序的⼀种结构索引分类:主键索引(PRIMAY KEY)、唯⼀索引(UNIQUE)、常规索引(INDEX)、全⽂索引(FULLTEXT)常规索引 CREATE INDEX 索引名 ON 表名 (字段名)唯⼀索引 CREATE UNIQUE INDEX 索引名 ON 表名 (字段名)2.数据库约束约束:数据库约束时防⽌⾮法记录的规则约束分类:主键约束(Primay Key Coustraint):唯⼀性,⾮空性,⼀个表只能有主键,创建主键时会⾃动创建主键索引ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY (字段名)唯⼀约束(Unique Counstraint):唯⼀性,可以空,但只能有⼀个空,⼀张表可以有多个唯⼀约束,创建唯⼀约束时会⾃动创建唯⼀索引ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段)检查约束(Check Counstraint):对该列数据的范围、格式的限制(如:年龄、性别等)ALTER TABLE 表名 CHECK (字段约束)默认约束(Default Counstraint):该数据的默认值ALTER TABLE 表名 ALTER 字段名 SET DEFAULT '默认值'外键约束(Foreign Key Counstraint):需要建⽴两表间的关系并引⽤主表的列ALTER TABLE 表名1 ADD CONSTRAINT 外键名 FOREING KEY (表1字段) REFENCES 表名2(表2字段)3.disable与enable约束控制约束的约束,控制表的约束时禁⽌还是激活状态disable:禁⽌状态,相当于该列没有约束,使⽤disable默认为Novalidateenable:激活状态,默认新创建的约束状态是激活状态,使⽤enable默认为ValidateValidate Novalidate已有记录新增/删除记录已有记录新增/删除记录Enable Yes(表⽰需要受到约束条件限制)Yes No YesDisable Yes No No No。
Oracle 外键约束
外键FOREIGN KEY约束是几种约束是最复杂的,外键约束可以使两个表进行关联。
外键是指引用另一个表中的某个列或某几个列,或者本表中另一个列或另几个列的列。
被引用的列应该具有主键约束,或者惟一性约束。
在外键的定义中,涉及到外键表、外键列、被引用表和被引用列等几个概念。
如果成功地创建了外键约束,那么系统将要求外键列中的数据必须来自被引用列中的数据。
被引用列中不存在的数据不能存储于外键列中。
在一般情况下,当删除被引用表中的数据时,该数据也不能出现在外键列中。
如果外键列存储了将要在被引用表中删除的数据,那么对被引用表删除数据的操作将失败。
最典型的外键约束是HR模式中的EMPLOYEES和DEPARTMENT表,在该外键约束中,外键表EMPLOYEES中的外键列DEMPARTMENT_ID将引用被引用表DEPARTMENTS 中的DEMPARTMENT_ID列。
例如,在以下的示例中,将以HR身份连接到数据库,并创建一个新表ADMINISTRATION_EMP,并为其添加到DEPATRMENT表的外键约束:SQL> connect hr/hr
已连接。
SQL> create table administration_emp
2 as select * from hr.employees
3 where department_id=10;
表已创建。
SQL> alter table administration_emp
2 add constraint admin_dep_fk
3 foreign key(department_id)
4
references departments(department_id);
表已更改。
为验证创建的外键约束的有效性,可以向ADMINISTRATION_EMP表添加一条记录,并且它的DEPARTMENT_ID列值不存在DEPARTMENTS表中,那么插入操作将会因为违反外键约束而失败:
SQL> insert into administration_emp(
2 employee_id,last_name,email,hire_date,job_id,department_id)
3 values(120,'刘丽','li@',sysdate,'HR_REP',360);
insert into administration_emp(
*
第 1 行出现错误:
ORA-02291: 违反完整约束条件(HR.ADMIN_DEP_FK) - 未找到父项关键字
注意在一个表上创建外键约束时,被引用表必须已经存在,并且必须为该表的引用列定义惟一性约束或主键约束。
如果外键表的外键列与被引用表中的被引用列名相同,如上面的示例所示,则为外键表定义外键列时可以简化为如下的形式:
SQL> alter table administration_emp
2 add constraint admin_dep_fk
3 foreign key(department_id)
4 references departments;
在定义外键FOREIGN KEY约束时,还可以通过关键字ON指定引用行为的类型。
当尝试删除被引表中的一条记录时,通过引用行为可以确定如何处理外键表中的外键列。
引用类型包括3种:
●在定义外键约束时,如果使用了CASADE关键字,那么当被引用表中被引用列的
数据被删除时,外键表中对应的数据也将被删除。
●在定义外键约束时,如果使用了关键字SET NULL,那么当被引用表中被引用列的
数据被删除时,外键表中外键列将被设置为NULL。
要使这个关键字起作用,在外
键列必须支持NULL值。
●在定义外键约束时,如果使用了关键字NO ACTION,那么当删除被引用表中被引
用列的数据时将违反外键约束,该操作将被禁止执行,这也是外键的默认引用类型。
例如,下面的实例将演示外键的级联删除。
(1)以HR身份连接到数据库,创建一个新的引用表,并为其添加主键约束。
SQL> connect hr/hr
已连接。
SQL> create table admin_dept
2 as select * from hr.departments
3 where department_id=10;
表已创建。
SQL> alter table admin_dept
2 add primary key(department_id);
表已更改。
(2)使用ON DELETE CASADE关键字修改ADMINISTRATION_EMP表的外键约束。
SQL> alter table administration_emp
2 add constraint admin_dept_fk
3 foreign key(department_id)
4 references admin_dept on delete cascade;
表已更改。
(3)查看ADMINISTRATION_EMP表中的数据。
SQL> select employee_id,last_name,job_id,salary,department_id
2 from administration_emp;
EMPLOYEE_ID LAST_NAME JOB_ID SALARY DEPARTMENT_ID
----------------- --------------------- ---------- ---------- -------------
200 Whalen AD_ASST 4400 10 (4)在指定外键行为类型为ON DELETE CASADE后,在删除被引用表ADMIN_DEPT 中编号为10的行时,系统将会级联删除ADMINISTRA TION_EMP表中所有的记录。
SQL> delete admin_dept
2 where department_id=10;
已删除 1 行。
SQL> select employee_id,last_name,job_id,salary,department_id
2 from administration_emp;
未选定行
与其他约束相同,如果想要删除外键约束,可以使用如下的ALTER TABLE语句形式:alter table administration_emp
drop constraint admin_dept_fk;。