sábado, 16 de marzo de 2013

MYSQL MiniTutorial Parte 1

Bueno amigos he estado aprendiendo un poco de mysql, y quisiera compartir los conocimientos aprendidos con toda la gente que visita el BLOG, de esta manera tambien ellos tendran algunos conocimientos; y sere lo mas claro posible para crear unas partes basicas para que todo mundo las comprenda.

Empecemos por definir que es MySQL...

Que es MySQL

MySQL es un sistema de gestion de base de datos como muchos en este caso es software libre por lo que es ampliamente usado, Mysql es de la empresa oracle.

Para mas informacion acerca de mysql Wikipedia :D

Antes que nada les quiero decir que pueden faltar conceptos por lo que son libres de comentar para modificar en lo que me haya equivocado, como les comente soy nuevo en esto y trato de introducirlos por conceptos basicos, por cierto, antes que nada les quiero decir que no les mostrare aqui como montar un servidor casero o algo por el estilo para ello hay muchos tutoriales en google y si se quieren adentrar mas en esto de mysql tienen referencia oficial que es: https://dev.mysql.com/

Bueno quiero comentarles que trabajaremos por consola para que sea mas comodo aprender la estructura del lenguaje....

Como conectar  a MySQL

hay varias maneras de conectar por Mysql en consola....

1.-manera remota (por si usan un servidor remoto para hacer las pruebas como por ejemplo 000webhost):

mysql -h host -u user -p pass

2.-modo local (desde tu pc no es necesario que indiques el host)

mysql -u user -p pass

Nota:
puedes especificar mas cosas como son -P (--port) para especificar el puerto con el que trabajaras con mysql o tambien --protocol para especificar el protocolo con el que trabajaras :P


Como puedes ver en la pantalla en este caso me conecte de manera local desde mi pc aunque no es necesario que indicara el host pero para que vean como se usa :P

Tambien se puede observar que arroja unos comandos que podemos usar como son:
help o \h - para que nos muestre la ayuda
\c - para cancelar una declaracion (cuando este mal escrita u otra cosa)
Hay unas que no muestra ahi pero son interesantes como son:
quit - para cerrar la consola de mysql
prompt - para cambiar el prompt (el prompt en este ejemplo es mysql>) si lo queremos cambiar por ejemplo a arthusu> seria de esta manera prompt arthusu> el prompt nos indica que podemos ejecutar declaraciones :P

Eso seria de los que me parecieron importantes aunque pueden ver de todas maneras con \h los demas comandos o la ayuda :P :D


Obtener informacion acerca de la version que estamos utilizando

Una de las cosas importantes al trabajar con mysql es saber la version que estamos utilizando, aunque podemos hacerlo con un select (todavia no lo he explicado) veremos tres maneras faciles :P

1.- Mysql -V indica la version
2.- Cuando abres una coneccion te muestra la version
3.- select version() - selecciona la version de mysql

Ahora veamoslo en un ejemplo para comprenderlo



Nota importante:
Siguiendo con el minitutorial quiero decirles que yo no les mostraré de la manera en que lo hacen los Videotutoriales o Tutoriales de paginas oficiales sino de manera que vayamos practicando de la misma manera que aprendemos, es decir, creemos base de datos, las mostremos, creemos tablas, las mostremos, insertemos datos, los seleccionemos, etc etc...

Creando una base de datos, mostrando base de datos, usando base de datos

Para crear una base de datos utilizamos la sintaxis:

CREATE DATABASE nombre_de_la_base_de_datos

antes que nada quiero decirles que en este caso mysql no es case sensitive (es decir no diferencia de minusculas o mayusculas) por lo que podemos usar create database name_db
CrEaTe DaTaBaSe name_db 
CREATE DATABASE name_db 
y funcionan de la misma manera....

Pero al seleccionar la base de datos o tablas o columnas si es case sensitive la verdad no se por que hicieron esto pero asi son las cosas XD :P :D

Creemos nuestra base de datos de ejemplo para nuestras practicas :D

Create Database Mis_Practicas;

por cierto siempre tenemos que cerrar nuestra declaracion (;) al terminarla de esta manera mysql sabe cuando terminamos una declaracion, sino mostraria -> que significa que sigue esperando mas declaraciones o que la termines o canceles con ; o \c (cancelas la declaracion lo comentamos arriba)


Como ves nos dice que se ha completado la declaracion correctamente....

Mostremos las bases de datos que tenemos en nuestro gestor de bases de datos Mysql :D

Show Databases;

Con esto mostramos todas las bases de datos entre ellas nos mostraria la que acabamos de crear :D


