Vzq*_*van 7 mysql database innodb
我需要您的帮助,我已经实例化了所有关系表,但是当我要创建关系表时,它向我发送“错误:1071 指定的密钥太长:最大密钥长度为 3072 字节”
到目前为止我的代码:
CREATE TABLE tablahechos(
id_almacenf VARCHAR(255) NOT NULL,
id_productof VARCHAR(255) NOT NULL,
id_categoriaf VARCHAR(255) NOT NULL,
id_transaccionf VARCHAR(255) NOT NULL,
id_tipo_serviciof VARCHAR(255) NOT NULL,
id_mensajerof VARCHAR(255) NOT NULL,
id_clientef VARCHAR(255) NOT NULL,
id_tiempo_fecha_orden VARCHAR(255) NOT NULL,
id_tiempo_fecha_reserva_entrada VARCHAR(255) NOT NULL,
id_tiempo_fecha_reserva_salida VARCHAR(255) NOT NULL,
id_tiempo_fecha_inventario_entrada VARCHAR(255) NOT NULL,
id_tiempo_fecha_inventario_salida VARCHAR(255) NOT NULL,
id_tiempo_fecha_envio VARCHAR(255) NOT NULL,
id_tiempo_fecha_facturacion VARCHAR(25) NOT NULL,
id_tiempo_fecha_cancelada VARCHAR(255) NOT NULL,
para_regalo VARCHAR(45) NOT NULL,
monto_unitario VARCHAR(255) NOT NULL,
monto_total VARCHAR(45) NOT NULL,
cantidad VARCHAR(255) NOT NULL,
PRIMARY KEY (id_almacenf, id_productof, id_categoriaf, id_transaccionf,
id_tipo_serviciof, id_mensajerof, id_clientef, id_tiempo_fecha_orden,
id_tiempo_fecha_reserva_entrada, id_tiempo_fecha_reserva_salida,
id_tiempo_fecha_inventario_entrada, id_tiempo_fecha_inventario_salida,
id_tiempo_fecha_envio, id_tiempo_fecha_facturacion, id_tiempo_fecha_cancelada),
CONSTRAINT FK1
FOREIGN KEY (id_almacenf)
REFERENCES almacendim (id_almacen),
CONSTRAINT FK2
FOREIGN KEY (id_productof)
REFERENCES productodim (id_producto),
CONSTRAINT FK3
FOREIGN KEY (id_categoriaf)
REFERENCES categoriadim (id_categoria),
CONSTRAINT FK4
FOREIGN KEY (id_transaccionf)
REFERENCES transacciondim (id_transaccion),
CONSTRAINT FK5
FOREIGN KEY (id_mensajerof)
REFERENCES mensajerodim (id_mensajero),
CONSTRAINT FK6
FOREIGN KEY (id_clientef)
REFERENCES clientedim (id_cliente),
CONSTRAINT FK7
FOREIGN KEY (id_tiempo_fecha_orden)
REFERENCES tablahechos (id_tiempo_fecha_orden),
CONSTRAINT FK8
FOREIGN KEY (id_tiempo_fecha_reserva_entrada)
REFERENCES tablahechos (id_tiempo_fecha_reserva_entrada),
CONSTRAINT FK9
FOREIGN KEY (id_tiempo_fecha_reserva_salida)
REFERENCES tablahechos (id_tiempo_fecha_reserva_salida),
CONSTRAINT FK10
FOREIGN KEY (id_tiempo_fecha_inventario_entrada)
REFERENCES tablahechos (id_tiempo_fecha_inventario_entrada),
CONSTRAINT FK11
FOREIGN KEY (id_tiempo_fecha_inventario_salida)
REFERENCES tablahechos (id_tiempo_fecha_inventario_salida),
CONSTRAINT FK12
FOREIGN KEY (id_tiempo_fecha_envio)
REFERENCES tablahechos (id_tiempo_fecha_envio),
CONSTRAINT FK13
FOREIGN KEY (id_tiempo_fecha_facturacion)
REFERENCES tablahechos (id_tiempo_fecha_facturacion),
CONSTRAINT FK14
FOREIGN KEY (id_tiempo_fecha_cancelada)
REFERENCES tablahechos (id_tiempo_fecha_cancelada)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
我已经将字符集更改为latin1但没有任何反应,我知道我的主键太长但必须是这样。我应该怎么办?
幸运的是,有最大密钥长度,因为您的主键太长了。
我强烈建议在表中添加一个自动递增的主键:
CREATE TABLE tablahechos (
id_hechos int not null auto_increment primary key,
id_almacenf VARCHAR(255) NOT NULL,
. . .
Run Code Online (Sandbox Code Playgroud)
这给你带来了什么?那么,这个简化的主键有几个方面的帮助:
如果您想在所有这些列上构建键,您可以将列的长度缩短到 32 之类的长度。“id”列的长度真的需要为 255 个字符吗?如果是这样,您也应该在这些表中将它们替换为数字 ID。事实上,您可能应该对所有这些列使用整数 id,并通过连接来查找有关它们的附加信息。