MySQL: # 1075 – Definición de tabla incorrecta; autoincrement vs otra clave?

Aquí hay una tabla en MySQL 5.3.X + db:

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 , UNIQUE (memberid), PRIMARY KEY (id) ) ENGINE = MYISAM; 

La columna Id nunca se usa en consultas, es solo por conveniencia visual (por lo que es fácil ver cómo crece la tabla). Memberid es una clave real, es único y memberid se utiliza en consultas para identificar a cualquier miembro (WHERE memberid = ‘abcde’).

Mi pregunta es: ¿cómo mantener auto_increment, pero hacer memberid como clave principal? ¿Es eso posible? Cuando bash crear esta tabla con PRIMARY KEY (memberid) , aparece un error:

1075 – Definición incorrecta de tabla; solo puede haber una columna auto y debe definirse como una clave

¿Cuál es la mejor opción (con suerte, hay una forma de mantener la columna de id para que el rendimiento sea bueno y las consultas identifiquen a cualquier usuario por memberid, no por id), si el rendimiento es muy importante (aunque el espacio en disco no lo es)?

Puede tener una columna de aumento automático que no sea la PRIMARY KEY , siempre que haya un índice (clave) en ella:

 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 crea la tabla sin auto_increment,

 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 ; 

Puede hacer que el ID sea la clave principal y establecer member_id en NOT NULL UNIQUE . (Lo que has hecho). Las columnas que NOT NULL UNIQUE pueden ser el objective de referencias de claves externas, al igual que una clave principal. (Estoy bastante seguro de que eso es cierto para todas las plataformas SQL).

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

Pero si el rendimiento es realmente importante, debe pensar dos veces antes de ampliar la tabla en cuatro bytes por fila para obtener una comodidad visual muy pequeña. Además, si cambia a INNODB para imponer restricciones de clave externa, MySQL usará su clave principal en un índice agrupado. Como no estás usando tu llave primaria, imagino que eso podría perjudicar el rendimiento.

Creo que entiendo cuál es el motivo de tu error. Primero, haga clic en el campo AUTO AUTO INCREMENT y luego selecciónelo como clave principal.

La forma correcta es Primero. Debe seleccionarla como clave principal, luego debe hacer clic en el campo AUTO AUTO INCREMENT.

Muy fácil. Gracias

Para el problema anterior, antes que nada, si las tablas de suposición contienen más de 1 clave primaria, primero elimine todas esas claves primarias y agregue el primer campo INCREMENTO AUTOMÁTICO como clave principal, luego agregue las claves primarias requeridas que se eliminaron anteriormente. Establezca la opción AUTO INCREMENT para el campo requerido en el área de opciones.

    Intereting Posts