

# `SET CONSTRAINTS`
<a name="set-constraints-syntax-support"></a>

`SET CONSTRAINTS` establece el comportamiento de la comprobación de las restricciones de clave externa dentro de la transacción actual.

## Sintaxis admitida
<a name="set-constraints-supported-syntax"></a>

```
SET CONSTRAINTS { ALL | name [, ...] } { DEFERRED | IMMEDIATE }
```

## Descripción
<a name="set-constraints-description"></a>

`SET CONSTRAINTS` establece el comportamiento de la comprobación de restricciones en la transacción actual. Las restricciones `IMMEDIATE` se comprueban al final de cada instrucción. Las restricciones `DEFERRED` no se comprueban hasta que la transacción se confirma. Cada restricción tiene su propio modo `IMMEDIATE` o `DEFERRED`.

Al crear una restricción, se asigna una de estas tres características: `DEFERRABLE INITIALLY DEFERRED`, `DEFERRABLE INITIALLY IMMEDIATE` o `NOT DEFERRABLE`. La tercera clase es siempre `IMMEDIATE` y el comando `SET CONSTRAINTS` no la cambia. Las dos primeras clases inician todas las transacciones en el modo indicado, pero se puede cambiar su comportamiento dentro de una transacción mediante `SET CONSTRAINTS`.

`SET CONSTRAINTS` con una lista de nombres de restricciones cambia solo el modo de esas restricciones. Todas las restricciones nombradas deben ser aplazables. `SET CONSTRAINTS ALL` cambia el modo de todas las restricciones aplazables.

Cuando `SET CONSTRAINTS` cambia el modo de una restricción de `DEFERRED` a `IMMEDIATE`, el nuevo modo surtirá efecto de forma retroactiva. Aurora DSQL comprueba inmediatamente cualquier modificación de datos pendiente que, de otro modo, se habría aplazado hasta el final de la transacción. Si se infringe alguna de estas restricciones, el comando `SET CONSTRAINTS` produce un error y no cambia el modo de restricción.

Para ver una descripción de las opciones de aplazamiento (`DEFERRABLE`, `NOT DEFERRABLE`, `INITIALLY DEFERRED`, `INITIALLY IMMEDIATE`), consulte [Aplazabilidad](create-table-syntax-support.md#create-table-fk-deferrability) en la página [`CREATE TABLE`](create-table-syntax-support.md).

**Solo restricciones de clave externa**  
En Aurora DSQL, `SET CONSTRAINTS` se aplica solo a las restricciones de clave externa. Las restricciones de clave principal, única, `NOT NULL` y `CHECK` siempre se comprueban inmediatamente cuando se inserta o modifica una fila, incluso cuando se ejecuta `SET CONSTRAINTS ALL DEFERRED`.

## Notas
<a name="set-constraints-notes"></a>

Aurora DSQL cambia el comportamiento de las restricciones solo dentro de la transacción actual. Para usar `SET CONSTRAINTS`, ejecútelo dentro de un bloque de transacciones explícito.

## Compatibilidad
<a name="set-constraints-compatibility"></a>

Este comando cumple con el comportamiento definido en el estándar SQL, con la restricción de que Aurora DSQL solo admite el aplazamiento para restricciones de clave externa.