Ejemplo de restricción AUTOINCREMENT
La restricción AUTOINCREMENT genera valores secuenciales únicos automáticamente para una columna en una tabla.
Cristian Escalante
Última actualización: 7 de mayo de 2025
Ejemplos de restricción AUTOINCREMENT
La restricción AUTOINCREMENT
(o sus equivalentes) permite generar valores secuenciales únicos automáticamente para una columna en una tabla. Esta restricción es especialmente útil para crear claves primarias que se incrementan automáticamente con cada nuevo registro insertado.
MySQL
En MySQL, se utiliza AUTO_INCREMENT
para crear columnas con incremento automático:
CREATE TABLE productos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
precio DECIMAL(10, 2) NOT NULL
);
Al insertar registros, no es necesario especificar un valor para la columna id
:
INSERT INTO productos (nombre, precio)
VALUES ('Teclado mecánico', 89.99);
-- El id se asignará automáticamente como 1
INSERT INTO productos (nombre, precio)
VALUES ('Monitor LED', 199.99);
-- El id se asignará automáticamente como 2
Si deseamos modificar una tabla existente para agregar un campo con incremento automático:
ALTER TABLE productos
MODIFY COLUMN id INT AUTO_INCREMENT;
PostgreSQL
En PostgreSQL, se utiliza el tipo de datos SERIAL
o BIGSERIAL
para crear columnas con incremento automático:
CREATE TABLE clientes (
id SERIAL PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE
);
Internamente, PostgreSQL crea una secuencia y la asocia a la columna:
INSERT INTO clientes (nombre, email)
VALUES ('Ana López', 'ana@ejemplo.com');
-- El id se asignará automáticamente como 1
También podemos crear explícitamente una secuencia:
CREATE SEQUENCE clientes_id_seq;
CREATE TABLE clientes (
id INTEGER PRIMARY KEY DEFAULT nextval('clientes_id_seq'),
nombre VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE
);
ALTER SEQUENCE clientes_id_seq OWNED BY clientes.id;
SQL Server (T-SQL)
En SQL Server, se utiliza la propiedad IDENTITY
para crear columnas con incremento automático:
CREATE TABLE pedidos (
id INT IDENTITY(1,1) PRIMARY KEY,
cliente_id INT NOT NULL,
fecha_pedido DATE DEFAULT GETDATE(),
total DECIMAL(10, 2) NOT NULL
);
El primer parámetro (1) indica el valor inicial, y el segundo parámetro (1) indica el incremento:
INSERT INTO pedidos (cliente_id, total)
VALUES (5, 299.99);
-- El id se asignará automáticamente como 1
Para modificar una tabla existente:
-- Primero debemos crear una nueva tabla con IDENTITY
CREATE TABLE pedidos_nueva (
id INT IDENTITY(1,1) PRIMARY KEY,
cliente_id INT NOT NULL,
fecha_pedido DATE DEFAULT GETDATE(),
total DECIMAL(10, 2) NOT NULL
);
-- Luego transferir los datos
INSERT INTO pedidos_nueva (cliente_id, fecha_pedido, total)
SELECT cliente_id, fecha_pedido, total FROM pedidos;
-- Finalmente, renombrar las tablas
DROP TABLE pedidos;
EXEC sp_rename 'pedidos_nueva', 'pedidos';
Oracle (PL/SQL)
En Oracle, tradicionalmente se utilizan secuencias junto con disparadores (triggers) para simular el comportamiento de incremento automático:
-- Crear una secuencia
CREATE SEQUENCE empleados_seq
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
-- Crear la tabla
CREATE TABLE empleados (
id NUMBER PRIMARY KEY,
nombre VARCHAR2(100) NOT NULL,
departamento VARCHAR2(50) NOT NULL
);
-- Crear un trigger para asignar automáticamente el valor de la secuencia
CREATE OR REPLACE TRIGGER empleados_bi
BEFORE INSERT ON empleados
FOR EACH ROW
BEGIN
SELECT empleados_seq.NEXTVAL
INTO :new.id
FROM dual;
END;
/
A partir de Oracle 12c, se puede utilizar la cláusula IDENTITY
:
CREATE TABLE empleados (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nombre VARCHAR2(100) NOT NULL,
departamento VARCHAR2(50) NOT NULL
);
SQLite
En SQLite, se utiliza AUTOINCREMENT
junto con el tipo de datos INTEGER PRIMARY KEY
:
CREATE TABLE usuarios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nombre TEXT NOT NULL,
fecha_registro TEXT DEFAULT CURRENT_TIMESTAMP
);
Es importante mencionar que en SQLite, una columna definida como INTEGER PRIMARY KEY
ya se comporta como autoincremental, pero al agregar AUTOINCREMENT
se garantiza que los IDs no se reutilicen después de eliminar registros.