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

[SOLUCIONADO] editar una tabla

Estas en el tema de editar una tabla en el foro de Mysql en Foros del Web. hola amigo...les cuento Tengo un atabla reservas particular donde se guardan los dstos de la habitacion q es reservada como plantan,n°habitacion,precio,tipo mas el dni del ...
  #1 (permalink)  
Antiguo 31/03/2014, 14:14
 
Fecha de Ingreso: febrero-2014
Ubicación: la banda
Mensajes: 31
Antigüedad: 10 años, 2 meses
Puntos: 0
editar una tabla

hola amigo...les cuento
Tengo un atabla reservas particular donde se guardan los dstos de la habitacion q es reservada como plantan,n°habitacion,precio,tipo mas el dni del particular, fecha de entrada y fecha de salida...lo q quiero hacer es modificar otra tabla habitacion donde dice estado..ai se pone libre o reservada donde los datos de la tabla reserva particular coincidan con la tabla habitacion....quise hacerla pedo no esta bien puesta


alter table habitacion.estado='libre' where reserva_particular.id_hotel=habitacion.id_hotel and reserva_particular.planta=habitacion.planta and
reserva_particular.nrohabit=habitacion.nrohabit and
reserva_particular.fechadesalida<2014-03-30

o lo ago con update?
  #2 (permalink)  
Antiguo 31/03/2014, 14:43
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, 4 meses
Puntos: 2658
Respuesta: editar una tabla

Creo que estás leyendo el manual equivocado.
Esa no es la sintaxis de ALTER TABLE, ni tampoco es la de un UPDATE.
ALTER TABLE es para modificar la estructura física de las tablas. UPDATE para actualizar datos.

¿Qué es lo que realmente necesitas hacer?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 31/03/2014, 15:11
 
Fecha de Ingreso: febrero-2014
Ubicación: la banda
Mensajes: 31
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: editar una tabla

necesito que en la tabla habitacion en la columna estado, de una habitacion reservada cambie de reservada a libre.......despues de q el campo fecha salida de la tabla reserva sea menor ala fecha del sistema
  #4 (permalink)  
Antiguo 31/03/2014, 15:17
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, 4 meses
Puntos: 2658
Respuesta: editar una tabla

Eso es UPDATE, no ALTER...
Código MySQL:
Ver original
  1. UPDATE habitacion H  INNER JOIN reserva_particular R
  2.          ON R.id_hotel = H.id_hotel AND R.planta = H.planta AND R.nrohabit = H.nrohabit
  3. SET estado='libre'
  4. WHERE R.fechadesalida<'2014-03-30'

En serio, te conviene cambiar de manual de MySQL.

http://dev.mysql.com/doc/refman/5.0/es/update.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 31/03/2014 a las 16:51
  #5 (permalink)  
Antiguo 31/03/2014, 15:25
 
Fecha de Ingreso: febrero-2014
Ubicación: la banda
Mensajes: 31
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: editar una tabla

haa update era y...inner join tmb ia me parecia.....
gracias por tu sabiduría... gnzsoloyo!!!
  #6 (permalink)  
Antiguo 31/03/2014, 16:50
 
Fecha de Ingreso: febrero-2014
Ubicación: la banda
Mensajes: 31
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: editar una tabla

gnzsoloyo no puede cambiar el dato de la tabla habitacion.estado me salta el error 1175....sera porque habitación no tiene clave primaria pero si una foranea q hace referencia a un hotel?
  #7 (permalink)  
Antiguo 31/03/2014, 16:53
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, 4 meses
Puntos: 2658
Respuesta: editar una tabla

Bueno, vamos por partes: En el script que te puse se deslizó un error (quedo una tabla duplicada):
Código MySQL:
Ver original
  1. UPDATE habitacion H  INNER JOIN reserva_particular R
  2.          ON R.id_hotel = H.id_hotel AND R.planta = H.planta AND R.nrohabit = H.nrohabit
  3. SET estado='libre'
  4. WHERE R.fechadesalida<'2014-03-30'
Por otro lado, si persiste el problema habría que verificar primero la dependencia de datos:
Código MySQL:
Ver original
  1. SHOW CREATE TABLE habitacion;
  2. SHOW CREATE TABLE reserva_particular;
Con eso se recupera la sentencia que las crea y veremos un poco mejor el panorama.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 31/03/2014, 18:05
 
Fecha de Ingreso: febrero-2014
Ubicación: la banda
Mensajes: 31
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: editar una tabla

