¿Qué hace exactamente la restricción de clave externa "NO ACTION" de SQLite y cómo es diferente de "RESTRICT"?
La documentación dice:
Configurar "NO ACTION" significa que: cuando se modifica o elimina una clave primaria de la base de datos, no se realiza ninguna acción especial.
Mi primera interpretación de esta frase fue "si se modifica o suprime la clave principal, entonces se realiza esta modificación y no se toma ninguna otra acción", por lo que no se preserva la integridad de la base de datos, lo que conduce a cierta confusión . Pero mis pruebas mostraron que si intento eliminar una clave principal (si todavía existe una clave secundaria), recibo una excepción ("SQLiteConstraintException: código de error 19: la restricción falló" – Estoy probando en android 4.0.3 / SQLite 3.7.x), por lo que "NO ACTION" parece comportarse como se esperaba.
¿Podría alguien por favor explicar y tal vez dar un ejemplo, lo que exactamente "NO ACCIÓN" hace y cómo es diferente de "RESTRICT".
- Rowid en SQLite3 y Android
- ¿Cuáles son las mejores prácticas para SQLite en Android?
- Recuperar una lista de todas las tablas de la base de datos
- Las transacciones en la base de datos no funcionan en android
- Cómo eliminar las viejas filas de la base de datos sqlite en android?
- Android SQLite ON CONFLICT UPDATE es posible?
- Malo rendimiento de SQLite en almacenamiento externo en Android
- Actualizar la base de datos Sqlite en android?
El párrafo introductorio dice:
Si una acción no se especifica explícitamente, el valor predeterminado es "NO ACTION".
Esta es la acción normal.
Además:
La diferencia entre el efecto de una acción RESTRICT y la restricción de restricción de clave externa normal es que el procesamiento de la acción RESTRICT se produce tan pronto como se actualiza el campo -no al final de la sentencia actual como lo haría con una restricción inmediata o al final De la transacción actual como lo haría con una restricción diferida.
Si está probando con una transacción de una sola sentencia que cambia sólo un registro, no verá ninguna diferencia entre NO ACTION
y RESTRICT
.
- Cómo agregar un grupo "Virtual" / "Shadow" a SimpleCursorTreeAdapter?
- Android Open WebView en fondo de servicio y captura de pantalla