Seleccionar la base de datos que utilizaremos :D
Para seleccionar nuestra base de datos utilizamos Use DB;

Use DB;

donde DB como es el nombre de la base de datos y como indicamos anteriormente en este caso si es Case sensitive....


En este caso en la primera declaracion me equivoque a proposito para mostrar que no es lo mismo mis_practicas que Mis_Practicas, es decir, tienen que escribirlo tal y como esta, asi son mayormente las cosas en unix :P :D

Como ya estamos usando una base de datos podemos mostrar la base de datos que estamos utilizando actualmente usando

Select database();

Que es lo mismo que decir seleccioname la base de datos con la que actualmente estoy trabajando.









Creando tablas, describiendo y mostrando tablas

Tenemos seleccionada nuestra base de datos, ahora crearemos una tabla llamada personas se que hay muchos ejemplos de esto, si la he sacado de w3schools :D xD esto para hacerselos mas facil de comprender :D

La sintaxis para crear una tabla es de la siguiente manera:

Create Table nombre_de_la_tabla (Columna1 tipo_datos,Columna2 tipo_datos, Columna3 tipo_datos, etc)

Con etc me refiero que puedes agregar cuantas columnas quieras....

Y con tipo de datos el tipo de datos que usaras para ello veremos una breve descripcion de algunos tipos de datos :D

Datos de tipo texto

char(tamaño) - puede contener 255 caracteres. Puede contener letras, numeros y caracteres especiales. Un ejemplo practico seria: select cast(12345 as char(20)) as texto; la funcion cast() o convert() solo puede contener datos como son:
binary,char,date,datetime,decimal,signed(integer),time,unsigned(integer), aunque esto se salio un poco de la explicacion pero si la quieren usar para que sepan si no les llega a funcionar :P.....
varchar(tamaño) - puede contener 255 caracteres. Puede contener letras, numeros y caracteres especiales. Si tu pones mas de 255 caracteres en tamaño entonces automaticamente se convierte en tipo TEXT.
tinytext - puede contener una cadena  de 255.
text - puede contener una cadena de 65,535 caracteres.
mediumtext - puede contener una cadena de 16,777,215 caracteres
longtext - puede contener una cadena de 4,294,967,295 caracteres

hay mas  datos de tipo texto pero puse los mas basicos y ademas son los que mas se usan :P

Datos de tipo numero

int(tamaño) - puede contener numeros desde -2147483648 hasta 2147483647.
double(tamaño,digitos) - puede contener numeros decimales, en el parametro tamaño puedes indicar el tamaño de digitos que contendra a la izquierda y en digitos puedes especificar el numero de digitos a la derecha.

hay mas datos de tipo numero pero puse los mas basicos y ademas los que mas se usan :P

Datos de tipo fecha

date() - el formato que contiene es YYYY-MM-DD donde y es año m es mes y d es dia, entonces podria ser un ejemplo 2013-03-15. Soporta desde 1000-01-01 hasta 9999-12-31. Puedes usar select current_date; para que te muestre la fecha actual con el formato anterior.
datetime() - el formato que contiene es YYYY-MM-DD HH:MM:SS donde y es año m es mes d es el dia h es la hora m es minutos y s son los segundos.... un ejemplo seria:  2013-03-15 22:56:19. Puedes usar select now(); para que te muestre la fecha y hora actual con el formato anterior.
timestamp() - el formato que contiene es YYYY-MM-DD HH:MM:SS el mismo que el anterior, este tipo de dato tiene almacenado desde que unix salio, soporta un rango 1970-01-01 00:00:01 UTC hasta 2038-01-09 03:14:07 UTC. Un ejemplo practico podria ser select timestamp(now());
aunque timestamp no solo acepta el formato de arriba pero era un buen ejemplo puede aceptar otros formatos como son: YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, o YYMMDD.
time() - el formato que contiene es HH:MM:SS (hora:minuto:segundo), soporta un rando desde -838:59:59 hasta 838:59:59. Un ejemplo practico seria: select time(now()) as hora; donde as seria una alias es decir en ves de llamarse....
 time(now()) se llamara hora, muchas veces nos facilita el trabajo para no hacer consultas tan largas pero bueno me sali del tema de nuevo, pero es bueno para que supieran que significa :P
year() - soporta dos formatos de 2 digitos o 4. El de 4 digitos soporta desde 1901 hasta 2155, y el de 2 digitos desde 70 hasta 69 (representan 1970 hasta 2069). Un ejemplo seria:  select year(now());

Si quieres una referencia mas completa puedes visitar:
http://www.w3schools.com/sql/sql_datatypes.asp
o
http://dev.mysql.com/doc/refman/5.5/en/data-types.html

