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

cambiar toda la base de datos de MyISAM a innoDB

Estas en el tema de cambiar toda la base de datos de MyISAM a innoDB en el foro de Mysql en Foros del Web. Buenas, para algunos este tema esta repetido pero nuevamente lo publico por lo suguiente: He cambiado cada una de mis tablas de la bse de ...
  #1 (permalink)  
Antiguo 01/05/2011, 09:38
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
cambiar toda la base de datos de MyISAM a innoDB

Buenas, para algunos este tema esta repetido pero nuevamente lo publico por lo suguiente:

He cambiado cada una de mis tablas de la bse de datos al ALmacenamiento innoDB
a traves del ALTER TABLE

En el php.inic ya esta habilitado innoDB

Sin embargo en la siguiente imagen, publico la forma como me sale la estructura de la base de datos, pareciera que solo las tablas estan con innoDB, pero no se si este mal pero veo que la base de datos aparece como MyISAM
Y hago pruebas y no hay nada de integridad referencia, (tengo definidos bien los indices y llaves)

Aca la imagen:



como pueden ver las tablas aparecen en InnoDB, pero porque sigue apareciendo abajo MyISAM?

Agradezco me indiquen como puedo dejar totalmente la base de datos en innoDB

GRacias
  #2 (permalink)  
Antiguo 01/05/2011, 10:14
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: cambiar toda la base de datos de MyISAM a innoDB

Una base en sí no tiene tipo MyISAM o InnoDB. No es parte de las propiedades de la base, por ese lado no hay nada que hacer.
A una base le puedes definir el CHARSET, pero no el motor de tablas, que pertenece a las tablas.
Lo que sí puede ser es que aparezca como MyISAM porque ese sea el motor de tablas por default del servidor donde estás trabajando, especialmente si es en web. Pero no significa que afecte en algo a las tablas de la base que operas.
__________________
¿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 01/05/2011, 10:29
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: cambiar toda la base de datos de MyISAM a innoDB

mmmm ya....una ultima pregunta

Porque si tengo mis tablas con innoDB, permite eliminar filas con integridad referencial?

Por ejemplo:
Tengo mi tabla ciudad, con el campo COD_CIU como primario

y tengo mi tabla egresado, en donde el campo COD_CIU es foranero

El sistema me deja eliminar cualquier registro de la tabla ciudad, aun sabiendo que ese dato se encuentra en la tabla egresado....

A que se debe esto?.........Gracias por la orientación........
  #4 (permalink)  
Antiguo 01/05/2011, 13:22
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: cambiar toda la base de datos de MyISAM a innoDB

Cita:
El sistema me deja eliminar cualquier registro de la tabla ciudad, aun sabiendo que ese dato se encuentra en la tabla egresado....

A que se debe esto?
Hay que revisar que la definición de las tablas sea correcta.
Por caso, postea el resultado de esta consulta:
Código MySQL:
Ver original
  1. SHOW CREATE TABLE egresado;
Puntualmente esto devolverá la sentencia CREATE TABLE que genera la tabla y veremos cómo está definida.
__________________
¿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 02/05/2011, 06:15
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: cambiar toda la base de datos de MyISAM a innoDB

aparece lo siguiente(para esa tabla):

Código SQL:
Ver original
  1. CREATE TABLE `egresado` (\n  `NUM_CED_EGR` BIGINT(11) NOT NULL,
  2. \n  `COD_SEC_LAB` INT(11) NOT NULL,
  3. \n  `COD_CIU` INT(11) NOT NULL,
  4. \n  `COD_TIP_DOC` INT(11) NOT NULL,
  5. \n  `COD_SIT_LAB` INT(11) NOT NULL,
  6. \n  `GEN_EGR` CHAR(1) NOT NULL,
  7. \n  `NOM_EGR` CHAR(25) DEFAULT NULL,
  8. \n  `APE_EGR` CHAR(25) DEFAULT NULL,
  9. \n  `FEC_NAC_EGR` DATE DEFAULT NULL,
  10. \n  `NUM_LIB_MIL` CHAR(11) DEFAULT NULL,
  11. \n  `DIR_EGR` VARCHAR(70) DEFAULT NULL,
  12. \n  `TEL_FIJ_EGR` CHAR(13) DEFAULT NULL,
  13. \n  `TEL_MOV_EGR` CHAR(10) DEFAULT NULL,
  14. \n  `COD_EGR` CHAR(12) DEFAULT NULL,
  15. \n  `EMA_EGR` VARCHAR(70) DEFAULT NULL,
  16. \n  `FEC_HOR_REG` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n  PRIMARY KEY  (`NUM_CED_EGR`),
  17. \n  KEY `FK_CIUDAD_EGRESADO` (`COD_CIU`),\n  KEY `FK_SECTOR_LABORAL_EGRESADO` (`COD_SEC_LAB`),
  18. \n  KEY `FK_SITUACION_LABORAL_EGRESADO` (`COD_SIT_LAB`),
  19. \n  KEY `FK_TIPO_DOCUMENTO_EGRESADO` (`COD_TIP_DOC`)
  20. \n) ENGINE=innoDB DEFAULT CHARSET=utf8

por ejemplo el campo COD_CIU tiene la misma estructura que el de esta tabla egresado, int (11).
  #6 (permalink)  
Antiguo 02/05/2011, 07:12
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: cambiar toda la base de datos de MyISAM a innoDB

Bueno, las tablas son InnoDB, eso es evidente. Y hay índices definidos sobre valores que deberían ser FOREIGN KEYs, pero las FK no están.
Esto puede suceder si la base fue creara originalmente sin especificar que la tabla debía ser InnoDB, y el servidor tenía definido como motor por default el MyISAM. Si no se indica específicamente InnoDB, MySQL le asigna el otro tipo sin preguntar.
Por esto es buena práctica poner en el script de creación de las bases los tipos de tabla en forma específica, y no dejar que lo resuelva el servidor.
Ahora bien, el script puede haber tenido la indicación de las FK, pero como MyISAM no posee FK, no las puede crear y solamente genera estos índices. Por cuestiones preventivas, indicar una FK en el CREATE TABLE, sobre un motor MyISAM no genera erroes, sino warnings, que no son lo mismo, por lo que simplemente ignoró el problema y creó la tabla.
¿Se entiende el inconveniente?
No se trata de un comportamiento erróneo, eso es lo que MySQL hace siempre en estos casos: Ignora cualquier indicación de FK si va a crear la tabla como MyISAM.

Dos soluciones:
1) Elimina todos los índices de cada tabla, que correspondan a FK, y vuelve a crear las FK, ahora con las tablas como InnoDB.
2) Borra la base y vuelve a crearla, asegurándote que en el script se indique específicamente el tipo de tabla InnoDB (ENGINE=InnoDB). Siempre.
__________________
¿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 02/05/2011, 09:05
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: cambiar toda la base de datos de MyISAM a innoDB

Ok, ahora entiendo el problema....demasiadas gracias........

Etiquetas: innodb
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 18:46.