Trong trường hợp giả định, tôi là người dùng không có đặc quyền tạo bảng. Tôi muốn biết liệu một cột trong một bảng có UNIQUE CONSTRAINT hay không. Có thể tra cứu nó trong DICTIONARY không? Làm thế nào tôi sẽ đi về nó?Tìm xem cột có ràng buộc duy nhất
Trả lời
Cả hai câu trả lời được đưa ra ở đây đều thiếu một cách để thực thi tính duy nhất trên cột: bằng cách tạo một chỉ số duy nhất (không xác định ràng buộc duy nhất trên cột). Xem hai liên kết này (one, two) nếu bạn không quen với tùy chọn này.
kiểm tra này nên được thực hiện thêm để kiểm tra hạn chế duy nhất:
select count(*) from
USER_IND_COLUMNS cols
where cols.table_name='YOUR_TABLE_NAME'
and cols.COLUMN_NAME='YOUR_COLUMN';
Để kiểm tra cho một hạn chế duy nhất sử dụng phương pháp đã được cung cấp:
select count(*) cnt
from user_constraints uc
where uc.table_name='YOUR_TABLE_NAME'
and uc.constraint_type='U';
Hoặc bạn cũng có thể tìm trong các chế độ xem ALL_CONSTRAINTS
và ALL_IND_COLUMNS
.
cho ràng buộc duy nhất bạn có thể làm một cái gì đó như:
select cons.constraint_type,
all_cols.owner, all_cols.constraint_name,
all_cols.table_name,
all_cols.column_name,
all_cols.position
from all_cons_columns col
inner join all_cons_columns all_cols
on col.owner = all_cols.owner
and col.constraint_name = all_cols.constraint_name
inner join all_constraints cons
on col.owner = cons.owner
and col.constraint_name = cons.constraint_name
where col.owner = 'SCHEMA'
and col.table_name = 'FOO'
and col.column_name = 'ID'
and cons.constraint_type in ('U', 'P')
order by owner, constraint_name, position;
thiết lập các chủ sở hữu, bảng và cột quan tâm và nó sẽ hiển thị cho bạn tất cả những hạn chế đó bao gồm cột đó
Lưu ý rằng điều này sẽ không hiển thị tất cả các trường hợp trong đó một chỉ mục duy nhất tồn tại trên một cột (vì có thể có một chỉ mục duy nhất tại chỗ mà không có ràng buộc).
dụ:
SQL> create table foo(id number, id2 number, constraint foo_con unique(id, id2), constraint foo_con2 unique(id));
Table created.
tại liệt kê tất cả những hạn chế đó bao gồm id
:
SQL> col column_name format a20
SQL> col constraint_name format a20
SQL> col table_name format a15
SQL> select cons.constraint_type,
2 all_cols.owner, all_cols.constraint_name,
3 all_cols.table_name,
4 all_cols.column_name,
5 all_cols.position
6 from all_cons_columns col
7 inner join all_cons_columns all_cols
8 on col.owner = all_cols.owner
9 and col.constraint_name = all_cols.constraint_name
10 inner join all_constraints cons
11 on col.owner = cons.owner
12 and col.constraint_name = cons.constraint_name
13 where col.owner = user
14 and col.table_name = 'FOO'
15 and col.column_name = 'ID'
16 and cons.constraint_type in ('U', 'P')
17 order by owner, constraint_name, position;
C OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME POSITION
- ------------------------------ -------------------- --------------- -------------------- ----------
U DTD_TRADE FOO_CON FOO ID 1
U DTD_TRADE FOO_CON FOO ID2 2
U DTD_TRADE FOO_CON2 FOO ID 1
select count(*) cnt
from user_constraints
where table_name=your_table_name
and constraint_type='U';
Nếu count = 0 thì không có UNIQUE
hạn chế khác có UNIQUE
hạn chế trên bàn của bạn.
Câu trả lời này không kiểm tra các chỉ mục duy nhất - xem câu trả lời của tôi để biết chi tiết;) – SebastianH
Đây là truy vấn mà tôi vừa thử. Nó liệt kê mỗi hạn chế tính độc đáo, xác định bởi chỉ số mà thực thi nó, và các cột là duy nhất:
select x.index_name, c.column_name, c.column_position
from USER_INDEXES x join USER_IND_COLUMNS c
on x.index_name = c.index_name and x.table_name = c.table_name
left join USER_CONSTRAINTS uc
on x.index_name = uc.index_name and x.table_name = uc.table_name
where x.status = 'VALID' and
(x.uniqueness = 'UNIQUE' or
uc.constraint_type = 'U' and uc.status = 'ENABLED' and uc.validated = 'VALIDATED')
and x.table_name='<your table name_in_caps>'
order by x.index_name, c.column_position;
Có vẻ như để làm việc cho khóa chính, chỉ số duy nhất, và thêm ràng buộc duy nhất.
- 1. Ràng buộc duy nhất qua nhiều cột
- 2. Ràng buộc duy nhất trên nhiều cột
- 3. ràng buộc duy nhất có điều kiện
- 4. SQL Server 2005 Ràng buộc duy nhất trên hai cột
- 5. Ràng buộc bảng SQLite - duy nhất trên nhiều cột
- 6. Buộc ràng buộc duy nhất trong GAE
- 7. JPA - xác định các ràng buộc duy nhất nhiều cột
- 8. Giảm ràng buộc duy nhất cho cột trong H2
- 9. Ràng buộc duy nhất có điều kiện trong oracle db
- 10. Các ràng buộc duy nhất trong couchdb
- 11. SQL: Ràng buộc duy nhất khi cột là một giá trị nhất định
- 12. Cột Ràng buộc duy nhất chỉ có thể chứa một giá trị NULL
- 13. MySQL: Ràng buộc duy nhất trên nhiều trường
- 14. kiểm tra ràng buộc duy nhất trong JPA
- 15. Postgres Ràng buộc duy nhất trên hai cột: Số nguyên và Boolean
- 16. Ràng buộc duy nhất với EFCodeFirst và SqlCe4
- 17. Ràng buộc duy nhất trong kiến trúc RESTFul
- 18. Alembic: Cách thêm ràng buộc duy nhất vào cột hiện tại
- 19. Làm cách nào để tạo một ràng buộc duy nhất của SQL dựa trên 2 cột?
- 20. Việc di chuyển để thêm ràng buộc duy nhất vào kết hợp các cột
- 21. Cách tạo Chỉ mục nhiều cột hoặc Ràng buộc duy nhất với NHibernate
- 22. Việc tạo một ràng buộc duy nhất trên một cột có tự động tạo chỉ mục không?
- 23. Ràng buộc duy nhất với chú thích dữ liệu
- 24. Ràng buộc duy nhất với giá trị được xác định
- 25. Ràng buộc duy nhất của Oracle và chỉ mục duy nhất
- 26. Các ràng buộc duy nhất trên DB có cần thiết không?
- 27. Tại sao không có ràng buộc duy nhất trong Google Appengine?
- 28. Vi phạm ràng buộc duy nhất của Oracle tham chiếu một ràng buộc dường như không tồn tại
- 29. Tìm nạp các hàng duy nhất, cột duy nhất với PDO
- 30. Làm thế nào để đưa ra một ràng buộc duy nhất đối với sự kết hợp các cột trong Oracle?
Câu trả lời này không kiểm tra các chỉ mục duy nhất - xem câu trả lời của tôi để biết chi tiết;). – SebastianH