Estoy utilizando una tabla de Oracle y he creado una restricción única sobre cuatro columnas. ¿Pueden estas columnas dentro de la restricción tener NULL en ellas?Restricción única en varias columnas
Respuesta
puede tener valores nulos en sus columnas a menos que las columnas se especifican NOT NULL. Usted será capaz de almacenar sólo una instancia de valores NULL sin embargo (no se permitirán dos conjuntos de mismas columnas a menos que todas las columnas son 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
Dos nulos no se consideran iguales en Oracle, por lo que estas columnas pueden tener nulos en ellos.
Sí, Oracle permite que las restricciones ÚNICAS contengan columnas con contenido NULO, pero las restricciones PRIMARY KEY no pueden contener columnas que contengan valores NULL. (Editado: era "... columnas que aceptan nulos", pero mi ejemplo a continuación muestra que no es cierto. Las columnas en un PK se pueden definir como nulables, pero no pueden contener NULL).
No puede tener un Restricción ÚNICA y una restricción PRIMARY KEY con las mismas columnas.
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.
- 1. Restricción única sobre varias columnas
- 2. Restricción de la tabla de SQLite: única en varias columnas
- 3. Combinación de dos columnas restricción única
- 4. Postgres Restricción única en dos columnas: Entero y booleano
- 5. La creación de restricción única en varias columnas en MySQL Workbench diagrama EER
- 6. Agregue una restricción única en columnas múltiples con FluentNHibernate
- 7. SQL Server 2005 Restricción única en dos columnas
- 8. restricción única condicional
- 9. Griales clase de dominio: restricción única para múltiples columnas
- 10. PostgreSQL: Condicional restricción única
- 11. MongoDB: eliminar restricción única
- 12. Restricción única no creada en JPA
- 13. restricción de fila única en SQL Server
- 14. restricción CHECK en múltiples columnas
- 15. Restricción única en múltiples campos en Access 2003
- 16. MySQL: restricción única en campos múltiples
- 17. Utilizando una restricción única en Hibernate JPA2
- 18. Restricción única en una arquitectura RESTFul
- 19. Restricción condicional única en Oracle db
- 20. Cómo crear una restricción ÚNICA compuesta en FluentNHibernate?
- 21. DISTINCT en varias columnas
- 22. join en varias columnas
- 23. ¿Cómo puedo crear una restricción única de SQL basada en 2 columnas?
- 24. Dividir varias columnas en varias filas
- 25. SQL dividir varias columnas en varias filas
- 26. DDD - Validación de la restricción única
- 27. Restricción única frente a índice único
- 28. Caída Restricción única de la tabla MySQL
- 29. Hibernate @OneToMany y la restricción ÚNICA
- 30. grails composite "restricción única", pero ¿cómo?
Me parece que es bastante trivial para averiguar la respuesta a esto con una prueba. ¿Puede tomar más de un minuto hacerlo? –
Sí, tienes razón. Pero he aprendido otra información de las respuestas que Vincent, Amber y Shoover han publicado. – Nicks