como iniciar Primary key desde un numero predeterminado?

publicado por: Anonymous

Saludos, estoy en la instalación de mi proyecto de grado, es un sistema web
debería ser instalado en la nube, pero como la institución para el cual realice el proyecto no tiene un servicio de internet y tiene varios oficinas dispersas por la ciudad el sistema esta siendo instalado de forma local en cada oficina dispersa.

Por lo tanto necesito que en cada lugar los primary keys inicien desde un numero diferente a 1(esta es mi idea y no estoy seguro si estubiera bien), ya que al final toda la informacion sera centralizada y estoy mas que seguro que al hacer esto me dara error o reemplazara los datos con los ids de otro lugar.

Tabla empleados

CREATE TABLE `employers` (
  `id` int(10) UNSIGNED NOT NULL,
  `items` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `first_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, 
  `last_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ci` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `gender` enum('f','m','o') COLLATE utf8_unicode_ci NOT NULL,
  `title` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `street_live` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `birthplace` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `cel_phone` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `home_phone` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `office_phone` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `cardex_number` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `photo` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'user.png',
  `position` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `active` tinyint(1) NOT NULL,
  `unidad_id` int(10) UNSIGNED NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `employers`
  ADD PRIMARY KEY (`id`),
  ADD KEY `employers_unidad_id_foreign` (`unidad_id`);

Lo que necesito

Lugar 1 los ids de empleado inicien desde 1
Lugar 2 los ids de empleado inicien desde 5000
Lugar 3 los ids de empleado inicien desde 10000
Lugar 4 los ids de empleado inicien desde 15000

Espero se haya entendido, y si alguien tuviera otra solución mas practica se lo agradecería.

solución

Tú puedes especificar de entrada que tu campo es primary key, que es autoincrement y al final del CREATE TABLE indicas de cuánto tiene que incrementarse.

En el primer caso no indicas nada al final, en los otros casos, por ejemplo, para ´5000`:

CREATE TABLE IF NOT EXISTS  `employers5000_20170914`  
(
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL
) 
    ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    AUTO_INCREMENT = 5000
; 

Veamos una prueba completa.

Código: Ver demo en Rextester

CREATE TABLE IF NOT EXISTS  `employers1_20170914`  
(
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL
) 
    ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
;

INSERT INTO `employers1_20170914` (`name`)
    VALUES
    ('Pedro'),
    ('Santiago'),
    ('Juan')
;


CREATE TABLE IF NOT EXISTS  `employers5000_20170914`  
(
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL
) 
    ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    AUTO_INCREMENT = 5000
; 

INSERT INTO `employers5000_20170914` (`name`)
    VALUES
    ('Pedro-5000'),
    ('Santiago-5000'),
    ('Juan-5000')
;

CREATE TABLE IF NOT EXISTS  `employers10000_20170914`  
(
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL
) 
    ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    AUTO_INCREMENT = 10000
; 

INSERT INTO `employers10000_20170914` (`name`)
    VALUES
    ('Pedro-10000'),
    ('Santiago-10000'),
    ('Juan-10000')
;



CREATE TABLE IF NOT EXISTS  `employers15000_20170914`  
(
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL
) 
    ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    AUTO_INCREMENT = 15000
; 

INSERT INTO `employers15000_20170914` (`name`)
    VALUES
    ('Pedro-15000'),
    ('Santiago-15000'),
    ('Juan-15000')
;

SELECT * FROM `employers1_20170914`;
SELECT * FROM `employers5000_20170914`;
SELECT * FROM `employers10000_20170914`;
SELECT * FROM `employers15000_20170914`;

Resultado:

Empezando en 1

id      name
1       Pedro
2       Santiago
3       Juan

Empezando en 5000

id      name
5000    Pedro-5000
5001    Santiago-5000
5002    Juan-5000

Empezando en 10000

id      name
10000   Pedro-10000
10001   Santiago-10000
10002   Juan-10000

Empezando en 15000

id  name
15000   Pedro-15000
15001   Santiago-15000
15002   Juan-15000
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *