mysql - update - validar antes de insertar sql
Cómo agregar una clave única a la tabla existente(con filas no únicas) (7)
Establecer múltiples claves únicas en la tabla
ALTER TABLE table_name
ADD CONSTRAINT UC_table_name UNIQUE (field1,field2);
Deseo agregar una clave única compleja a la tabla existente. La clave contiene de 4 campos (user_id, game_id, date, time). Pero la tabla tiene filas no únicas. Entiendo que puedo eliminar todas las fechas duplicadas y luego agregar una clave compleja.
Tal vez exista otra solución sin buscar todos los datos duplicados. (como agregar ignorar único, etc.).
Busqué UPD, ¿cómo puedo eliminar las filas duplicadas de MySQL? Creo que es una buena solución. ¿Eliminar duplicados utilizando solo una consulta MySQL?
ALTER TABLE 0_value_addition_setup
ADD UNIQUE ( value_code
)
Cree un ID de incremento automático o un ID ÚNICO y agréguelo a la clave natural de la que está hablando con los 4 campos. esto hará que cada fila en la mesa sea única ...
Estoy proporcionando mi solución con la suposición en su lógica de negocio. Basicall en mi diseño permitiré que la tabla almacene solo un registro para una combinación de usuario y juego. Entonces agregaré una clave compuesta a la tabla.
PRIMARY KEY (`user_id`,`game_id`)
Puedes hacer lo que YAnTar aconsejó
ALTER TABLE TABLE_NAME ADD Id INT IDENTITY(1,1) PRIMARY KEY
O
Puedes agregar una restricción
ALTER TABLE TABLE_NAME ADD CONSTRAINT constr_ID UNIQUE (user_id, game_id, date, time)
Pero creo que para no perder sus datos existentes, puede agregar una columna de identidad y luego crear una clave compuesta.
Tenga cuidado de simplemente agregar una clave ÚNICA ya que acepta más de un valor NULO.
Tuve que resolver un problema similar. Heredé una gran tabla fuente de MS Access con casi 15000 registros que no tenían una clave principal, que tuve que normalizar y hacer compatible CakePHP. Una convención de CakePHP es que cada tabla tiene una clave principal, que es la primera columna y que se llama ''id''. La siguiente afirmación sencilla me resultó útil en MySQL 5.5:
ALTER TABLE `database_name`.`table_name`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (`id`);
Esto agregó una nueva columna ''id'' de tipo entero delante de los datos existentes (palabra clave "FIRST"). La palabra clave AUTO_INCREMENT incrementa los identificadores que comienzan con 1. Ahora, cada conjunto de datos tiene una identificación numérica única. (Sin la instrucción AUTO_INCREMENT, todas las filas se rellenan con id = 0).