¿Podemos actualizar los valores de las claves primarias de una tabla?¿Podemos actualizar los valores de clave primaria de una tabla?
Respuesta
Respuesta corta: sí se puede. Por supuesto, deberá asegurarse de que el nuevo valor no concuerde con ningún valor existente y que se cumplan otras restricciones (duh).
¿Qué estás tratando de hacer exactamente?
Supongo que fusionaría la base de datos 2 en la base de datos 1, donde cada uno tiene una tabla de usuarios, y en esas 2 tablas, el mismo nombre de usuario tiene una identificación diferente (identificación de autoincrement). –
Puede siempre que
- El valor es único
- No hay claves externas existentes se violan
Usted puede, bajo ciertas circunstancias.
Pero el hecho de que usted considere esto es una fuerte señal de que hay algo mal con su arquitectura: las claves primarias deben ser puramente técnicas y no tienen ningún significado de negocios en absoluto. Entonces nunca debería haber la necesidad de cambiarlos.
Thomas
"Las claves primarias deben ser puramente técnicas y no tienen ningún significado comercial" - esa es su opinión, no es un hecho. El debate sustitutivo vs. el natural no se ha cerrado. –
Aunque estoy de acuerdo en que el debate aún está abierto, este caso es un fuerte argumento para los sustitutos. – DCookie
Está comúnmente aceptado que primary keys should be immutable (o as stable as possible desde la inmutabilidad no puede ser ejecutada en la base de datos). Aunque no hay nada que le impedirá actualizar una clave principal (excepto restricción de integridad), puede que no sea una buena idea:
Desde el punto de vista del rendimiento:
- Usted tendrá que actualizar todos claves externas que hacen referencia a la clave actualizada. Una sola actualización puede conducir a la actualización de potencialmente muchas tablas/filas.
- Si las claves externas no están indexadas (!!) tendrá que mantener un bloqueo en la tabla de elementos secundarios para garantizar la integridad. Oracle solo mantendrá el bloqueo por un corto tiempo, pero aún así, esto da miedo.
- Si sus claves foráneas están indexadas (como deberían), la actualización conducirá a la actualización del índice (eliminar + insertar en la estructura de índice), esto generalmente es más caro que la actualización real de la tabla base.
- En las tablas ORGANIZATION INDEX (en otros RDBMS, vea la clave principal agrupada), las filas se clasifican físicamente por la clave principal. Una actualización lógica dará lugar a un examen físico eliminar insertar + (más caro)
Otras consideraciones:
- Si se hace referencia a esta clave en cualquier sistema externo (caché de la aplicación, otra base de datos, la exportación ...), la referencia se romperá en la actualización.
- adicionalmente, algunos RDBMS no son compatibles con CASCADE UPDATE, in particular Oracle.
En conclusión, durante el diseño, generalmente es más seguro utilizar una clave sustituta en lugar de una clave principal natural que se supone no cambiar - pero con el tiempo pueden necesitar ser actualizado debido a las nuevas exigencias o incluso datos error de entrada
Si tiene que actualizar una clave primaria con la tabla de niños, vea this post by Tom Kyte for a solution.
Diría que la estabilidad se cita más comúnmente como un atributo deseable de un PK en lugar de inmutabilidad. [Ejemplos] (http://stackoverflow.com/questions/3632726/what-are-the-design-criteria-for-primary-keys/3668234#3668234) –
@Martin: Entiendo la distinción, pero creo que a * physical * la clave principal (es decir, la que define en la base de datos) debe ser inmutable. La clave principal del * modelo conceptual de datos * debe tener los atributos dados en las respuestas del enlace que proporcionó pero puede ser diferente de la clave física final (familiaridad, por ejemplo, no es IMO un criterio para la clave principal de la tabla actual) Mi respuesta se relaciona con la clave principal del modelo físico. –
+1, especialmente la sugerencia de clave sustituta. – DCookie
Los atributos de clave principal son tan actualizables como cualquier otro atributo de una tabla. La estabilidad es a menudo una propiedad deseable de una llave, pero definitivamente no es un requisito absoluto. Si tiene sentido desde una perspectiva comercial actualizar una clave, entonces no hay una razón fundamental por la que no deba hacerlo.
Desde el punto de vista de la teoría de base de datos relacional, no debería haber absolutamente ningún problema al actualizar la clave primaria de una tabla, siempre que no haya duplicados entre las claves primarias y que no intente poner un valor NULO en cualquiera de las columnas de clave principal.
- 1. tabla no tiene una clave primaria
- 2. Insertar una clave primaria autoincrementada en una tabla de acceso
- 3. Actualización de MySQL primaria clave
- 4. Determine la clave primaria de una tabla utilizando TSQL
- 5. cómo actualizar un registro sin preocuparse por la clave primaria
- 6. Entidad JPA para una tabla sin clave primaria
- 7. ¿podemos tener una clave externa que no sea la clave principal en ninguna otra tabla?
- 8. ¿Podemos actualizar los datos en la vista
- 9. Cómo agregar una clave primaria compuesta a la tabla
- 10. Clave externa de tabla SQL que es parte de una clave primaria compuesta
- 11. APP primaria de auto clave generar
- 12. clave primaria versus clave
- 13. clave primaria compuesta
- 14. h2 sql, crear tabla con clave primaria de varias columnas?
- 15. Inserciones manuales en una tabla de postgres con una secuencia de clave primaria
- 16. ¿Falsifica una clave primaria compuesta? Rails
- 17. Actualizar una tabla MySQL con valores de otra
- 18. eliminar registros duplicados de una tabla de SQL sin una clave primaria
- 19. obteniendo un error con linq-to-sql en una tabla con una clave primaria compuesta
- 20. Actualizar los valores de la tabla de otra tabla con el mismo nombre de usuario
- 21. ¿Cómo ordenar los valores en columnas y actualizar la tabla?
- 22. restricción de violación de clave primaria
- 23. Inserto de Linq sin clave primaria
- 24. ¿Requiere MySQL una clave primaria para una tabla de enlaces de muchos a muchos?
- 25. clave primaria compuesta de PostgreSQL
- 26. Clave primaria de datos principales
- 27. Ventajas y desventajas de tener una clave primaria compuesta ...
- 28. valores clave clave de intercambio sql
- 29. cómo crear una clave primaria compuesta (anotación de persistencia java)
- 30. ¿Cómo se desactiva la restricción de clave primaria mediante programación?
¿Por qué querrías hacer eso? – Rene