Bueno como ahora ya sabemos algunos tipos de datos entonces creemos nuestra tabla Personas para practicar :D

create table personas(p_id int not null auto_increment primary key,apellido varchar(50) not null,nombre varchar(50) not null,direccion varchar(50) not null,ciudad varchar(50) not null);

con esto creamos una tabla personas con las columnas p_id,apellido,nombre,direccion y ciudad cada uno con su tipo de datos..... agregamos unas cosas que no vimos como son not null para que el valor no sea nulo, es decir, no este vacio... auto_increment que es para que se autoincremente automaticamente segun vayamos agregando mas registros, primary key es para que tenga un id unico y que no se repitan cada ves que incrementemos :D

ahora vamos a ver la descripcion de la tabla podemos usar describe o desc que es su sinonimo....

desc nombre_de_la_tabla;
describe nombre_de_la_tabla;

y con esto veremos como esta formada, aca les dejo una imagen de ejemplo de la creacion de la tabla y la descripcion de como esta compuesta, donde se muestra el tipo de datos,si es null,la key que es este caso es primary la primera columna p_id, default que son los valores por defecto en este caso no agregamos ninguno y extra que son valores extras como auto_increment....


Ahora ya estamos usando la base de datos tenemos nuestra tabla Personas que tiene las columnas que indica el campo field en la descripcion.
Veamos como mostramos las tablas....

Show Tables;

Con esto mostramos todas las tablas que se encuentren en la base de datos que estamos utilizando (en este caso solo hay una tabla que es la que acabamos de crear).


Como puedes ver tambien nos muestra la base de datos Tables_in_Mis_Practicas y nos muestra la tabla  personas :D

Insertar datos y mostrarlos

Esta es una de las partes mas interesantes por que cuando insertar los datos ya puedes empezar a manejarlos, aunque en esta parte solo veremos como insertarlos de dos maneras y como mostrarlos y daremos una conclusion de todo lo visto que puede ser implementado en php de manera facil :D

Insertar los datos de manera local

bueno podemos insertar los datos de manera local utilizando, la siguiente sintaxis:

load data local infile 'ruta/archivo.txt' into table nombre_tabla;

donde ruta/archivo.txt es la ruta donde se encuentra el archivo que contiene los datos a insertar....
nombre_tabla es la tabla a la cual insertaremos esos datos....

bueno creemos un archivo entonces llamado Personas en el cual insertaremos unos datos estos datos para que funcionen bien deben ser separados por la tecla de tabulacion (tab, es una tecla con flechas cruzadas
)

Por ejemplo:



Ahi esta el archivo en el cual indicamos los datos de cada columna... es decir,
p_id  en el primer registro es 1
apellido en el primer registro es Hansen
nombre en el primer registro es Ola
direccion en el primer registro es Timoteivn 10
ciudad en el primer registro es Sandnes

y asi sucesivamente el segundo registro es el de la segunda linea, el tercer registro el de la tercera linea, por cierto deben tabular cada columna sino no funcionara el archivo :P

entonces ya tenemos nuestro archivo lo nombre personas.txt
vamos a cargarlo para insertar los registros...
antes que nada localizamos nuestra ruta del archivo:

ahora lo cargamos.... e insertamos en nuestra tabla...


como puedes ver se insertaron 3 nuevas filas que son los datos que agregamos...

Para seleccionar los datos utilizamos:

Select * from personas;

que significaria Seleccionar todos los datos desde personas....
Select - Selecciona datos
* - significa todos
from - desde
personas - es la tabla


Como puedes ver se muestran todos los registros, ahora que tenemos todo definamos ¿Que es una base de datos, que es una tabla, que es una columna, que es una fila, que es un registro? Ya despues de todo esto no creo que sea tan dificil para ustedes definirlo si es que siguieron las practicas :D XD

Que es una base de datos
Es una parte donde se almacenan todas las tablas/registros de nuestra aplicacion web.

Que es una tabla
Es una parte donde se almacenan todas las columnas/registros de nuestra aplicacion web.

Que es una fila
La fila es toda una parte de un registro, por ejemplo la primera fila seria:
1    Hansen    Ola    Timoteivn 10    Sandnes
la segunda:
2    Svendson    tove    Borgvn 23    Sandnes
y asi sucesivamente...

Que son los registros
Los registros son cada dato o celda(por ejemplo Hansen), es por eso que muchas veces como esta conformada una base de datos puedes ser vista como en excel tiene sus partes...

La otra forma de insertar datos/registros, puede ser con la siguiente sintaxis:

Insert Into nombre_de_la_tabla (columna1,columna2,culumna3,etc) values (registro1,registro2,registro3,etc);

