← SQL EspañolChapter 09 of 13

Operaciones de Tablas

## Objetivos de Aprendizaje - Crear y modificar tablas - Agregar y modificar columnas - Usar índices efectivamente - Eliminar tablas de forma segura ## CREATE TABLE ### Sintaxis Básica ```sql CREATE TABLE employees ( employee_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT UNIQUE, hire_date DATE, salary DECIMAL(10, 2) ); ``` ### Tipos de Datos | Tipo | Descripción | |------|-------------| | INTEGER | Números enteros | | REAL | Números decimales | | TEXT | Cadenas de caracteres | | DATE | Valores de fecha | | DATETIME | Fecha y hora | | BOOLEAN | Verdadero/falso | | BLOB | Datos binarios | ### Tipos Específicos de Base de Datos ```sql -- MySQL VARCHAR(255) INT BIGINT DECIMAL(10,2) -- PostgreSQL VARCHAR(255) INT BIGSERIAL NUMERIC(10,2) SERIAL -- SQL Server VARCHAR(255) INT DECIMAL(10,2) ``` ## ALTER TABLE ### Agregar Columna ```sql ALTER TABLE employees ADD COLUMN phone VARCHAR(20); ``` ### Agregar Múltiples Columnas ```sql ALTER TABLE employees ADD COLUMN phone VARCHAR(20), ADD COLUMN address TEXT; ``` ### Eliminar Columna ```sql ALTER TABLE employees DROP COLUMN phone; ``` ### Modificar Columna ```sql -- PostgreSQL ALTER TABLE employees ALTER COLUMN email TYPE VARCHAR(100); -- MySQL ALTER TABLE employees MODIFY COLUMN email VARCHAR(100); -- SQL Server ALTER TABLE employees ALTER COLUMN email VARCHAR(100); ``` ### Renombrar Columna ```sql -- PostgreSQL ALTER TABLE employees RENAME COLUMN first_name TO given_name; -- MySQL ALTER TABLE employees CHANGE first_name given_name VARCHAR(50); ``` ### Renombrar Tabla ```sql ALTER TABLE employees RENAME TO staff; ``` ## DROP TABLE ### Eliminación Básica ```sql DROP TABLE employees; ``` ### Eliminar Si Existe ```sql DROP TABLE IF EXISTS employees; ``` ### CASCADE ```sql -- Eliminar y objetos dependientes DROP TABLE employees CASCADE; ``` ### Seguridad Primero ```sql -- Siempre verificar dependencias primero SELECT * FROM information_schema.table_constraints WHERE table_name = 'employees'; ``` ## Índices ### Crear Índice ```sql CREATE INDEX idx_department ON employees(department); ``` ### Índice Compuesto ```sql CREATE INDEX idx_dept_salary ON employees(department, salary DESC); ``` ### Índice UNIQUE ```sql CREATE UNIQUE INDEX idx_email ON employees(email); ``` ### Cuándo Indexar - Columnas usadas en cláusulas WHERE - Columnas usadas en condiciones de JOIN - Columnas usadas en ORDER BY - Columnas con alta cardinalidad (muchos valores únicos) ### Eliminar Índice ```sql DROP INDEX idx_department; ``` ## CREATE TABLE ... AS ### Copiar Estructura y Datos ```sql CREATE TABLE employees_backup AS SELECT * FROM employees; ``` ### Copiar con Filtro ```sql CREATE TABLE sales_employees AS SELECT * FROM employees WHERE department = 'Sales'; ``` ### Solo Estructura (Sin Datos) ```sql CREATE TABLE employees_archive AS SELECT * FROM employees WHERE 1 = 0; ``` ## TRUNCATE ### Eliminar Todas las Filas ```sql TRUNCATE TABLE employees; ``` ### Más Rápido que DELETE - Sin registro de transacciones por fila - No se puede deshacer - Reinicia contadores de auto-incremento ### CASCADE con TRUNCATE ```sql TRUNCATE TABLE employees CASCADE; ``` ## Tablas Temporales ### Tabla de Sesión ```sql CREATE TEMPORARY TABLE temp_results ( id INTEGER, name TEXT ); -- Se elimina automáticamente cuando termina la sesión ``` ### PostgreSQL ```sql CREATE TEMP TABLE temp_data AS SELECT * FROM source_table WHERE condition; ``` ## Restricciones de Columna ### NOT NULL ```sql CREATE TABLE example ( name TEXT NOT NULL ); ``` ### UNIQUE ```sql CREATE TABLE example ( email TEXT UNIQUE ); ``` ### PRIMARY KEY ```sql CREATE TABLE example ( id INTEGER PRIMARY KEY, name TEXT ); ``` ### DEFAULT ```sql CREATE TABLE example ( created_at DATE DEFAULT CURRENT_DATE, status TEXT DEFAULT 'active' ); ``` ### CHECK ```sql CREATE TABLE example ( age INTEGER CHECK (age >= 0), salary DECIMAL CHECK (salary > 0) ); ``` ## Resumen - **CREATE TABLE**: Definir nuevas tablas con columnas y restricciones - **ALTER TABLE**: Modificar estructura de tabla existente - **DROP TABLE**: Eliminar tablas (usar IF EXISTS) - **Índices**: Acelerar consultas en tablas grandes - **TRUNCATE**: Forma rápida de eliminar todas las filas - **Tablas temporales**: Almacenamiento de sesión - Usar **restricciones** para enforces integridad de datos

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →