Hola de nuevo!
No hay fallo.
Explicación
Supongamos la siguiente tabla:
Digamos que quieres modificar la marca Honda y llamarla Porsche. Inicialmente, el form quedaría así:
Modificas marcanueva, quedando con Porsche y haces clic sobre Cambiar, la consulta quería así:
Entonces, el motor de base de datos recorrerá las filas y hará algo así:
¿Cómo cambias una única fila?
Simple: debes asegurarte de darle parámetros únicos a la consulta.
En la consulta anterior, hay una marca que se repite 3 veces, por ende, este campo no puede ser un identificador único. Si quisieras cambiar la marca de un coche específico debes saber algo único:
* El ID, puesto que las PRIMARY KEY no pueden repetirse, este es un identificador único.
Ejemplo: UPDATE coches SET marca = 'Porsche' WHERE marca = 'Honda' AND ID = 1;
* Referirse al coche en base a un índice UNIQUE. Por ejemplo, si existiera una columna llamada Placa (no sé como se llama en tu país el identificador del vehículo en la dirección de tránsito) que se haya definido como UNIQUE.
Ejemplo: UPDATE coches SET marca = 'Porsche' WHERE marca = 'Honda' AND placa = 'an1898';
* Referirse al coche a través de varias columnas que formen un identificador único. Por ejemplo, filtrando el coche por el nombre del dueño y/o fecha del registro.
Ejemplo: UPDATE coches SET marca = 'Porsche' WHERE marca = 'Honda' AND dueno = 'Lombardo' AND registrado = '20-01-1999';
Creo que eso te debería ayudar :).
Lo siguiente es un extra, así que, si no quieres, no lo leas :P
Por cierto, cuando hay un dato que se puede repetir muchas veces (como te expliqué en tu último tema), deberías separarlo en una tabla aparte. Hay formas de saber cuando separar los datos.Al diseñar la base de datos, generalmente nos hacemos unas preguntas. Por ejemplo:
* Un dueño puede tener más de un coche? Sí ¿Un coche puede pertenecer a más de una persona (puede que dependa del país)? Sí, entonces esta relación se llama muchos a muchos (n:m), por lo que deben existir tres tablas:
* Sobre la marca: un coche puede tener más de una marca? No (hasta donde sé) y una marca, ¿le puede pertenecer a más de un auto? Sí (cada marca fabrica más de un coche, así que, sí pueden haber más de un coche con la misma marca), por lo que esta relación se conoce como 1 a muchos (1:n, donde 1 sería coche y n - muchos - sería marca; Una marca a muchos autos). Se representa así:
De esta forma puedes tener muchos coches registrador con diferentes marcas y, si deseas cambiar la marca (porque te equivocaste en una letra, por ejemplo) solo actualizas la tabla marca y no tocas ninguna otra. Si quisieras cambiar la marca a un coche, simplemente actualizas el id_marca de la marca que deseas y no tocas nada más (UPDATE coche SET id_marca = (SELECT marca.id FROM marca WHERE marca.nombre = 'nnn') WHERE coche.id = N).
Hay otra relación llamada 1:1, donde una entidad (dueno, coche, marca, etc.) sólo puede relacionarse con un único ente, aunque esta relación es poco frecuente y no requiere separar los datos (para que crear una tabla extra si los datos no se repetirán?).
No hay fallo.
Explicación
Supongamos la siguiente tabla:
[B]coches[/B]
ID | marca
----------
1 | Honda
2 | Hyundai
3 | Honda
4 | Honda
5 | Chevrolet
6 | FerrariDigamos que quieres modificar la marca Honda y llamarla Porsche. Inicialmente, el form quedaría así:
marcanueva: Honda
marvavieja: HondaModificas marcanueva, quedando con Porsche y haces clic sobre Cambiar, la consulta quería así:
UPDATE coches SET marca = 'Porsche' WHERE marca = 'Honda';Entonces, el motor de base de datos recorrerá las filas y hará algo así:
Primera fila (id = 1, marca = Honda): [I]marca[/I] es igual a [I]Honda[/I]? Sí, por ende, se cambia a [I]Porsche[/I].
Segunda fila (id = 2, marca = Hyundai): [I]marca[/I] es igual a [I]Honda[/I]? No, así que [B]no se hace nada[/B].
Tercera fila (id = 3, marca = Honda): [I]marca[/I] es igual a [I]Honda[/I]? Sí; se cambia a [I]Porsche[/I].
Cuarta fila (id = 4, marca = Honda): [I]marca[/I] es igual a [I]Honda[/I]? Sí; se cambia a [I]Porsche[/I].
Quinta fila (id = 5, marca = Chevrolet): [I]marca[/I] es igual a [I]Honda[/I]? No; [B]no se modifica[/B].
Sexta fila (id = 6, marca = Ferrari): [I]marca[/I] es igual a [I]Honda[/I]? No; [B]No se modifica[/B].¿Cómo cambias una única fila?
Simple: debes asegurarte de darle parámetros únicos a la consulta.
En la consulta anterior, hay una marca que se repite 3 veces, por ende, este campo no puede ser un identificador único. Si quisieras cambiar la marca de un coche específico debes saber algo único:
* El ID, puesto que las PRIMARY KEY no pueden repetirse, este es un identificador único.
Ejemplo: UPDATE coches SET marca = 'Porsche' WHERE marca = 'Honda' AND ID = 1;
* Referirse al coche en base a un índice UNIQUE. Por ejemplo, si existiera una columna llamada Placa (no sé como se llama en tu país el identificador del vehículo en la dirección de tránsito) que se haya definido como UNIQUE.
Ejemplo: UPDATE coches SET marca = 'Porsche' WHERE marca = 'Honda' AND placa = 'an1898';
* Referirse al coche a través de varias columnas que formen un identificador único. Por ejemplo, filtrando el coche por el nombre del dueño y/o fecha del registro.
Ejemplo: UPDATE coches SET marca = 'Porsche' WHERE marca = 'Honda' AND dueno = 'Lombardo' AND registrado = '20-01-1999';
Creo que eso te debería ayudar :).
Lo siguiente es un extra, así que, si no quieres, no lo leas :P
Por cierto, cuando hay un dato que se puede repetir muchas veces (como te expliqué en tu último tema), deberías separarlo en una tabla aparte. Hay formas de saber cuando separar los datos.Al diseñar la base de datos, generalmente nos hacemos unas preguntas. Por ejemplo:
* Un dueño puede tener más de un coche? Sí ¿Un coche puede pertenecer a más de una persona (puede que dependa del país)? Sí, entonces esta relación se llama muchos a muchos (n:m), por lo que deben existir tres tablas:
dueno
id,
nombre,
etc.
coche_dueno
id_coche,
id_dueno,
fecha_registro,
PRIMARY KEY (id_coche, id_dueno),
CONSTRAINT coche_dueno__dueno_FK FOREIGN KEY id_dueno REFERENCES dueno (id),
CONSTRAINT coche_dueno__coche_FK FOREIGN KEY id_coche REFERENCES coche (id)
coche
id,
placa* Sobre la marca: un coche puede tener más de una marca? No (hasta donde sé) y una marca, ¿le puede pertenecer a más de un auto? Sí (cada marca fabrica más de un coche, así que, sí pueden haber más de un coche con la misma marca), por lo que esta relación se conoce como 1 a muchos (1:n, donde 1 sería coche y n - muchos - sería marca; Una marca a muchos autos). Se representa así:
marca
id PRIMARY KEY,
nombre
ALTER TABLE coche ADD COLUMN id_marca INT(11) NOT NULL;
ALTER TABLE coche ADD CONSTRAINT coche__marca_FK FOREIGN KEY id_marca REFERENCES marca (id);De esta forma puedes tener muchos coches registrador con diferentes marcas y, si deseas cambiar la marca (porque te equivocaste en una letra, por ejemplo) solo actualizas la tabla marca y no tocas ninguna otra. Si quisieras cambiar la marca a un coche, simplemente actualizas el id_marca de la marca que deseas y no tocas nada más (UPDATE coche SET id_marca = (SELECT marca.id FROM marca WHERE marca.nombre = 'nnn') WHERE coche.id = N).
Hay otra relación llamada 1:1, donde una entidad (dueno, coche, marca, etc.) sólo puede relacionarse con un único ente, aunque esta relación es poco frecuente y no requiere separar los datos (para que crear una tabla extra si los datos no se repetirán?).