PostgreSQL INSERT
La sentencia `INSERT` en PostgreSQL se utiliza para añadir nuevas filas de datos en una tabla especificada. Es una operación fundamental para poblar y actualizar las bases de datos con nueva información.
Utilización
La sintaxis básica de la sentencia `INSERT` se utiliza cuando necesitas añadir nuevos registros a una tabla. Especifica el nombre de la tabla, las columnas en las que insertar los datos y los valores correspondientes.
sql
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
En esta sintaxis, `nombre_tabla` es la tabla de destino, `columna1, columna2, ...` son las columnas que recibirán los datos, y `valor1, valor2, ...` son los valores reales de los datos que se insertarán.
Ejemplos
1. Inserción básica
sql
INSERT INTO employees (first_name, last_name, email)
VALUES ('John', 'Doe', 'john.doe@example.com');
Este ejemplo inserta una única fila en la tabla "empleados" con los valores "nombre", "apellido" y "correo electrónico".
2. Insertar varias filas
sql
INSERT INTO products (product_name, price)
VALUES
('Product A', 10.99),
('Product B', 15.49);
Aquí se insertan dos filas en la tabla `productos` en una sola sentencia, cada una con un `nombre_producto` y un `precio`.
3. Insertar con subconsulta
sql
INSERT INTO sales (product_id, quantity)
SELECT product_id, 5
FROM products
WHERE product_name = 'Product C';
Este ejemplo inserta datos en la tabla `ventas` seleccionando `id_producto` de la tabla `productos` donde el `nombre_producto` es `Producto C`, estableciendo la `cantidad` en 5.
4. Manejar duplicados con ON CONFLICTO
sql
INSERT INTO users (username, email)
VALUES ('jane_doe', 'jane.doe@example.com')
ON CONFLICT (username) DO UPDATE
SET email = EXCLUDED.email;
Este ejemplo muestra cómo tratar posibles duplicados actualizando el "correo electrónico" si el "nombre de usuario" ya existe en la tabla "usuarios".
5. Uso de la cláusula RETURNING
sql
INSERT INTO orders (customer_id, order_date)
VALUES (123, '2023-10-11')
RETURNING order_id;
La cláusula `RETURNING` se utiliza para devolver el `order_id` de la fila recién insertada, lo que resulta especialmente útil con campos de autoincremento.
Consejos y buenas prácticas
- Especifica las columnas explícitamente. Enumera siempre las columnas en una sentencia `INSERT` para garantizar la claridad y mantener la compatibilidad si cambia la estructura de la tabla.
- Valida los tipos de datos. Asegúrate de que los valores que se insertan coinciden con los tipos de datos de las columnas.
- Utiliza transacciones para inserciones masivas. Envuelve varias operaciones `INSERT` en una transacción para garantizar la atomicidad y mejorar el rendimiento. Por ejemplo:
sql BEGIN; INSERT INTO products (product_name, price) VALUES ('Product C', 12.99); INSERT INTO products (product_name, price) VALUES ('Product D', 18.49); COMMIT; - Gestiona los duplicados. Utiliza `ON CONFLICT` para tratar posibles conflictos de claves, no `INSERT ... ON DUPLICATE KEY UPDATE`, que es la sintaxis de MySQL.
- Aprovecha sabiamente las subconsultas. Utiliza subconsultas para insertar datos dinámicamente desde otras tablas para mantener la integridad y coherencia de los datos.