Tôi dự định xóa dữ liệu khỏi bảng, tôi muốn biết có bao nhiêu bảng và bảng nào có tham chiếu khóa ngoài tới bảng cụ thể này trong Oracle. Như tôi sẽ phải thiết lập các khóa nước ngoài để null. Tôi muốn biết danh sách tất cả các bảng có FK đến bảng cụ thể này.Làm thế nào để tìm các bảng có khóa ngoài đến một bảng trong Oracle?
Trả lời
select d.table_name,
d.constraint_name "Primary Constraint Name",
b.constraint_name "Referenced Constraint Name"
from user_constraints d,
(select c.constraint_name,
c.r_constraint_name,
c.table_name
from user_constraints c
where table_name='EMPLOYEES' --your table name instead of EMPLOYEES
and constraint_type='R') b
where d.constraint_name=b.r_constraint_name
Tôi tin rằng phải là, '" Tham chiếu Ràng buộc Tên "', như đó là tên của ràng buộc tham chiếu đến ràng buộc chính, không phải là cách khác xung quanh. – jpmc26
Không cần thực hiện bước này theo cách thủ công - bạn chỉ có thể sử dụng cascading delete.
Trước tiên, bạn cần * tìm * bảng có nhu cầu FK được cập nhật để cho phép xóa chữ hoa mặc dù – Brian
SELECT
FK.OWNER||'.'||FK.TABLE_NAME AS CHILD_TABLE,
SRC.OWNER||'.'||SRC.TABLE_NAME AS PARENT_TABLE,
FK.CONSTRAINT_NAME AS FK_CONSTRAINT,
SRC.CONSTRAINT_NAME AS REFERENCED_CONSTRAINT
FROM ALL_CONSTRAINTS FK
JOIN ALL_CONSTRAINTS SRC ON FK.R_CONSTRAINT_NAME = SRC.CONSTRAINT_NAME
WHERE
FK.CONSTRAINT_TYPE = 'R'
AND SRC.OWNER = 'MY_SCHEMA'
AND SRC.TABLE_NAME = 'MY_TABLE';
Tôi có một tình huống mà bảng mà tôi quan tâm không thuộc sở hữu của lược đồ mà tôi đã kết nối. Vì vậy, tôi cần sửa đổi truy vấn trong số currently accepted answer để sử dụng ALL_CONSTRAINTS
thay vì USER_CONSTRAINTS
. Trong quá trình này, tôi đã phạm sai lầm, và tôi thấy câu trả lời được chấp nhận là rất khó đọc để tôi có thể sửa nó. (Việc thiếu lời giải thích không giúp được gì.) Kết quả là tôi đã tìm ra câu hỏi của riêng mình. Về cơ bản nó giống nhau, nhưng tôi nghĩ nó dễ hơn một chút.
FK.CONSTRAINT_TYPE = 'R'
lọc xuống FK
thành một tập hợp các ràng buộc khóa ngoài và các cặp tham gia các khóa ngoài này với "Ràng buộc tham chiếu" của chúng. (Ràng buộc tham chiếu thường là khóa chính của bảng "cha mẹ"). Cuối cùng, chúng tôi lọc xuống bảng cha mà chúng tôi quan tâm đến việc sử dụng SRC.OWNER = 'MY_SCHEMA' AND SRC.TABLE_NAME = 'MY_TABLE'
.
Tất nhiên, bạn có thể chuyển đổi điều này để sử dụng USER_CONSTRAINTS
nếu bạn muốn; chỉ cần xóa séc SRC.OWNER
và các tiền tố OWNER
trong SELECT
.
FK.CONSTRAINT_TYPE = 'R' không cần thiết cho điều này – abhihello123
Dịch vụ chăm sóc người quản lý có nên giải thích không? – jpmc26
@ abhihello123 Có lẽ không đúng, vì 'FK.R_CONSTRAINT_NAME' có lẽ là' NULL' cho các hàng có các loại khác. Mặt khác, nó không làm tổn thương gì cả. – jpmc26
SELECT a.table_name, a.column_name, a.constraint_name, c.owner,
-- referenced pk
c.r_owner, c_pk.table_name r_table_name, c_pk.constraint_name r_pk
FROM all_cons_columns a
JOIN all_constraints c ON a.owner = c.owner
AND a.constraint_name = c.constraint_name
JOIN all_constraints c_pk ON c.r_owner = c_pk.owner
AND c.r_constraint_name = c_pk.constraint_name
WHERE c.constraint_type = 'R'
AND a.table_name = :TableName
Nếu bạn cũng cần các lĩnh vực để được bao gồm:
select b.table_name "Referencing Table",
b.CONSTRAINT_NAME "Referencing Constraint",
(select wm_concat(column_name)
from all_cons_columns
where owner = b.owner
and constraint_name = b.CONSTRAINT_NAME
) "Referencing Columns",
a.CONSTRAINT_NAME "Referenced Constraint",
(select wm_concat(column_name)
from all_cons_columns
where owner = a.owner
and constraint_name = a.CONSTRAINT_NAME
) "Referenced columns"
from all_constraints a,
all_constraints b
where a.owner = b.r_owner
and a.owner = '<<OWNER>>'
and a.table_name = '<<TABLE_NAME>>'
and a.constraint_type in ('P', 'U')
and b.constraint_type = 'R'
and b.R_CONSTRAINT_NAME = a.constraint_name
Dưới truy vấn sẽ cung cấp cho tất cả các ràng buộc khoá ngoại xác định trên TABLE_NAME:
select baseTable.* from all_constraints baseTable , all_constraints referentedTable
where baseTable.R_CONSTRAINT_NAME = referentedTable.CONSTRAINT_NAME
and baseTable.constraint_type = 'R'
and referentedTable.table_name = 'TABLE_NAME';
Tại sao 'baseTable.constraint_type = 'R''? –
'R' là viết tắt của Toàn vẹn tham chiếu và chúng tôi chỉ muốn kiểm tra ràng buộc khóa ngoài ở đây. Vì vậy, baseTable.constraint_type = 'R' nên được sử dụng. constraint_type cũng có thể lấy các giá trị có thể khác mà bạn có thể kiểm tra tại đây -> https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_1037.htm#i1576022 – nanosoft
Truy vấn này sẽ nhận tất cả các bảng tên đó bất kể lược đồ. Nếu nhiều bảng trong các lược đồ khác nhau có cùng tên, nó sẽ chọn tất cả chúng. Điều thậm chí còn tệ hơn là việc bạn chọn các cột 'SELECT'ed làm cho nó không thể biết được * bảng nào đang được tham chiếu khi nó tìm thấy nhiều bảng. – jpmc26
Có lẽ tôi hiểu lầm gì Walker hỏi , nhưng điều tôi hiểu là: Cách tìm các bảng có tham chiếu khóa ngoài tới một bảng cụ thể (ví dụ: EMPLOYEES).
Nếu tôi cố gắng Kupa của câu trả lời:
select d.table_name,
d.constraint_name "Primary Constraint Name",
b.constraint_name "Referenced Constraint Name"
from user_constraints d,
(select c.constraint_name,
c.r_constraint_name,
c.table_name
from user_constraints c
where table_name='EMPLOYEES' --your table name instead of EMPLOYEES
and constraint_type='R') b
where d.constraint_name=b.r_constraint_name
tôi nhận được các bảng trên mà nhân viên có một tài liệu tham khảo chính nước ngoài để.
EMPLOYEES.foreign_key => TABLES.primary_key
Xem dưới sql cập nhật để lấy các bảng mà có một tham chiếu chính nước ngoài để người lao động.
TABLES.foreign_key => EMPLOYEES.primary_key
select b.table_name "Table Name",
b.constraint_name "Constraint Name",
d.table_name "Referenced Table Name",
d.constraint_name "Referenced Constraint Name"
from user_constraints d,
(select c.constraint_name,
c.r_constraint_name,
c.table_name
from user_constraints c
where constraint_type='R') b
where d.table_name = 'EMPLOYEES' --your table name instead of EMPLOYEES
and b.r_constraint_name = d.constraint_name;
- 1. Làm thế nào để có được tất cả các bảng có FK đến một bảng khác?
- 2. Làm thế nào để tìm tất cả các bảng có khóa ngoài tham chiếu bảng cụ thể.column và có giá trị cho các khóa nước ngoài?
- 3. khóa ngoài có thể tham chiếu đến khóa chính trong cùng một bảng không?
- 4. Oracle SQL - tìm các giá trị trong một bảng KHÔNG
- 5. Làm thế nào để viết một bảng chữ trong Oracle?
- 6. Django: Làm thế nào để có một bội số phím nước ngoài tham chiếu cùng một bảng trong một bảng
- 7. Phân vùng bảng mySQL có khóa ngoài?
- 8. MySQL: Làm cách nào để tìm hiểu bảng nào tham chiếu đến một bảng cụ thể?
- 9. SQL cập nhật một bảng có khóa ngoài
- 10. Tham gia các bảng, khóa ngoài
- 11. Làm thế nào để tìm một Khóa Ngoại của một bảng thông qua T-SQL?
- 12. Oracle SQL làm thế nào để tìm ra bảng có hai cột sau đây?
- 13. SQL làm cách nào để bạn truy vấn các bảng tham chiếu đến một giá trị khóa ngoài cụ thể?
- 14. Chọn Truy vấn từ 3 bảng có khóa ngoài
- 15. Chìa khóa nước ngoài cho một trong nhiều bảng?
- 16. SQL: Chèn dữ liệu từ bảng khác trong một bảng có chứa các phím nước ngoài
- 17. Các khóa ngoài cho các bảng myISAM và InnoDB
- 18. Làm thế nào để tìm kiếm dòng char mới trong bảng oracle?
- 19. Trong sqlalchemy, làm thế nào tôi có thể sử dụng thừa kế bảng đa hình thừa kế khi bảng con có nhiều khóa nước ngoài vào bảng cha?
- 20. Sử dụng di chuyển để xóa bảng có khóa ngoài
- 21. Bảng nối tiếp với mảng khóa ngoài?
- 22. Làm thế nào tôi có thể tìm thấy OWNER của một đối tượng trong Oracle?
- 23. Khóa nước ngoài đề cập đến các khóa chính trên nhiều bảng?
- 24. Oracle tất cả các tham chiếu khóa ngoài
- 25. Oracle Chèn qua Chọn từ nhiều bảng trong đó một bảng có thể không có hàng
- 26. Làm thế nào để tìm các thay đổi trong một bảng liên quan đến một trận đấu SQL ban đầu?
- 27. Bảng Oracle có $ trong tên
- 28. MySQL - Cách chèn vào nhiều bảng có khóa ngoài
- 29. Tìm bảng đã khóa trong SQL Server
- 30. Oracle 11gR2 tải nhiều tệp: sqlldr hoặc bảng bên ngoài?
thể trùng lặp của [Oracle tất cả các tài liệu tham khảo chính nước ngoài] (http://stackoverflow.com/questions/1171373/oracle-all-foreign-key-references) –
bản sao có thể có của [Làm thế nào tôi có thể tìm thấy bảng nào tham khảo một bảng đã cho trong Oracle SQL Developer?] (Http: // stackoverflow.com/questions/1143728/how-can-i-find-which-table-reference-a-given-table-in-oracle-sql-developer) – FrustratedWithFormsDesigner