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

Preguntas básicas sobre php-mysql

Estas en el tema de Preguntas básicas sobre php-mysql en el foro de Mysql en Foros del Web. Buenas! Aquí seguimos una vez más indagando por este mundillo y bloqueandonos de nuevo . He empezado a trastear con la interaccion con base de ...
  #1 (permalink)  
Antiguo 19/03/2008, 08:52
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 16 años, 5 meses
Puntos: 11
Preguntas básicas sobre php-mysql

Buenas!

Aquí seguimos una vez más indagando por este mundillo y bloqueandonos de nuevo .

He empezado a trastear con la interaccion con base de datos mysql y pensaba que no me atrancaria tan pronto pero no ha sido así.

Estoy haciendo unas pruebas para entender mejor el funcionamiento y me ha pasado lo siguiente:
Código:
CREATE DATABASE IF NOT EXISTS test;
CREATE TABLE IF NOT EXISTS test.users(
		id INT NOT NULL AUTO_INCREMENT,
		nombre  VARCHAR(20), telefono INT UNSIGNED,
		email VARCHAR(40) NOT NULL, PRIMARY KEY(id) )TYPE=MyISAM;

INSERT INTO users VALUES (NULL, 'pablo', '679834648', '[email protected]');

INSERT INTO users VALUES (NULL , 'pablo', '645512034', NULL),
										(NULL , 'juan', '616548795', '[email protected]'),
										(NULL , 'antonio', '645786521', '[email protected]'),
										(NULL, 'alesia', '967605050', '[email protected]');
Como podreis ver, al campo email , le he puesto NOT NULL como parametro , puesto que quiero obligar que no pueda ser un campo nulo.

En la primera fila del INSERT grande, le pongo de valor NULL y me lo coge perfectamente, apareciendo un campo vacio en el cuando se supone que no deberia ser asi. Al igual , si en vez de poner NULL , pongo ' ', pasa exactamente lo mismo .

¿No deberia darme un error? O me esta tomando como valor un caracter vacio y lo acepta? Es que no llego a comprenderlo muy bien eso.

Es decir NULL en sí es un valor , y '' es el caracter vacio , debo suponer, entonces cuando me dara error?



Mi segunda pregunta es acerca del cotejamiento. Cuando creo la tabla con sus campos, por defecto el cotejamiento de los campos VARCHAR es swedish_ci.

¿Que cotejamiento es el correcto y como puedo agregarlo desde la creacion de la tabla?



Por ultimo es el tipo de la tabla, la creo como MyISAM pero por defecto las crea como InnobDB. He leido que correcto definirla con el tipo MyISAM pero no he encontrado explicacion del por qué , del uso y demas.


Espero puedan resolverme mis 3 dudas, y a ver si en un tiempo puedo ayudarles como me ayudan . Un saludo y gracias :).

Última edición por GatorV; 19/03/2008 a las 09:21
  #2 (permalink)  
Antiguo 19/03/2008, 09:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Preguntas básicas sobre php-mysql

Hola shilen79,

Muevo tu tema al foro de Bases de Datos donde te podrán orientar mas con tus dudas.

Saludos.
  #3 (permalink)  
Antiguo 19/03/2008, 10:20
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
Re: Preguntas básicas sobre php-mysql

Vamos por partes:
1. Supuestamente, cuando defines un campo como auto_increment, si le ingresas NULL no debería devolver error, sino que el motor de MySQL procede a numerar el campo. Verifica si lo está haciendo con un SELECT. El campo en la tabla no debería aparecer nulo.

2. Un campo definido como NOT NUL da error al ingresar un NULL siempre y cuando no sea auto_increment.

3. Puedes cambiar la COLLATION de la tabla en el momento de crearla. Verifica la sintaxis en el manual de referencia: MySQL AB MySQL 5.0 Reference Manual Por default, te pone el predefinido por MySQL.

4. El motor de MySQL tiene predefinido, en la versión 5.0 a InnoDB como estándar. Si quieres tablas de otro tipo tienes que indicarla con la clausula ENGINE=MyISAM en la creación de la tabla.
  #4 (permalink)  
Antiguo 20/03/2008, 05:37
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 16 años, 5 meses
Puntos: 11
Re: Preguntas básicas sobre php-mysql

Buenas, lo primero agradecer a GatorV por mover el tema al apartado correcto , como muchas veces hacen preguntas relacionadas con mysql en el apartado de php no estaba seguro donde debia ir :P.

Gznloyo, gracias por contestar. Ya vi la manera de definir el charset en la creacion de la tabla a traves de una pagina que encontre buscando temas relacionados aquí, el cual recomiendo www.mysql.conclase.net al igual que tambien me solucionó el tema de diferencias entre los motores de almacenamiento MyISAM e InnoDb.

Respecto a la primera duda , el problema es que defino el parametro NOT NULL en el campo correo , no es AUTO INCREMENT, y al insertar un valor NULL o vacio, no me da ningun tipo de error, que eso es lo que me está confundiendo .

Junto con la primera duda, pongo otra en el aire, o mas bien es para aclararme yo.

Con el motor de almacenamiento InnoDb podemos utilizar claves foráneas de forma real, a diferencia de en MyISAM.

Por lo que he creido comprender, es que en ambos modos , tu puedes crear las claves foraneas , solo que en InnoDb realmente puedes hacer "uso" de ellas , si quieres modificar, eliminar tuplas en las coincidan el valor de la clave foranea con el valor de la tabla a la que esta ligada.

Es decir, tu en MyISAM puedes definirlas, pero este tipo de acciones no se pueden realizar, si tu eliminas un valor en una tabla, deberas eliminar "manualmente" , si es lo que necesitas claro, aquellas tuplas en aquellas tablas que contengan un clave foranea con el mismo valor. Sin embargo con InnoDB y con los parametros
DELETE ON CASCADE, UPDATE ON CASCADE, etc... puedes modificar o no automaticamente estos valores de las tuplas.

¿Es esto correcto?
  #5 (permalink)  
Antiguo 20/03/2008, 06:27
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
Re: Preguntas básicas sobre php-mysql

Si, es correcto. Las tablas MyISAM son mucho más eficientes en cierto tipo de bases de datos (la mayoría de ellas, dicen los expertos), pero la consistencia e integridad de los datos debe ser conservada manualmente. En otras palabras por código, mientras que en las InnoDB la integridad y consistencia son por default.
Obviamente esto implica muchísimo menos cosas para codificar y un control de errores más fino.
No es la única diferencia. El corazón de la cosa pasa por las transacciones ACID, que son parte del modelo en InnoDB. Y cuando haces volcados de ingentes cantidades de datos, o bien consultas concurrentes, el que haya transacciones es fundamental.
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 20:55.