Cómo agregar clave única a la tabla existente (con filas no únicas)
Quiero agregar clave única compleja a la tabla existente. 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 después agregar clave compleja.
Tal vez exista otra solución sin buscar todos los datos duplicados. (como agregar único ignorar etc).
UPD Busqué, ¿cómo se puede eliminar filas mysql duplicados-creo que es una buena solución. ¿Eliminar duplicados usando solo una consulta MySQL?
7 answers
Puedes hacer lo que yAnTar aconsejó
ALTER TABLE TABLE_NAME ADD Id INT IDENTITY(1,1) PRIMARY KEY
O
Puede 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 hacer una clave compuesta.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-06 19:17:11
ALTER TABLE 0_value_addition_setup
ADD UNIQUE (
value_code
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-04 10:19:37
Tuve que resolver un problema similar. Heredé una gran tabla de fuentes de MS Access con casi 15000 registros que no tenían una clave primaria, que tuve que normalizar y hacer compatible CakePHP. Una convención de CakePHP es que cada tabla tiene una clave primaria, que es la primera columna y que se llama 'id'. La siguiente declaración simple hizo el truco para mí bajo 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 ("FIRST" palabra clave). La palabra clave AUTO_INCREMENT incrementa los ids empezando por 1. Ahora cada conjunto de datos tiene un id numérico único. (Sin la instrucción AUTO_INCREMENT todas las filas se rellenan con id = 0).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-05 17:49:04
Estoy proporcionando mi solución con la suposición de 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. Así que voy a añadir una clave compuesta a la tabla.
PRIMARY KEY (`user_id`,`game_id`)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-06 20:39:24
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 de la tabla única...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-06 18:43:04
Establecer la clave única múltiple en la tabla
ALTER TABLE table_name
ADD CONSTRAINT UC_table_name UNIQUE (field1,field2);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-01 07:16:02
Tenga cuidado de simplemente agregar una clave ÚNICA, ya que acepta más de un valor NULL.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-01 04:48:31