SQL Tema 4
Inserción y edición de datos
Una vez creada la estructura, toca empezar a añadir y modificar datos en las tablas. Los tres comandos para cambiar datos son:
| Comando | Qué hace | Necesita WHERE |
|---|---|---|
INSERT | Añade filas nuevas | No |
UPDATE | Cambia datos de filas que ya existen | Sí, o cambia todas las filas |
DELETE | Borra filas | Sí, o borra todas las filas |
Añadir registros (INSERT)#
Se indican las columnas donde se van a introducir los datos y, a continuación, los datos, en el mismo orden:
INSERT INTO alumnos (nombre, edad, telefono, email, nivel, cuota)
VALUES ('Antonio', 17, '655443322', 'antonio@correo.es', 'DEV', 50);No hace falta dar el id_alumno: como es AUTOINCREMENT, la base de datos lo pone sola.
También se pueden añadir varias filas de golpe, separándolas con comas. Estos son los alumnos que usaremos en el resto de los apuntes:
INSERT INTO alumnos (nombre, edad, telefono, email, nivel, cuota) VALUES
('María', 16, '666553344', 'maria@correo.es', 'DEV', 45),
('Juan', 13, '666554433', 'juan@correo.es', 'Senior', 40),
('Elena', 10, '666557788', 'elena@correo.es', 'Junior', 35),
('Pedro', 12, '611223344', 'pedro@correo.es', 'Senior', 40);Con eso, la tabla alumnos queda así:
| id_alumno | nombre | edad | telefono | nivel | cuota | |
|---|---|---|---|---|---|---|
| 1 | Antonio | 17 | 655443322 | antonio@correo.es | DEV | 50.0 |
| 2 | María | 16 | 666553344 | maria@correo.es | DEV | 45.0 |
| 3 | Juan | 13 | 666554433 | juan@correo.es | Senior | 40.0 |
| 4 | Elena | 10 | 666557788 | elena@correo.es | Junior | 35.0 |
| 5 | Pedro | 12 | 611223344 | pedro@correo.es | Senior | 40.0 |
Borrar registros (DELETE)#
Se usa para eliminar filas de la tabla. La sintaxis:
DELETE FROM nombre_tabla
WHERE condicion;Ejemplo en Codemaker: «Pedro ha decidido dejar el curso y queremos borrar sus datos».
DELETE FROM alumnos
WHERE id_alumno = 5;Cuidado
Borrado total: si ejecutas DELETE FROM alumnos; (sin el WHERE), vaciarás la tabla por completo. La estructura de la tabla (las columnas) seguirá existiendo, pero estará vacía.
Actualizar registros (UPDATE)#
Se usa cuando un dato ya existe pero ha cambiado. Por ejemplo, un alumno sube de nivel o cambia su número de teléfono. La sintaxis:
UPDATE nombre_tabla
SET columna1 = valor1, columna2 = valor2
WHERE condicion;Ejemplo en Codemaker: «Juan ha cumplido 14 años y pasa a nivel Master».
UPDATE alumnos
SET edad = 14, nivel = 'Master'
WHERE id_alumno = 3;Cuidado
El peligro del WHERE: si olvidas poner el WHERE, SQL no te preguntará. Pondrá a todos los alumnos de la academia con 14 años y nivel Master.
Consejo
En el WHERE es mejor usar la clave primaria (id_alumno = 3) que el nombre (nombre = 'Juan'): puede haber dos alumnos que se llamen Juan, pero nunca dos con el mismo id_alumno.
Tras el DELETE y el UPDATE, la tabla queda así. Es la que usaremos en los siguientes temas:
| id_alumno | nombre | edad | telefono | nivel | cuota | |
|---|---|---|---|---|---|---|
| 1 | Antonio | 17 | 655443322 | antonio@correo.es | DEV | 50.0 |
| 2 | María | 16 | 666553344 | maria@correo.es | DEV | 45.0 |
| 3 | Juan | 14 | 666554433 | juan@correo.es | Master | 40.0 |
| 4 | Elena | 10 | 666557788 | elena@correo.es | Junior | 35.0 |
Errores frecuentes#
| Mensaje | Qué significa | Cómo se arregla |
|---|---|---|
1 values for 2 columns | Hay más columnas que valores (o al revés) | Pon un valor por cada columna, en el mismo orden |
NOT NULL constraint failed: alumnos.nombre | Falta un dato obligatorio | Incluye esa columna y su valor en el INSERT |
UNIQUE constraint failed: alumnos.email | Ese email ya lo tiene otro alumno | Cada valor de una columna UNIQUE tiene que ser distinto |
CHECK constraint failed: edad > 0 | El valor no cumple la condición de la tabla | Revisa el dato: aquí, una edad negativa o cero |
unrecognized token: "'Ana" | Falta cerrar una comilla | Los textos van entre dos comillas simples: 'Ana' |
| Se han cambiado o borrado todas las filas | Un UPDATE o DELETE sin WHERE | No tiene arreglo desde SQL: por eso conviene escribir primero el WHERE |