English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Las restricciones de PostgreSQL se utilizan para especificar las reglas de los datos en la tabla.
Si hay un comportamiento de datos que viola la restricción, el comportamiento será detenido por la restricción.
Las restricciones se pueden especificar en el momento de la creación de la tabla (a través de la sentencia CREATE TABLE) o después de la creación de la tabla (a través de la sentencia ALTER TABLE).
Las restricciones aseguran la precisión y confiabilidad de los datos en la base de datos.
Las restricciones pueden ser de nivel de columna o de nivel de tabla. Las restricciones de nivel de columna solo se aplican a la columna, mientras que las restricciones de nivel de tabla se aplican a toda la tabla.
Las restricciones más comunes en PostgreSQL son las siguientes.
NOT NULLIndica que una columna no puede almacenar valores NULL.
UNIQUEAsegura que los valores de una columna sean únicos.
PRIMARY Key: Combinación de NOT NULL y UNIQUE. Asegura que una columna (o una combinación de dos o más columnas) tenga un identificador único, lo que facilita y acelera la búsqueda de un registro específico en la tabla.
FOREIGN Key: Garantiza la integridad referencial de los valores entre dos tablas, asegurando que los datos de una tabla coincidan con los valores de otra tabla.
CHECK: Garantiza que los valores de la columna cumplan con las condiciones especificadas.
EXCLUSION: Restricción exclusiva, garantiza que si se compara cualquier dos filas de las columnas especificadas o expresiones utilizando el operador especificado, al menos uno de los operadores comparativos devolverá falso o un valor vacío.
Por defecto, una columna puede guardarse como valor NULL. Si no deseas que una columna tenga valores NULL,则需要在该列上定义 esta restricción, especificando que no se permiten valores NULL en la columna.
NULL y no tener datos no es lo mismo, representa datos desconocidos.
ejemplo
A continuación, se muestra un ejemplo de la creación de una nueva tabla llamada COMPANY1Se agregó 5 Se define un campo, donde tres ID, NAME, AGE no aceptan valores nulos:
CREATE TABLE COMPANY1( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
La restricción UNIQUE puede establecer una columna como única, evitando que se repitan valores en la misma columna.
ejemplo
A continuación, se muestra un ejemplo de la creación de una nueva tabla llamada COMPANY3Se agregó 5 Se define un campo, donde AGE se establece como UNIQUE, por lo que no puedes agregar dos registros con la misma edad:
CREATE TABLE COMPANY3( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL UNIQUE, ADDRESS CHAR(50), SALARY REAL DEFAULT 50000.00 );
Al diseñar una base de datos, el PRIMARY KEY es muy importante.
La PRIMARY KEY, también conocida como clave principal, es el identificador único de cada registro en la tabla de datos.
Pueden haber múltiples columnas configuradas con UNIQUE, pero solo una columna en una tabla puede establecerse como PRIMARY KEY.
Podemos usar la clave principal para referirnos a las filas en una tabla, y también para crear relaciones entre tablas configurando la clave principal como clave foránea en otra tabla.
La clave principal es una combinación de restricción no nula y restricción única.
Una tabla solo puede tener una clave principal, que puede consistir en un solo campo o en múltiples campos. Cuando múltiples campos actúan como clave principal, se denominan clave compuesta.
Si una tabla define una clave principal en cualquier campo, no pueden haber dos registros con valores idénticos en estos campos.
ejemplo
A continuación, creamos COMAPNY4 La tabla en la que ID actúa como clave principal:
CREATE TABLE COMPANY4( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
La restricción de FOREIGN KEY, también conocida como clave foránea, especifica que los valores en una columna (o un grupo de columnas) deben coincidir con los valores que aparecen en una fila de otra tabla.
Generalmente, una clave foránea en una tabla apunta a una clave única en otra tabla (es decir, una restricción única), lo que mantiene la integridad referencial entre dos tablas relacionadas.
ejemplo
A continuación, se muestra un ejemplo de la creación de una tabla COMPANY6 La tabla y añadió5Los campos:
CREATE TABLE COMPANY6( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
A continuación, se crea una tabla DEPARTMENT1 la tabla y añade 3 Un campo, EMP_ID es una clave foránea, que hace referencia a COMPANY6 la ID:
CREATE TABLE DEPARTMENT1( ID INT PRIMARY KEY NOT NULL, DEPT CHAR(50) NOT NULL, EMP_ID INT references COMPANY6(ID) );
La restricción de CHECK garantiza que todos los valores en la columna satisfagan una condición específica, es decir, se realiza una verificación de entrada para un registro. Si el valor de la condición es false, el registro viola la restricción y no se puede ingresar en la tabla.
ejemplo
Por ejemplo, a continuación, se crea una nueva tabla COMPANY5Se han añadido cinco columnas. Aquí, hemos añadido CHECK a la columna SALARY, por lo que el salario no puede ser cero:
CREATE TABLE COMPANY5( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL CHECK(SALARY > 0) );
La restricción de EXCLUSION asegura que si se utiliza el operador especificado para comparar dos filas en una columna o expresión especificada, al menos uno de los operadores de comparación devolverá false o null.
ejemplo
A continuación, se muestra un ejemplo de la creación de una tabla COMPANY7 tabla, agregar 5 un campo y utiliza restricciones EXCLUDE.
CREATE TABLE COMPANY7( ID INT PRIMARY KEY NOT NULL, NAME TEXT, AGE INT, ADDRESS CHAR(50), SALARY REAL, EXCLUDE USING gist (NAME WITH =, -- Si el NAME es el mismo pero el AGE es diferente, no se permite la inserción, de lo contrario, se permite la inserción. AGE WITH <>) -- El resultado de la comparación es que si toda la expresión de la tabla devuelve true, no se permite la inserción, de lo contrario, se permite. );
Aquí, USING gist es un tipo de índice utilizado para construir y ejecutar índices.
Necesita ejecutar el comando CREATE EXTENSION btree_gist una vez para cada base de datos, lo que instalará la extensión btree_gist, que define restricciones EXCLUDE para tipos de datos escalares puros.
Ya que hemos ejecutado forzadamente que la edad debe ser la misma, veamos esto insertando un registro en la tabla:
INSERT INTO COMPANY7 VALORES (1, 'Paul', 32, 'California', 20000.00 ); INSERT INTO COMPANY7 VALORES (2, 'Paul', 32, 'Texas', 20000.00 ); -- Este registro tiene el mismo NAME que el primero y el AGE también es el mismo, por lo que cumple con las condiciones de inserción INSERT INTO COMPANY7 VALORES (3, 'Allen', 42, 'California', 20000.00 ); -- Esta información es la misma que la anterior en NAME, pero en AGE es diferente, por lo que no se permite la inserción
Las dos primeras COMPANIES se agregaron sin problemas7 en la tabla, pero el tercero generará un error:
ERROR: Valor duplicado de clave viola la restricción única "company7_pkey" DETALLES: Clave (id)=(3) ya existe.
Para eliminar una restricción, debe conocer el nombre de la restricción. Si ya conoce el nombre, eliminar la restricción es simple. Si no conoce el nombre,则需要找到系统生成的名称,使用 \d 表名 可以找到这些信息。
La sintaxis general es la siguiente:
ALTER TABLE table_name DROP CONSTRAINT some_name;