Saltar al contenido

MySQL: #1075 – Definición de tabla incorrecta; autoincremento vs otro key?

Entiende el código de forma correcta antes de usarlo a tu proyecto y si ttienes algo que aportar puedes dejarlo en la sección de comentarios.

Solución:

pueden tener una columna de incremento automático que no sea la PRIMARY KEYsiempre que haya un índice (key) en eso:

CREATE TABLE members ( 
  id int(11)  UNSIGNED NOT NULL AUTO_INCREMENT,
  memberid VARCHAR( 30 ) NOT NULL , 
  `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , 
  firstname VARCHAR( 50 ) NULL , 
  lastname VARCHAR( 50 ) NULL , 
  PRIMARY KEY (memberid) ,
  KEY (id)                          --- or:    UNIQUE KEY (id)
) ENGINE = MYISAM; 

Primero cree una tabla sin auto_incremento,

CREATE TABLE `members`(
    `id` int(11) NOT NULL,
    `memberid` VARCHAR( 30 ) NOT NULL ,
    `Time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
    `firstname` VARCHAR( 50 ) NULL ,
    `lastname` VARCHAR( 50 ) NULL
    PRIMARY KEY (memberid) 
) ENGINE = MYISAM;

después de establecer id como índice,

ALTER TABLE `members` ADD INDEX(`id`);

después de establecer id como auto_increment,

ALTER TABLE `members` CHANGE `id` `id` INT(11) NOT NULL AUTO_INCREMENT;

O

CREATE TABLE IF NOT EXISTS `members` (
    `id` int(11) NOT NULL,
    `memberid` VARCHAR( 30 ) NOT NULL ,
    `Time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
    `firstname` VARCHAR( 50 ) NULL ,
    `lastname` VARCHAR( 50 ) NULL,
      PRIMARY KEY (`memberid`),
      KEY `id` (`id`)
) ENGINE=MYISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Puedes hacer que el id sea el principal keyy establezca member_id en NOT NULL UNIQUE. (Lo que ha hecho.) Columnas que son NOT NULL UNIQUE puede ser el objetivo de extranjeros key referencias, al igual que un primario key pueden. (Estoy bastante seguro de que es true de todas las plataformas SQL).

A nivel conceptual, no hay diferencia entre PRIMARY KEY y NOT NULL UNIQUE. A nivel físico, este es un problema de MySQL; otras plataformas SQL le permitirán usar una secuencia sin convertirla en la principal key.

Pero si el rendimiento es realmente importante, debe pensar dos veces antes de ampliar su tabla en cuatro bytes por fila para esa pequeña comodidad visual. Además, si cambia a INNODB para hacer cumplir las leyes extranjeras key restricciones, MySQL usará su principal key en un índice agrupado. Dado que no está utilizando su principal keyme imagino que eso podría perjudicar el rendimiento.

Si guardas algún titubeo y forma de prosperar nuestro enunciado te sugerimos añadir una interpretación y con gusto lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *