solamente - MySQL:#1075-Definición de tabla incorrecta; autoincrement vs vs otra clave?
mysql workbench error 1075 (5)
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 las consultas, es solo por conveniencia visual (por lo que es fácil ver cómo crece la tabla). Memberid es una clave real, es única, y memberid se usa en consultas para identificar a cualquier miembro (WHERE memberid = ''abcde'').
Mi pregunta es: ¿cómo mantener auto_increment, pero hacer un ID de miembro como clave principal? ¿Es eso posible? Cuando intento crear esta tabla con PRIMARY KEY (memberid) , aparece un error:
1075 - Definición de tabla incorrecta; solo puede haber una columna automática y debe definirse como una clave
¿Cuál es la mejor opción (con suerte, hay una forma de mantener la columna id para que el rendimiento sea bueno y las consultas identifiquen a cualquier usuario por ID de miembro, no por ID), si el rendimiento es muy importante (aunque el espacio en disco no lo es)?
Creo que entiendo cual es la razón de tu error. Primero, haga clic en el campo auto INCREMENTO AUTOMÁTICO y luego selecciónelo como clave principal.
La forma correcta es Primero, debe seleccionarla como clave principal y luego hacer clic en el campo AUTO INCREMENT AUTO.
Muy fácil. Gracias
Para el problema anterior, en primer lugar, si las tablas suponen que contiene más de 1 clave principal, primero elimine todas esas claves primarias y agregue el primer campo INCREMENTO AUTOMÁTICO como clave principal y luego agregue otras claves primarias necesarias que se eliminaron anteriormente. Configure la opción INCREMENTO AUTOMÁTICO para el campo requerido desde el área de opción.
Primero crea una 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 objetivo de referencias de clave externa, 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 le 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 su tabla en cuatro bytes por fila para esa pequeña conveniencia visual. 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 clave principal, imagino que eso podría afectar el rendimiento.
Puede tener una columna de incremento 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;