'habitacion',
Código MySQL:
Ver original
  1. CREATE TABLE `habitacion` (
  2.   `ID_HOTEL` int(11) NOT NULL,
  3.   `CLASE` varchar(15) DEFAULT NULL,
  4.   `TIPO` varchar(15) DEFAULT NULL,
  5.   `PRECIO` int(11) DEFAULT NULL,
  6.   `PLANTA` varchar(8) DEFAULT NULL,
  7.   `NRO_HABIT` varchar(5) DEFAULT NULL,
  8.   `ESTADO` varchar(9) DEFAULT NULL,
  9.   KEY `ID_HOTEL` (`ID_HOTEL`),
  10.   CONSTRAINT `habitacion_ibfk_1` FOREIGN KEY (`ID_HOTEL`) REFERENCES `hotel` (`ID_HOTEL`)



'reserva_agencia',
Código MySQL:
Ver original
  1. CREATE TABLE `reserva_agencia` (
  2.   `ID_HOTEL` int(11) DEFAULT NULL,
  3.   `NRO_HABIT` varchar(5) DEFAULT NULL,
  4.   `PLANTA` varchar(8) DEFAULT NULL,
  5.   `CLASE` varchar(15) DEFAULT NULL,
  6.   `TIPO` varchar(15) DEFAULT NULL,
  7.   `PRECIO` int(11) DEFAULT NULL,
  8.   `ID_AGENCIA` int(11) DEFAULT NULL,
  9.   `FECHA_INI` date DEFAULT NULL,
  10.   `FECHA_SALIDA` date DEFAULT NULL,
  11.   KEY `ID_AGENCIA` (`ID_AGENCIA`),
  12.   CONSTRAINT `reserva_agencia_ibfk_1` FOREIGN KEY (`ID_AGENCIA`) REFERENCES `agencia` (`ID_AGENCIA`)

Última edición por gnzsoloyo; 31/03/2014 a las 18:15 Razón: Usar Highligh "MySQL", por favor.
  #9 (permalink)  
Antiguo 31/03/2014, 18:21
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, 4 meses
Puntos: 2658
Respuesta: editar una tabla

Usa los Highligh "MySQL", por favor.

Bueno, el problema es que el UPDATE se considera de tipo masivo, pero el WHERE no aplica a ninguna clave foránea ni primaria.

Habría que replantearlo mas o menos así:

Código SQL:
Ver original
  1. UPDATE habitacion H  
  2. SET estado='libre'
  3. WHERE (H.id_hotel, H.planta, H.nrohabit )
  4.     IN (SELECT R.id_hotel, R.planta, R.nrohabit
  5.         FROM reserva_particular R
  6.         WHERE  R.fechadesalida<'2014-03-30')

De todos modos tu modelo adolece de errores conceptuales, como por ejemplo que las tablas no tengan clave primaria. Eso no sólo es una irregularidad, es un defecto gravísimo. De lapeor de todas las clases de errores posibles en una base de datos.

Y no, esto:
Código MySQL:
Ver original
  1. KEY `ID_AGENCIA` (`ID_AGENCIA`),
no es declarar una PK.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 31/03/2014, 18:34
 
Fecha de Ingreso: febrero-2014
Ubicación: la banda
Mensajes: 31
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: editar una tabla

si te explico.....tengo q hacer un trabajo para teoria de la informacion2 isimos un modelo E-R y la profesora nos lo reboto......(nos iso hacer correcciones q no tienen logica) dice q habitacion es una entidad debil de hotel y q hay dos vinculos con el mismo nombre reserva para particulares y agencias......en donde nos hace repetir muchos datos....habitacion al ser entidad debil no tiene clave primaria......la clabe primaria la heredaria de la tabla hotel
  #11 (permalink)  
Antiguo 31/03/2014, 19:00
 
Fecha de Ingreso: febrero-2014
Ubicación: la banda
Mensajes: 31
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: editar una tabla

ME MARCA UN ERROR DE SINTAXIS EN

Código MySQL:
Ver original
  1. IN (SELECT R.id_hotel, R.planta, R.nrohabit
  2.         FROM reserva_particular R
  3.         WHERE  R.fechadesalida<'2014-03-30')

Última edición por gnzsoloyo; 31/03/2014 a las 19:14 Razón: Las etiquetas deben rodear el codigo...
  #12 (permalink)  
Antiguo 31/03/2014, 19:11
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, 4 meses
Puntos: 2658
Respuesta: editar una tabla

Una entidad débil, es cierto, no tiene una PK propia, sino que la hereda de una entidad superior, pero eso se produce a nivel lógico, en el modelado del sistema, y no es cierto a nivel de implementación física de tablas.
Lo que muy probablemente no tengas claro todavía es que existe un conjunto de pasos entre el modelado de entidades y la creación de una base física. No se puede transportar directamente un modelo E-R a un DBMS.
Por otro lado, el hecho de que herede una clave, no implica que la entidad en sí no la tenga. Todo lo contrario: no sólo tiene la clave heredada, sino que la PK es al mismo tiempo clave foránea (FK), y para ello deben existir los mismos campos de la PK referida, en del mismo tipo (dominio) y en el mismo orden de la clave PK de origen.
A este punto hay que hacer una aclaración más: Si bien es cierto que la entidad Habitación es una entidad débil, dependiente de Hotel, esa circunstancia no hace que la existencia del Hotel como FK/PK sea suficiente para identificar una única habitación en el conjunto de habitaciones. Se requiere sí o sí un discriminante, que compone la propia clave de la habitación: su número, o identificacion.
Este detalle surge inmediatamente a la vista cuando miras las cardinalidades de las relaciones: Un mismo hotel tiene N habitaciones, y cada habitación es de un único Hotel. Por consecuencia, se requieren dos atributos para identificar una habitación: El ID del Hotel, y el Id de la propia habitación.
A nivel de tabla física eso se representa así:

Código MySQL:
Ver original
  1. CREATE TABLE `habitacion` (
  2.   `ID_HOTEL` INT UNSIGNED NOT NULL,
  3.   `NRO_HABIT` INT UNSIGNED NOT NULL,
  4.   `NOM_HABIT` VARCHAR(15)
  5.   `CLASE` varchar(15) DEFAULT NULL,
  6.   `TIPO` varchar(15) DEFAULT NULL,
  7.   `PRECIO` int(11) DEFAULT NULL,
  8.   `PLANTA` varchar(8) DEFAULT NULL,
  9.   `ESTADO` varchar(1) DEFAULT NULL,
  10.   PRIMARY KEY(ID_HOTEL, NRO_HABIT),
  11.   KEY `ID_HOTEL` (`ID_HOTEL`),
  12.   CONSTRAINT `habitacion_ibfk_1` FOREIGN KEY (`ID_HOTEL`) REFERENCES `hotel` (`ID_HOTEL`)
Este modelado requiere que la reserva también respete la consistencia referencial, por lo que la tabla de reservas debe forzosamente ser modificada:
Código MySQL:
Ver original
  1. CREATE TABLE `reserva_agencia` (
  2.   ``RESERVA_ID` INT UNSIGNED NOT NULL,
  3.  `ID_HOTEL` INT_UNSIGNED NOT NULL,
  4.  `NRO_HABIT` INT UNSIGNED NOT NULL,
  5.  `PLANTA` varchar(8) DEFAULT NULL,
  6.  `CLASE` varchar(15) DEFAULT NULL,
  7.  `TIPO` varchar(15) DEFAULT NULL,
  8.  `PRECIO` int(11) DEFAULT NULL,
  9.  `ID_AGENCIA` int(11) DEFAULT NULL,
  10.  `FECHA_INI` date DEFAULT NULL,
  11.  `FECHA_SALIDA` date DEFAULT NULL,
  12.  PRIMARY KEY(RESERVA_ID),
  13.  KEY `ID_AGENCIA` (`ID_AGENCIA`),
  14.  CONSTRAINT `reserva_habit_ibfk_1` FOREIGN KEY (ID_HOTEL, NRO_HABIT) REFERENCES `habitacion` (ID_HOTEL, NRO_HABIT)
  15.  CONSTRAINT `reserva_agencia_ibfk_1` FOREIGN KEY (`ID_AGENCIA`) REFERENCES `agencia` (`ID_AGENCIA`)
  16. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Aun hay mucho más, porque ninguna de estas tablas está normalizada, y desde le punto de vista de los sistemas reales, le alta bastante depuración, sin contar con la normalización.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 31/03/2014, 19:16
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, 4 meses
Puntos: 2658
Respuesta: editar una tabla

Cita:
Iniciado por franco55 Ver Mensaje
ME MARCA UN ERROR DE SINTAXIS EN

Código MySQL:
Ver original
  1. IN (SELECT R.id_hotel, R.planta, R.nrohabit
  2.         FROM reserva_particular R
  3.         WHERE  R.fechadesalida<'2014-03-30')
No veo un error sintáctico en el caso... Lo revisé en el MySQL Workbenh, y está perfecto.
¿Estás seguro que hiciste un Copy+Paste, o corregiste algo? ¿Estamos trabajando en MySQL, no?

Postea le mensaje tal y como te lo devuelve MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 31/03/2014, 19:47
 
Fecha de Ingreso: febrero-2014
Ubicación: la banda
Mensajes: 31
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: editar una tabla

no,...io se ve q escribi mal...me vuelve a salir el erro 1775....deja voy a cambiar esas tablas...no puede ser q habitacion no tenga una clave.........

Etiquetas: alterar, modificar, update
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 14:17.