Operaciones SQL comunes
Esta guía resume las instrucciones SQL mas utilizadas al trabajar con bases de datos MySQL.
1. Crear una tabla nueva: CREATE TABLE
Se usa cuando la tabla todavía no existe.
Ejemplo:
| CREATE TABLE clientes ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, nombre VARCHAR(150) NOT NULL, email VARCHAR(255) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
Para evitar un error si la tabla ya existe:
| CREATE TABLE IF NOT EXISTS clientes ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, nombre VARCHAR(150) NOT NULL, PRIMARY KEY (id) ); |
2. Modificar una tabla: ALTER TABLE
Se usa para cambiar una tabla que ya existe.
Agregar una columna:
| ALTER TABLE mensajes_contacto ADD COLUMN ip VARCHAR(45) NULL AFTER email; |
Agregar un indice:
| ALTER TABLE mensajes_contacto ADD INDEX idx_mensajes_contacto_ip (ip); |
Cambiar el tipo o las reglas de una columna:
| ALTER TABLE mensajes_contacto MODIFY COLUMN asunto VARCHAR(250) NOT NULL; |
Renombrar una columna:
| ALTER TABLE mensajes_contacto RENAME COLUMN asunto TO titulo; |
Eliminar una columna:
| ALTER TABLE mensajes_contacto DROP COLUMN ip; |
3. Insertar registros: INSERT INTO
Agrega datos nuevos.
Ejemplo:
| INSERT INTO mensajes_contacto (nombre, email, asunto, mensaje, ip) VALUES ('Ana Perez', 'ana@example.com', 'Consulta', 'Necesito informacion.', '192.168.1.20'); |
Es recomendable indicar siempre las columnas para evitar depender del orden de la tabla.
4. Consultar registros: SELECT
Obtiene datos sin modificarlos.
Ejemplo:
| SELECT id, nombre, email, asunto, estado, created_at FROM mensajes_contacto ORDER BY created_at DESC; |
Con filtros y limite:
| SELECT * FROM mensajes_contacto WHERE estado = 'nuevo' ORDER BY created_at DESC LIMIT 50; |
5. Actualizar registros: UPDATE
Modifica registros existentes. Usa siempre un WHERE cuando no quieras modificar toda la tabla.
Ejemplo:
| UPDATE mensajes_contacto SET estado = 'leido' WHERE id = 10; |
Sin WHERE, todos los registros se actualizan:
| UPDATE mensajes_contacto SET estado = 'archivado'; |
6. Eliminar registros: DELETE
Elimina filas especificas.
Ejemplo:
| DELETE FROM mensajes_contacto WHERE id = 10; |
Sin WHERE, elimina todas las filas de la tabla:
| DELETE FROM mensajes_contacto; |
7. Vaciar una tabla: TRUNCATE TABLE
Elimina todos los registros y normalmente reinicia el contador AUTO_INCREMENT.
| TRUNCATE TABLE mensajes_contacto; |
TRUNCATE es mas drastico que DELETE y no permite usar WHERE.
8. Eliminar una tabla: DROP TABLE
Elimina la tabla completa, incluyendo su estructura y sus datos.
| DROP TABLE mensajes_contacto; |
Para evitar un error si no existe:
| DROP TABLE IF EXISTS mensajes_contacto; |
9. Crear y eliminar indices
Los indices aceleran consultas sobre columnas que se filtran u ordenan con frecuencia.
Crear un indice:
| CREATE INDEX idx_contacto_estado ON mensajes_contacto (estado); |
Para eliminar un indice:
| ALTER TABLE mensajes_contacto DROP INDEX idx_contacto_estado; |
Un indice unico impide valores duplicados:
| CREATE UNIQUE INDEX idx_contacto_email ON mensajes_contacto (email); |
10. Restricciones y claves foraneas
Una clave foranea relaciona una columna con otra tabla.
| ALTER TABLE pedidos ADD CONSTRAINT fk_pedidos_usuario FOREIGN KEY (usuario_id) REFERENCES usuarios(id); |
Para eliminarla:
| ALTER TABLE pedidos DROP FOREIGN KEY fk_pedidos_usuario; |
11. Ver la estructura de una tabla
DESCRIBE mensajes_contacto;
Tambien puedes ver la instruccion completa con la que fue creada:
| SHOW CREATE TABLE mensajes_contacto; |
12. Transacciones
Las transacciones permiten confirmar o deshacer varias operaciones como una unidad.
START TRANSACTION; UPDATE mensajes_contacto COMMIT; |
Si algo sale mal:
| ROLLBACK; |
Resumen rapido
Necesidad: Instruccion
- Crear una tabla: CREATE TABLE
- Modificar una tabla: ALTER TABLE
- Agregar datos: INSERT INTO
- Consultar datos: SELECT
- Modificar datos: UPDATE
- Eliminar filas: DELETE
- Vaciar una tabla: TRUNCATE TABLE
- Eliminar una tabla: DROP TABLE
- Crear un indice: CREATE INDEX
- Confirmar cambios: COMMIT
- Deshacer cambios: ROLLBACK
Recomendaciones
- Haz una copia de seguridad antes de usar DROP, TRUNCATE o DELETE sin WHERE.
- Prueba primero un SELECT con el mismo WHERE antes de ejecutar un UPDATE o DELETE.
- Usa consultas parametrizadas desde PHP para evitar inyecciones SQL.
- Usa ALTER TABLE para modificar una tabla existente y CREATE TABLE para crear una nueva.