Tôi đang sử dụng một bảng oracle và đã tạo ra một ràng buộc duy nhất trên bốn cột. Các cột này trong giới hạn có NULL không?Ràng buộc duy nhất trên nhiều cột
25
A
Trả lời
41
bạn có thể có NULL trong cột của mình trừ khi cột được chỉ định NOT NULL. Bạn sẽ có thể lưu trữ chỉ một ví dụ của NULLs tuy nhiên (không có hai bộ cùng một cột sẽ được phép trừ khi tất cả các cột là NULL):
SQL> CREATE TABLE t (id1 NUMBER, id2 NUMBER);
Table created
SQL> ALTER TABLE t ADD CONSTRAINT u_t UNIQUE (id1, id2);
Table altered
SQL> INSERT INTO t VALUES (1, NULL);
1 row inserted
SQL> INSERT INTO t VALUES (1, NULL);
INSERT INTO t VALUES (1, NULL)
ORA-00001: unique constraint (VNZ.U_T) violated
SQL> /* you can insert two sets of NULL, NULL however */
SQL> INSERT INTO t VALUES (NULL, NULL);
1 row inserted
SQL> INSERT INTO t VALUES (NULL, NULL);
1 row inserted
2
Hai giá trị rỗng được coi là không bằng nhau trong Oracle, do đó, các cột này có thể có null trong chúng.
5
Có, Oracle cho phép các ràng buộc UNIQUE chứa các cột có nội dung NULL, nhưng các ràng buộc PRIMARY KEY không thể chứa các cột chứa các giá trị NULL. (Đã chỉnh sửa: là "... cột rỗng ...", nhưng ví dụ của tôi dưới đây cho thấy rằng không đúng. Cột trong một PK có thể được định nghĩa là nullable, nhưng không thể chứa NULL.)
Bạn không thể có Ràng buộc UNIQUE và ràng buộc PRIMARY KEY với cùng các cột.
SQL> create table stest (col1 integer not null, col2 integer null);
Table created.
SQL> alter table stest add constraint stest_uq unique (col1, col2);
Table altered.
SQL> insert into stest values (1, 3);
1 row created.
SQL> insert into stest values (1, null);
1 row created.
SQL> insert into stest values (1, null);
insert into stest values (1, null)
*
ERROR at line 1:
ORA-00001: unique constraint (SUSAN_INT.STEST_UQ) violated
SQL> insert into stest values (2, null);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from stest;
COL1 COL2
---------- ----------
1 3
1
2
SQL> alter table stest add constraint stest_pk PRIMARY KEY (col1, col2);
alter table stest add constraint stest_pk PRIMARY KEY (col1, col2)
*
ERROR at line 1:
ORA-01449: column contains NULL values; cannot alter to NOT NULL
SQL> truncate table stest;
Table truncated.
SQL> alter table stest add constraint stest_pk PRIMARY KEY (col1, col2);
alter table stest add constraint stest_pk PRIMARY KEY (col1, col2)
*
ERROR at line 1:
ORA-02261: such unique or primary key already exists in the table
SQL> alter table stest drop constraint stest_uq;
Table altered.
SQL> alter table stest add constraint stest_pk PRIMARY KEY (col1, col2);
Table altered.
Các vấn đề liên quan
- 1. Ràng buộc duy nhất qua nhiều cột
- 2. Ràng buộc bảng SQLite - duy nhất trên nhiều cột
- 3. JPA - xác định các ràng buộc duy nhất nhiều cột
- 4. MySQL: Ràng buộc duy nhất trên nhiều trường
- 5. SQL Server 2005 Ràng buộc duy nhất trên hai cột
- 6. ràng buộc duy nhất có điều kiện
- 7. Tìm xem cột có ràng buộc duy nhất
- 8. Giảm ràng buộc duy nhất cho cột trong H2
- 9. Buộc ràng buộc duy nhất trong GAE
- 10. sqlalchemy duy nhất trên nhiều cột
- 11. Cách tạo Chỉ mục nhiều cột hoặc Ràng buộc duy nhất với NHibernate
- 12. Postgres Ràng buộc duy nhất trên hai cột: Số nguyên và Boolean
- 13. 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?
- 14. Ràng buộc duy nhất có điều kiện trong oracle db
- 15. Các ràng buộc duy nhất trong couchdb
- 16. SQL: Ràng buộc duy nhất khi cột là một giá trị nhất định
- 17. Có thể tạo một ràng buộc duy nhất (chỉ mục) trên nhiều bảng không?
- 18. kiểm tra ràng buộc duy nhất trong JPA
- 19. Cột Ràng buộc duy nhất chỉ có thể chứa một giá trị NULL
- 20. Grails lớp miền: hạn chế duy nhất cho nhiều cột
- 21. Ràng buộc duy nhất với EFCodeFirst và SqlCe4
- 22. Việc di chuyển để thêm ràng buộc duy nhất vào kết hợp các cột
- 23. Alembic: Cách thêm ràng buộc duy nhất vào cột hiện tại
- 24. Ràng buộc duy nhất của Oracle và chỉ mục duy nhất
- 25. Ràng buộc duy nhất trong kiến trúc RESTFul
- 26. Ràng buộc duy nhất với chú thích dữ liệu
- 27. Ràng buộc duy nhất với giá trị được xác định
- 28. 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?
- 29. Các ràng buộc duy nhất trên DB có cần thiết không?
- 30. Vi phạm ràng buộc duy nhất trên Magento 1.4.0 đến 1.6.2.0 nâng cấp
Dường như với tôi là khá tầm thường để tìm ra câu trả lời cho điều này với một thử nghiệm. Có thể mất hơn một phút để làm như vậy? –
Có - bạn nói đúng. Nhưng tôi đã học được những thông tin khác từ những câu trả lời mà Vincent, Amber và Shoover đã đăng. – Nicks