HDP115

Ejemplo de restricción AUTOINCREMENT

La restricción AUTOINCREMENT genera valores secuenciales únicos automáticamente para una columna en una tabla.

CE

Cristian Escalante

Última actualización: 7 de mayo de 2025

sql
programación
desarrollo

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.

Ejemplo de restricción INDEX
Ejemplos de restricción INDEX en SQL
Ejemplo de restricción UNSIGNED
La restricción UNSIGNED se utiliza en MySQL para definir que...

Conceptos Básicos de HTML

Aprende los conceptos básicos de HTML

Conceptos Básicos de CSS

Aprende los conceptos básicos de CSS

Conceptos Básicos de JavaScript

Aprende los conceptos básicos de JavaScript

Conceptos Básicos de GIT

Aprende los conceptos básicos de GIT

Conceptos Básicos de Python

Aprende los conceptos básicos de Python

Conceptos Básicos de UML

Aprende los conceptos básicos de UML

Refuerzo Academico de Herramientas de Productividad 2025