o tambien:

insert into nombre_de_la_tabla (columna1) values (registro1),(registro2),(registro3),(etc);

o tambien:

insert into nombre_de_la_tabla values (registro1,registro2,etc);

1.-en el primer caso es mas facil se insertan los registros seleccionados en las columnas seleccionadas...
2.-en el segundo caso se insertan los registros en diferentes filas en la columna seleccionada...
3.-en el tercero se insertan los registros  en todas las columnas para esto debe coincidir con el numero de columnas....

Ahora vamos a eliminar las filas o registros para asi poder insertar de nuevo los mismos registros pero de forma diferente....

delete from nombre_de_la_tabla;

en este caso eliminamos todas las filas/registros desde la tabla personas, para poder insertar de otra manera, esta opcion la mostrare mas completo en otra parte de estos minitutos :P

entonces eliminamos todos los registros:

delete from personas;




Como puedes observar eliminamos las filas, y cuando queremos seleccionar las filas/registros ya no hay por que lo hemos eliminados pero la tabla sigue en su forma original :D

asi que insertemos nuestros registros de nuevo con la sintaxis: insert into de arriba :D

insert into personas (p_id,apellido,nombre,direccion,ciudad) values (1,'Hansen','Ola','Timoteivn 10','Sandnes');

con esto insertariamos en la tabla personas en las columnas p_id,apellido,nombre,direccion,ciudad los registros 1,Hansen,Ola,Timoteivn 10,Sandnes siguiendo el orden de las columnas se insertan los registros :D respetando el tipo de datos :P


Como puedes observar solo tenemos un registro esta bien ahora puedo mostrar la otra manera :D

insert into personas values (2,'Svendson','tove','Borgvn 23','Sandnes');


la manera que no les mostre pueden hacerla facilmente con los ejemplos anteriores no creo que haiga dificultades :P ahi tienen la sintaxis :D
Al igual que insertar la ultima fila :D...

Seleccionemos los datos de nuevo :D



Puedes seguir la sintaxis que deje arriba Select * From nombre_de_la_tabla;

Creando una aplicacion basica con PHP y MYSQL

Para terminar esta parte Crearemos una aplicacion web con php y mysql basica que lo que hara sera insertar los datos de un nuevo registro... aunque no se insertaran de manera segura pero todo el fin es para ver lo aprendido :D, por cierto lo de php no lo explicare a fondo por lo que puede visitar: http://www.php.net/


";
		}
	$database="CREATE DATABASE IF NOT EXISTS Registros";
	if(mysqli_query($con,$database)){
		echo "Base de datos creada correctamente
"; }else{ echo "Error al crear la base de datos
"; } $table="CREATE TABLE IF NOT EXISTS `Registros`.`Registros`(`id` int not null auto_increment primary key,`usuario` varchar(20) not null,`email` varchar(50) not null,`password` varchar(50) not null,`r_password` varchar(50) not null)"; if(mysqli_query($con,$table)){ echo "Tabla creada correctamente
"; }else{ echo "Error al crear tabla: ".mysqli_error($con)."
"; } $usuario=mysql_real_escape_string($usuario); $email=mysql_real_escape_string($email); $pass=mysql_real_escape_string($pass); $r_pass=mysql_real_escape_string($r_pass); mysqli_select_db($con,'Registros'); $insert="INSERT INTO Registros (usuario,email,password,r_password) VALUES ('$usuario','$email',md5('$pass'),md5('$r_pass'))"; if(!mysqli_query($con,$insert)){ echo "Ocurrio un error al ingresar los datos: ". mysqli_error($con); }else{ echo "Datos ingresados correctamente
"; } mysqli_close($con); }else{ echo "Debes llenar los datos correctamente"; } } ?> Formulario de registro
usuario:
email:
contraseña:
repite contraseña:

Bueno ahi esta el codigo basicamente lo que hace es insertar los datos, si no estan vacios y si el email es correcto, y las contraseñas iguales entonces inserta los registros quitandoles cualquier XSS o SQLI aunque ya hay formas de Bypassear la funcion mysql_real_scape_string entonces por eso no es tan seguro :P pero bueno me sali del tema xD, si los datos no son correctos envia un mensaje de error y los datos no insertan, las contraseñas son insertadas en md5, bueno todo esto se ve en este minitutoriales por eso que puse esta miniaplicacion, les dejo de tarea estudiarsela (pueden tomar como referencia este minitutorial :D ), si quieren probarla pueden hacerlo en localhost :D....

Este es el final de la primera parte, los espero en la segunda :D

No hay comentarios:

Publicar un comentario