Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Como convertir este campo en único ?

Estas en el tema de Como convertir este campo en único ? en el foro de Mysql en Foros del Web. Deseo hacer que el campo "stock_securefield" se convierta en campo unico, pero nome deja... que debo hacer ? Código HTML: CREATE TABLE `Stock` ( `Size_idSize` ...
  #1 (permalink)  
Antiguo 10/08/2010, 22:10
 
Fecha de Ingreso: febrero-2008
Mensajes: 409
Antigüedad: 16 años, 2 meses
Puntos: 2
Pregunta Como convertir este campo en único ?

Deseo hacer que el campo "stock_securefield" se convierta en campo unico, pero nome deja... que debo hacer ?

Código HTML:
CREATE TABLE `Stock` (
  `Size_idSize` int(11) NOT NULL,
  `Color_idColor` int(11) NOT NULL,
  `Products_product_id` int(10) unsigned NOT NULL,
  `stock_qty` int(10) unsigned default NULL,
  `stock_retailprice` decimal(8,2) default NULL,
  `stock_wholesaleprice` decimal(8,2) NOT NULL,
  `stock_securefield` varchar(21) NOT NULL,
  KEY `Stock_FKIndex2` (`Color_idColor`),
  KEY `Stock_FKIndex1` (`Products_product_id`),
  KEY `Stock_FKIndex3` (`Size_idSize`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  #2 (permalink)  
Antiguo 11/08/2010, 02:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Como convertir este campo en único ?

¿Te refieres a que no se pueda repetir ningún dato?, ¿has probado añadiendo un índice único?
CREATE TABLE `Stock` (
`Size_idSize` int(11) NOT NULL,
`Color_idColor` int(11) NOT NULL,
`Products_product_id` int(10) unsigned NOT NULL,
`stock_qty` int(10) unsigned default NULL,
`stock_retailprice` decimal(8,2) default NULL,
`stock_wholesaleprice` decimal(8,2) NOT NULL,
`stock_securefield` varchar(21) NOT NULL,
KEY `Stock_FKIndex2` (`Color_idColor`),
KEY `Stock_FKIndex1` (`Products_product_id`),
KEY `Stock_FKIndex3` (`Size_idSize`),
UNIQUE `stock_securefield_UNIndex` (`stock_securefield`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  #3 (permalink)  
Antiguo 11/08/2010, 11:20
 
Fecha de Ingreso: febrero-2008
Mensajes: 409
Antigüedad: 16 años, 2 meses
Puntos: 2
Pregunta Respuesta: Como convertir este campo en único ?

Cita:
Iniciado por jurena Ver Mensaje
¿Te refieres a que no se pueda repetir ningún dato?, ¿has probado añadiendo un índice único?
CREATE TABLE `Stock` (
`Size_idSize` int(11) NOT NULL,
`Color_idColor` int(11) NOT NULL,
`Products_product_id` int(10) unsigned NOT NULL,
`stock_qty` int(10) unsigned default NULL,
`stock_retailprice` decimal(8,2) default NULL,
`stock_wholesaleprice` decimal(8,2) NOT NULL,
`stock_securefield` varchar(21) NOT NULL,
KEY `Stock_FKIndex2` (`Color_idColor`),
KEY `Stock_FKIndex1` (`Products_product_id`),
KEY `Stock_FKIndex3` (`Size_idSize`),
UNIQUE `stock_securefield_UNIndex` (`stock_securefield`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Sí, pero precisamente es lo que no me deja.. al parecer porque ya tengo 3 llaves en esta tabla.. pero aun asi no entiendo porque me rechaza, si se supone que los 3 primeros campos son llaves externas.... de ahi mi pregunta,,
  #4 (permalink)  
Antiguo 11/08/2010, 11:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como convertir este campo en único ?

Cita:
Deseo hacer que el campo "stock_securefield" se convierta en campo unico, pero nome deja... que debo hacer ?
Código MySQL:
Ver original
  1. CREATE TABLE  `stock` (
  2.   `Size_idSize` int(11) NOT NULL,
  3.   `Color_idColor` int(11) NOT NULL,
  4.   `Products_product_id` int(10) unsigned NOT NULL,
  5.   `stock_qty` int(10) unsigned default NULL,
  6.   `stock_retailprice` decimal(8,2) default NULL,
  7.   `stock_wholesaleprice` decimal(8,2) NOT NULL,
  8.   `stock_securefield` varchar(21) NOT NULL,
  9.   UNIQUE KEY `stock_securefield_UNIndex` (`stock_securefield`),
  10.   KEY `Stock_FKIndex2` (`Color_idColor`),
  11.   KEY `Stock_FKIndex1` (`Products_product_id`),
  12.   KEY `Stock_FKIndex3` (`Size_idSize`)
  13. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

La única posibilidad de falla es que en la tabla ya existan datos y que al menos haya dos registros con el mismo valor de securefield, ya que eso violaría la unicidad de la clave,
Cita:
no entiendo porque me rechaza, si se supone que los 3 primeros campos son llaves externas....
Imposible. las tablas MyISAM no tienen claves foráneas o externas. El motor MyISAM no las admite y si te fijas lo único que tienen es definidos índices sobre ellas pero no hay ninguna CONSTRAINT ... FOREIGN KEY...
Para usar FK deberás mudar las tablas a InnoDB.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 11/08/2010, 12:29
 
Fecha de Ingreso: febrero-2008
Mensajes: 409
Antigüedad: 16 años, 2 meses
Puntos: 2
Pregunta Respuesta: Como convertir este campo en único ?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código mysql:
Ver original
  1. create table  `stock` (
  2.   `size_idsize` int(11) not null,
  3.   `color_idcolor` int(11) not null,
  4.   `products_product_id` int(10) unsigned not null,
  5.   `stock_qty` int(10) unsigned default null,
  6.   `stock_retailprice` decimal(8,2) default null,
  7.   `stock_wholesaleprice` decimal(8,2) not null,
  8.   `stock_securefield` varchar(21) not null,
  9.   unique key `stock_securefield_unindex` (`stock_securefield`),
  10.   key `stock_fkindex2` (`color_idcolor`),
  11.   key `stock_fkindex1` (`products_product_id`),
  12.   key `stock_fkindex3` (`size_idsize`)
  13. ) engine=myisam default charset=utf8;

la única posibilidad de falla es que en la tabla ya existan datos y que al menos haya dos registros con el mismo valor de securefield, ya que eso violaría la unicidad de la clave,
imposible. Las tablas myisam no tienen claves foráneas o externas. el motor myisam no las admite y si te fijas lo único que tienen es definidos índices sobre ellas pero no hay ninguna constraint ... Foreign key...
Para usar fk deberás mudar las tablas a innodb.
como hago para encontrar datos duplicados en dos filas ?
  #6 (permalink)  
Antiguo 11/08/2010, 12:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como convertir este campo en único ?

Con GROUP BY y HAVING:
Código MySQL:
Ver original
  1. FROM stock
  2. WHERE stock_securefield
  3.    IN(SELECT stock_securefield
  4.        FROM stock
  5.        GROUP BY stock_securefield
  6.        HAVING COUNT(*)>1);
Eso te devolverá todos los registros de la tabla que po
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 11/08/2010, 13:05
 
Fecha de Ingreso: febrero-2008
Mensajes: 409
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Como convertir este campo en único ?

es muy extraño, ayer no me dejaba y ahora si me dejó, parece ser algun tema con el MySQL Admin.. no hice ningun cambio y esta vez funcionó... gracias !

Etiquetas: campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:29.