Lección 9.1: La sentencia CREATE TABLE
Hasta ahora, hemos trabajado principalmente con tablas existentes y hemos recuperado datos de ellas. Pero en el trabajo real con bases de datos, es importante no solo leer datos, sino también saber cómo crear la estructura utilizada para almacenarlos. Ahí es donde entra la sentencia CREATE TABLE.
CREATE TABLE pertenece al Lenguaje de Definición de Datos (DDL). Se utiliza para describir cómo debe estar estructurada una tabla: qué columnas contendrá, qué tipos de datos usarán esas columnas y qué reglas se aplicarán a los valores almacenados en ellas.
La Sintaxis Básica
La forma más simple de la sentencia se ve así:
CREATE TABLE table_name (
column1 data_type,
column2 data_type,
column3 data_type
);
Después del nombre de la tabla, las columnas se enumeran dentro de paréntesis. Para cada columna, necesitas especificar:
- el nombre de la columna (requerido);
- el tipo de dato (requerido);
- y, cuando sea necesario, características adicionales como codificación, restricciones, comentarios y otros.
Ejemplo de una Tabla Simple
Vamos a crear una tabla students:
CREATE TABLE students (
student_id INT,
first_name VARCHAR(50),
last_name VARCHAR(50),
birth_date DATE,
created_at TIMESTAMP
);
En este ejemplo:
student_ides un entero;first_nameylast_nameson valores de texto de hasta 50 caracteres;birth_datealmacena la fecha de nacimiento;created_atalmacena la fecha y hora en que se creó el registro.
Después de ejecutar este comando, la tabla será creada, pero aún estará vacía.
Tipos de Datos Comúnmente Usados
Al crear tablas, es importante elegir tipos de datos adecuados. Aquí hay algunos de los más comunes:
INTpara números enteros;VARCHAR(n)para cadenas de longitud variable de hastancaracteres;TEXTpara valores de texto largos;DATEpara fechas del calendario;TIMESTAMPpara valores de fecha y hora, a menudo usados para almacenar cuándo se creó o actualizó una fila;DECIMAL(p, s)para valores numéricos exactos, como dinero;BOOLEANpara valores lógicosTRUEoFALSE.
Elegir el tipo de dato correcto ayuda a ahorrar espacio, mantener la calidad de los datos y evitar errores. Puedes leer más sobre tipos de datos aquí.
Restricciones de Columna
Las restricciones definen reglas para los datos almacenados en una tabla.
1. PRIMARY KEY
Una clave primaria identifica de manera única cada fila en una tabla.
CREATE TABLE students (
student_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);
La columna student_id no puede contener valores duplicados o NULL.
2. NOT NULL
Esta restricción requiere que una columna siempre contenga un valor.
CREATE TABLE students (
student_id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL
);
Ahora first_name y last_name no pueden quedar vacíos.
3. CHECK
La restricción CHECK define una condición que los valores en una columna deben satisfacer.
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) CHECK (price >= 0)
);
En este ejemplo, la base de datos no permitirá almacenar un producto con un precio negativo.
Parámetros Adicionales de Columna
Además de las restricciones, las columnas pueden tener parámetros extra. Estos no prohíben ni permiten directamente valores, pero ayudan a definir el comportamiento de la columna de manera más precisa.
1. DEFAULT
El parámetro DEFAULT define el valor que se utilizará si no se proporciona un valor durante la inserción.
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) DEFAULT 0.00
);
Si no se proporciona un precio al agregar un producto, la base de datos utilizará automáticamente 0.00.
2. CHARACTER SET y COLLATE
Para columnas de texto, puedes especificar explícitamente el conjunto de caracteres y las reglas de colación.
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
last_name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);
Aquí, CHARACTER SET define la codificación utilizada para almacenar datos de texto, mientras que COLLATE define cómo se comparan y ordenan las cadenas. Esto es especialmente importante cuando una tabla necesita funcionar correctamente con diferentes idiomas y caracteres.
Ejemplo de una Tabla con Múltiples Reglas
Aquí hay un ejemplo más realista de una tabla employees:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
hire_date DATE NOT NULL,
salary DECIMAL(10, 2) DEFAULT 0.00
);
Lo que está sucediendo aquí:
employee_ides el identificador único para un empleado;first_nameylast_nameson obligatorios;emaildebe ser único;hire_datees obligatorio;salarytiene un valor por defecto de0.00.
Esta estructura refleja mejor los requisitos de datos del mundo real.
Usando IF NOT EXISTS
En muchos sistemas de bases de datos, puedes evitar un error si la tabla ya existe usando IF NOT EXISTS:
CREATE TABLE IF NOT EXISTS departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(100) NOT NULL
);
Esto es útil al volver a ejecutar scripts de práctica o migraciones.
Qué Tener en Cuenta
Al crear tablas, es útil tener en cuenta algunas reglas:
- elige tipos de datos de manera reflexiva, en lugar de hacer todo demasiado genérico;
- define una
PRIMARY KEYpara tablas donde cada fila debe ser identificada de manera única; - usa
NOT NULLpara campos realmente requeridos; - usa
DEFAULTcuando una columna tiene un valor por defecto natural; - establece explícitamente
CHARACTER SETyCOLLATEpara campos de texto cuando sea necesario; - intenta hacer que la estructura sea clara y predecible desde el principio.
Una tabla bien diseñada reduce errores y facilita el trabajo posterior con INSERT, UPDATE y SELECT.
Ejemplo Práctico
Imagina que queremos crear una tabla para almacenar libros:
CREATE TABLE books (
book_id INT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
author VARCHAR(100) NOT NULL,
published_date DATE,
price DECIMAL(8, 2) DEFAULT 0.00
);
Una vez que esta tabla esté creada, podemos comenzar a agregar filas a ella usando INSERT INTO.
Conclusiones Clave de esta Lección:
- La sentencia
CREATE TABLEse utiliza para crear nuevas tablas en una base de datos. - Cada columna debe tener un nombre y un tipo de dato.
- Restricciones como
PRIMARY KEY,NOT NULL,UNIQUEyCHECKayudan a controlar la calidad de los datos. - Parámetros adicionales de columna como
DEFAULT,CHARACTER SETyCOLLATEayudan a afinar el almacenamiento y comportamiento de los datos. - Una tabla bien diseñada hace que el trabajo futuro con los datos sea más simple y confiable.
IF NOT EXISTSayuda a evitar errores al crear una tabla más de una vez.