Páginas

domingo, 23 de enero de 2011

MySQL: Lenguaje de Consulta de datos DQL Parte I

Para esta nueva entrada vamos a hablar sobre el lenguaje de consulta de datos, vamos a mostrar varias consultas que podemos aplicar mediante este tipo de lenguaje.

DQL(): Data Query Lenguage o Lenguaje de Consulta de Datos, es el lenguaje que provee el estándar SQL para recuperar o mostrar los datos existentes dentro de nuestras bases de datos, esta conformado por las sentencias SELECT.

SELECT: Como lo indicamos este tipo de sentencias nos permite recuperar los datos de una base de datos, la sintaxis es sencilla.

SELECT campos FROM tabla;

Donde campos son los campos de la tabla que deseemos traer en nuestra consulta separados por coma (,) y tabla son las tablas de las que deseemos extraer los datos.

Cabe destacar que si en los campos se especifica el asterisco (*) se seleccionaran todos los datos de la tabla indicada, ejemplo:

SELECT * FROM tabla;


Fácil no??

Hasta acá hemos visto una sentencia SELECT simple donde traemos datos de una tabla especifica.


Dentro de las consultas SELECT tenemos cláusulas para colocar condiciones en nuestras consultas de maneras que podamos obtener los datos en forma que deseemos veamos cuales son:

a)ORDER BY: Esta cláusula nos sirve para indicar el orden en que se mostraran los datos obtenidos de nuestra consulta, la sintaxis es la siguiente:

SELECT campos FROM tabla ORDER BY campos_orden [DESC/ASC];

Donde campos_orden es por el campo que estará ordenado nuestro resultado, dando la prioridad a los primeros campos y separando cada uno por coma, [DESC/ASC] es si los queremos de forma ascendente o descendente, si indicamos el campo y no indicamos [DESC/ASC], el lo toma como si fuera ordenar ascendente por defecto,  veamos con un ejemplo:

Deseamos traer los datos personales de los trabajadores ordenados por el apellido:

SELECT nombre,apellido FROM empleado ORDER BY apellido,nombre;

En esta consulta Automáticamente al terminar de ordenar por apellido empieza a ordenar por el nombre por ejemplo si existen dos cuyo apellido sea PEREZ entonces ordena por el nombre

------------------------------
nombre       |  apellido|
-----------------------------
| ALBERTO | PEREZ  |
|PEDRO      | PEREZ   |
-------------------------------------

Aunque los dos tiene el mismo apellido el orden se da por el segundo campo indicado en nuestra consulta, como vimos no indicamos el DESC debido a que no es necesario cuando ordenamos de esta manera aunque hay autores que recomiendan usarlo.

b)WHERE: Esta cláusula nos permite ponerle condiciones a nuestras consultas, de manera de traer solo los campos deseados, su sintaxis es la siguiente:

SELECT campos FROM tabla WHERE campo1='condicion';

Donde campo1 es uno de los campos que estamos colocando como condicional para que nuestra consulta traiga los datos que deseamos, para hacer nuestras condiciones debemos tomar en cuenta los operadores de MySQL, veamos cuales son:

1.- = Signo igual: Lo usuamos en nuestras condiciones para indicar que traiga el dato mientras el valor en el campo sea igual a un valor dado ejemplo:

SELECT nombre FROM empleado WHERE apellido='perez';

El resultado de esta consulta serán todos los registros de nuestra tabla cuyo apellido sea PEREZ.

2.- <> Diferente: Este operador lo utilizamos para obtener los resultados mientras el valor en el campo sea diferente al valor dado, ejemplo:

SELECT nombre FROM empleado WHERE apellido<>'perez';

En este caso el resultado sera contrario al ejemplo anterior ya que solo obtendremos los registros que el apellido sea diferente de PEREZ.

3. > Mayor que: Este operador como su nombre lo indica lo utilizamos para traer datos que el valor del campo indicado sea mayor al campo dado ejemplo:

SELECT nombre,edad FROM empleado WHERE edad>17;

En este caso obtendremos a los empleados que sean mayor de edad, comparando que su edad sea mayor a 18 años.


4.- >= Mayor Igual que: Con este operador indicamos a nuestra condición que el resultado debe de ser mayor o igual a el valor establecido ejemplo

SELECT nombre,edad FROM empleado WHERE edad>=18;

En este caso también obtendríamos los empleados mayores de edad, pero como vemos el valor de la condición es algo diferente.

5.- < Menor que: Con este operador obtenemos los datos que son menores a un valor establecido, ejemplo:

SELECT nombre, edad FROM empleado WHERE edad<18;

Siguiendo con los ejemplo de las edades en este caso obtendríamos los empleados menores de edad.

6.- <= Menor Igual que: Es el inverso a Mayor igual que (>=), es decir mediante de este operador obtenemos los menores o iguales a cierta valor, ejemplo:

SELECT nombre,edad FROM empleado WHERE edad<=17;

7.-LIKE: Indicando este operador indicamos una coincidencia entre el campo y el valor indicado, para esto utilizamos los comodines (%), un pequeño ejemplo de esta sentencia:

SELECT * FROM table WHERE campo LIKE '%carlos%';

De esta manera obtendremos todos los campos donde en campo exista la palabra carlos por ejemplo:

juan carlos
carlos luis
jose carlos perez.

Este operador podemos utilizarlo en varios casos que presentamos a continuacion:

El comodin porcentaje (%): Lo utilizamos para indicar en el patron coincidencias de varios carácteres los posibles casos los mostramos a continuación:

1.- LIKE 'buscar%' : Del resultado de esta condición obtenemos todos los campos donde dentro del campo  "campo" exista la palabra buscar, seguido de cualquier cadena incluyendo también la palabra buscar, posibles resultados:

buscar.
buscar todo.
buscar_algo.

Entre otros posibles resultados.

2.-LIKE '%buscar': El resultado de esta condición es todos los campos indicados que terminen con la palabra buscar incluyendo también la misma palabra, por ejemplo:

buscar
vamos a buscar.

3.- LIKE '%buscar%': Con esta consulta obtenemos resultados que tengan una coincidencia con buscar bien sea al principio, entre cadenas o al final, incluyendo la misma palabra sola por ejemplo:

buscar.
buscar algo.
anda a buscar.
vamos a buscar algo.

Dentro del operador LIKE tambien tenemos otro comodin que mostraremos a continuación:


El comodin underscore (_) : Lo utilizamos en el operador LIKE para indicar que buscara en el patron las coincidencias con un solo carácter, a continuación los posibles casos.

1.-LIKE 'busca_': Los resultados solo seran los que contengan la palabra busca seguido de cualquier carácter, sin incluir la palabra busca solo por ejemplo:

buscar.
buscas

2.- LIKE '_ana': Los resultados seran los que coincidan con el patrón con cualquier primera letra, por ejemplo:

lana.
cana.

3.- LIKE 'ca_a': Con esta condición obtendremos los datos que coincidan con el patrón, siendo la tercera letra variable por ejemplo:

cama.
cana.
caza.
casa.

El operador LIKE es muy útil para trabajar nuestras consultas por medio de patrones y busquedas donde no conocemos completamente el dato.

Continuando con los operadores el siguiente es:

7.- El operador BETWEEN: Utilizado para indicar que el valor del campo este entre dos valores posibles, muy utilizado al momento de comparar  fechas, la sintaxis es la siguiente:

SELECT campo FROM tabla WHERE campo BETWEEN 'valor1' AND 'valor2';


Veamos un ejemplo:

SELECT nombre,fecha_ingreso FROMempleado WHERE fecha_ingreso BETWEEN '2010-01-10' AND '2010-01-20';

El resultado sera el nombre de los empleados y la fecha de ingreso que ingresaron entre el 10 de enero del 2010 y el 20 de enero del 2010, sencillo no??

8.-Operador AND: Lo utilizamos para unir dos o más condiciones, para que exista una respuesta se deben cumplir cada una de estas, la sintaxis es la siguiente:

SELECT campo FROM tabla WHERE campo1='condicion1' AND campo2='condicion2';

Si alguna de las condiciones no existe no retornara ningun valor esta consulta.

9.-Operador OR: Lo utilizamos para unir dos o mas condiciones, la diferencia con el AND es que para este caso al cumplirse alguna de las condiciones obtendremos un resultado, la sintaxis es la siguiente:

SELECT campo FROM tabla WHERE campo1='condicion1' OR campo2='condicion2';

Al existir coincidencia entre alguna de las condiciones e incluso ambas, la consulta retornara los resultados.

10.-Operador IN: Funciona al igual que el operador OR, pero indicando solo un campo, su sintaxis es la siguiente:

SELECT campo FROM tabla WHERE campo IN('valor1','valor2');

Seria equivalente a lo siguiente

SELECT campo FROM tabla WHERE campo='valor1' OR campo='valor2';


Estos son los operadores mas usados al momento de trabajar con MySQL, podemos obtener mas información sobre ellos en el manual oficial, cualquier otro que no se halla tomado en cuentan no duden en indicarlo.


Por esta entrada es todo, en la próxima continuaremos hablando sobre el Lenguaje de consulta de datos ya que es un tema bastante extenso, cualquier critica o sugerencia es aceptada, saludos

domingo, 16 de enero de 2011

UPLOAD de Archivos Con PHP

Retomando el PHP en esta ocasión compartiremos una clase para subir archivos a nuestro sitio Web, para hacer esta operación utilizaremos la función copy, además trabajaremos con un formulario con un campos tipo file y el enctype "multipart/form-data" para trabajar con la variable $_FILE de PHP,  vamos a la acción.


Un UPLOAD de archivos consiste en subir un archivo de nuestra maquina a un Sitio Web alojado en un servidor, como logramos esto?? moviendo el archivo desde nuestra maquina bien sea mediante la funcion copy o move_uploaded_file(), en lo personal me gusta mas trabajar con la funcion copy, para ello seguiremos una serie de pasos que presentamos a continuación:

Lo primero que tenemos que hacer es crear un formulario


Si nos fijamos nuestro formulario además del método de envió, el nombre y la acción tiene un atributo mas que es enctype donde indicamos el tipo de datos que vamos a enviar por defecto este es application/x-www-form-urlencoded, pero cuando necesitamos enviar archivos necesitamos especificar "multipart/form-data" de manera que nuestro servidor entienda que se han enviado archivos mediante este formulario y podemos utilizar $_FILE


Una vez explicado que para poder subir archivos a nuestro servidor debemos usar este tipo de enctype veamos ahora la clase para subirlos y su implementación

/*

clase para subir archivos al servidor

autor: Carlos Belisario

*/
class upload
{
 #atributo para tener los archivos
 private $_file; 
 #atributo para obtener el peso maximo
 private $_maxSize;
 #atributo para obtener el tipo de archivos a subir
 private $_type;
 #atributo para la ruta donde sera subido el archivo
 private $_ruta;
 #iniciamos toda la magia pasamos como parametro el dato $_FILE['campo'],$destino
 public function __construct($file = NULL,$destino = NULL, $validate = array())
 {   
  if(count($file) === 0){
   echo "debe indicar el archivo que desea subir";
  }    
  else{
   $this->_file = $file;
   if(!empty($destino))
    $this->_ruta = $destino.'/'.$file['name'];      
   else
    $this->_ruta = $file['name'];   
   if(is_array($validate)){
    if(count($validate) > 0){
     if(array_key_exists('maximo',$validate))
      $this->_maxSize = $validate['maximo'];
     if(array_key_exists('tipo',$validate)){
      if(is_array($validate['tipo']))      
       $this->_type = $validate['tipo'];
      else
       echo "debe indicar los tipo de archivo en formato array";
     }
     $return = $this->validate();        
    }
   }
   else{
    $return = $this->uploadFile();   
   } 
   echo $return;     
  }
 }
 private function validate()
 {   
  if(file_exists($this->_ruta))
   $return = "el archivo ya existe en el servidor";  
  if(!empty($this->_maxSize)){    
   if($this->_maxSize < $this->_file['size'])    
    $return = "el tamaño del archivo es superior al soportado";
  }
  if(count($this->_type) > 0){  
   $tipo = explode('/',$this->_file['type']);
   if(!in_array($tipo[1],$this->_type))    
    $return = "no esta en el arreglo";         
  }  
  if(empty($return)){      
   $return = $this->uploadFile();   
  } 
  return $return;
 }
 private function uploadFile()
 {
  if(@copy($this->_file['tmp_name'],$this->_ruta))
   return "el archivo fue subido correctamente";  
  else
   return "ha ocurrido un error al subir el archivo ".$this->_file['name']."
 puede que la ruta indicada ".$this->_ruta." no sea correcta";  
 }
}


Si nos fijamos la forma de utilizar esta clase es indicando los parámetros al constructor de nuestras clases y automáticamente según los parámetros que se indiquen el automáticamente subirá el archivo los parámetros que tenemos son los siguientes:

$file: Este parámetro indicamos el valor recibido del formulario por medio de $_FILE de manera que tengamos disponibles todos los índices de este arreglo en nuestra clase.

$destino: En este parámetro indicamos la carpeta destino de nuestro archivo es decir donde quedaran guardados los archivos que subamos por nuestra clase. Si este vacio automáticamente lo guarda en el mismo nivel que esta el archivo en el árbol de carpetas de nuestro sitio.

$validate: Es un arreglo asociativo donde podemos indicar el tamaño máximo y el tipo de archivo que deseamos que sean subidos a nuestro servidor, de manera que si queremos solo JPG lo indicamos este array asociativo está compuesto de la siguiente manera

$validate = array('maximo'=>cantidad_maxima_en_byte,'tipo'=>array('tipoarchivo1',tipoarchivo2)); 


El índice máximo indica el tamaño máximo del archivo que deseamos subir, el índice tipo indicamos los tipos de archivos soportados.

Fácil no??

Pues entonces veamos la implementación

subir.php


require_once(upload.php);
$archivo = $_FILE['campo_archivo'];
$destino = 'Imagenes';
$validate = array('maximo'=>1048576,'tipo'=>array('jpg','png',gif));
$upload = new upload($archivo,$destino,$validate); 

con tan solo indicar los parametros al constructor de nuestra clase podremos subir nuestro archivo al servidor, espero que les sea util, cualquier sugerencia o mejora por favor indicarla y asi como siempre digo aprendemos todos en el caminos hasta una proxima entrada

viernes, 14 de enero de 2011

Introduccion a MySQL DCL

Muy buen día tengan todos, en esta nueva entrada hablaremos del Lenguaje de Control de Datos ( DCL DATA CONTROL LENGUAGE) en MySQL, veremos la gestion de los usuarios los permisos que se otorgan a cada uno de ellos, entre algunas cosas.

Lenguaje de Control de Datos (DCL): Por medio de este lenguaje podemos controlar el acceso a la información de nuestra Base de Datos, proporcionando la seguridad de la misma, dandole integridad a nuestros datos.

Caracteristicas:
a) Garantiza la seguridad  de nuestros datos.


b) Previene el acceso ilegal a nuestros datos.

c)Monitorea el acceso a nuestros datos.

d)Especifica a cada usuario lo que puede realizar en nuestra base de datos.

Como podemos notar por medio de este lenguaje ofrecemos seguridad a la administración de nuestras base de datos, este lenguaje en MySQL esta conformado por dos comandos cuya sintaxis mostraremos a continuación

1.- GRANT: Se utiliza para darle permisos a un usuario en nuestra base de datos la sintaxis es la siguiente.

GRANT privilegios ON basededatos.tabla TO usuario IDENTIFIED BY 'contraseña del usuario';

Donde los privilegios pueden ser:

Privilegio Significado
ALL [PRIVILEGES] Da todos los permisos simples excepto GRANT OPTION
ALTER Permite el uso de ALTER TABLE
ALTER ROUTINE Modifica o borra rutinas almacenadas
CREATE Permite el uso de CREATE TABLE
CREATE ROUTINE Crea rutinas almacenadas
CREATE TEMPORARY TABLES Permite el uso de CREATE TEMPORARY TABLE

CREATE USER Permite el uso de CREATE USER, DROP
USER
, RENAME USER, y
REVOKE ALL PRIVILEGES.
CREATE VIEW Permite el uso de CREATE VIEW
DELETE Permite el uso de DELETE
DROP Permite el uso de DROP TABLE
EXECUTE Permite al usuario ejecutar rutinas almacenadas
FILE Permite el uso de SELECT ... INTO OUTFILE y
LOAD DATA INFILE

INDEX Permite el uso de CREATE INDEX y DROP
INDEX
INSERT Permite el uso de INSERT

LOCK TABLES Permite el uso de LOCK TABLES en tablas para las que
tenga el permiso SELECT
PROCESS Permite el uso de SHOW FULL PROCESSLIST

REFERENCES No implementado
RELOAD Permite el uso de FLUSH
REPLICATION CLIENT Permite al usuario preguntar dónde están los servidores maestro o
esclavo
REPLICATION SLAVE Necesario para los esclavos de replicación (para leer eventos del log
binario desde el maestro)
SELECT Permite el uso de SELECT

SHOW DATABASES
SHOW DATABASES muestra todas las bases de datos
SHOW VIEW Permite el uso de SHOW CREATE VIEW

SHUTDOWN Permite el uso de mysqladmin shutdown
SUPER Permite el uso de comandos CHANGE MASTER,
KILL, PURGE MASTER
LOGS
, and SET GLOBAL , el
comando mysqladmin debug le permite
conectar (una vez) incluso si se llega a
max_connections

UPDATE Permite el uso de UPDATE
USAGE Sinónimo de “no privileges
GRANT OPTION Permite dar permisos
Fuente: manual de MySQL

Además de los privilegios vemos que debemos indicar la base de datos sobre la cual se le otorgan los privilegios al usuario, si se coloca el * el cual es el selector universal se indica que sobre todas, tendremos varios casos:

a)El asterisco punto asterisco solo: Indicaríamos que el usuario tiene el privilegio indicado sobre todas las tablas y todas las base de datos. Ejemplo:

GRANT ALL PRIVILEGES ON *.* TO usuario IDENTIFIED BY 'contraseña';

b)Nombre de la base de datos seguido de punto(.) asterisco (*): Indicamos todas las tablas de esa base de datos.

GRANT ALL PRIVILEGES ON base_datos.* TO usuario IDENTIFIED BY 'contraseña';

c)Nombre de la base de datos seguido de punto(.) y nombre de la tabla: Indicamos a cual tabla en especifica se le darán los privilegios indicados.

GRANT ALL PRIVILEGES ON base_datos.tabla TO usuario IDENTIFIED BY 'contraseña';

Como se puede ver con el GRANT otorgamos privilegios a los usuarios desde nuestro usuario administrador ROOT de manera que solo tengan acceso a lo que el administrador del sistema indique.

2.-REVOKE: Es utilizado para quitarle o revocar los privilegios de un usuario en nuestras base de datos, la sintaxis es la siguiente:

REVOKE privilegios ON basedatos FROM usuario;

Donde los privilegios son igual que los establecidos en la tabla anterior, y la base de datos igualmente se le indica de la manera que se indico con el GRANT.

Como podemos observar el lenguaje DCL es importante en la Administración de nuestras base de datos ya que nos ayuda a mantenerlas seguras y tener control total sobre lo que los usuarios pueden o no hacer dentro de ella. Espero que el artículo sea de su agrado cualquier información extra pueden buscar como siempre indico en el manual de MySQL, tambien si existe sugerencias o algo que me alla faltado solo indiquenlo así aprendemos todos en el camino, me despido hasta una próxima entrada saludos


lunes, 10 de enero de 2011

Introducción a MySQL INSERT,DELETE,UPDATE(DML)

Buenas para esta nueva entrada hablaremos del Lenguaje de Manipulación de Datos(DML), veremos las sentencias por la que está formado y lo que haremos con cada una de ellas.

Este tutorial supone que ya conoce el Lenguaje de Definición de Datos (DDL), de no conocerlo vea el artículo anterior donde explicamos las sentencias que conforman este lenguaje

Lenguaje de Manipulación de Datos(DML)

 
Está conformado por las sentencias que nos permiten Ingresar, Actualizar y Borrar datos a una base de datos, de manera que podamos Manipular cada uno de ellos.

Sentencias que conforman el DML

1.- INSERT: Por medio de esta sentencia podemos ingresar los datos en nuestras tablas. La sintaxis de esta sentencia es la siguiente:

INSERT INTO nombre_tabla (campo1,campo2) VALUES ('valor1','valor2');

Fácil no?? si deseamos insertar todos los datos dentro de nuestra tabla no es necesario llenar todos los campos sino que se ejecuta la sentencia de la siguiente manera:

INSERT INTO nombre_tabla VALUES('valor1','valor2');

Personalmente uso la primera opción ya que estoy viendo en si en donde estoy insertando cada valor, pero como cada administrador puede realizar la consulta como lo desee ahí les dejo esa opción.

2.-REPLACE:  Como su nombre lo indica sirve para remplazar, la sintaxis es igual que la de un INSERT, la diferencia es que si existe una clave bien sea primaria o única esta reemplazara el valor del registro quedando olvidado el anterior, si no existen claves dentro de la tabla el uso de esta sentencia no es útil ya que se comportaría como un INSERT.

3.-UPDATE: Por medio de esta sentencia podemos actualizar nuestros registros que tenemos dentro de nuestra tabla, la sintaxis es la siguiente:

UPDATE TABLE nombre_tabla SET campo1 = 'valor',campo2 = 'valor2' WHERE campo1 = 'valor';

Si nos fijamos en la sintaxis del UPDATE es simple, sencillamente indicamos la tabla que deseamos actualizar, cuales son los valores y luego establecemos una condición que indica cual registro actualizar, ojo hay que estar muy atentos al momento de realizar un UPDATE ya que de no establecer esta condición que indica cual registro actualizar se actualizaran todos los registros de nuestra tabla con los valores establecidos.

4.- DELETE: Este tipo de sentencia nos sirve para borrar registros de una tabla, su sintaxis es la siguiente:

DELETE FROM nombre_tabla WHERE campo = 'valor';

La sentencia del DELETE borra el campo especificado en la condición, al igual que como se indico con el UPDATE hay que tener en cuenta que si no se indica una condición se borraran todos los registros de la tabla.

5.- TRUNCATE: Nos sirve para borrar todos los campos de una tabla, tiene algunas diferencias básicas con el DELETE, una de ellas que esta sentencia reinicia los campos auto_incrementos, la sentencia TRUNCATE borra todos los campos de la tabla, sin establecérsele ninguna condición, la sintaxis es la siguiente:

TRUNCATE TABLE nombre_tabla;

Como se puede ver en este tipo de sentencia no existe condición ya que es para el borrado completo de una tabla, yo normalmente la uso para reiniciar tablas cuando implemento sistemas.

Estas son las sentencias de manipulación de datos, si se paso alguna por alto pueden indicarlo, un saludo como indico siempre el manual de MySQL es nuestro amigo en el podemos acceder a información oficial de este lengiaje, saludos espero que este tercer artículo de este pequeño tutorial introductorio a MySQL les sea útil, saludos hasta la proxima entrada

viernes, 7 de enero de 2011

Introducción a MySQL: CREATE,ALTER,DROP (DDL)


Buenas Para este segundo artículo de introducción al trabajo con MySQL, hablaremos del lenguaje de definición de datos, mostraremos su aplicación en MySQL, también  veremos las consultas que componen este lenguaje.
El Lenguaje de Definición de Datos (DDL):
Este lenguaje nos permite manejar comandos para definir los objetos de nuestras bases de datos.

Sentencias que Maneja el  DDL

El lenguaje de definición de datos, maneja todas las sentencias que usamos para indicar los datos que vamos a manejar dentro de nuestra base de datos, estos datos serán almacenados en las tablas de nuestra base de datos, las sentencias que utiliza este lenguaje son:
a) CREATE TABLE: Esta sentencia la usamos para como su nombre lo indica la creación de nuestras tablas. La sintaxis de esta sentencia es sencilla  simplemente se coloca la palabra CREATE TABLE seguido del nombre de la tabla luego entre paréntesis los nombres de los campos separados por coma, al lado de cada campo se indica el tipo de dato que este va a contener. Un ejemplo:

CREATE TABLE nombre_tabla(campo1 INT(10),campo2 VARCHAR(20));
Fácil verdad?? Con esta sentencia podemos ir creando nuestras tablas, pero en la definición de la sintaxis indicábamos que se debía de establecer los tipos de datos de cada campo pero cuáles son??
Tipos de Datos
1.- Datos Numéricos: Como su nombre lo indica representan a los campos que contendrán valores numéricos como por ejemplo la edad, precios, etc. y están compuestos por:

1.1.-Enteros:
- TINYINT: es un entero con o sin signo, los valores aceptados son desde 0 a 255 cuando no tiene signo y -127 a 255 cuando se le indica un signo.
-BIT :  Como su nombre lo indica almacena valores que contienen un bit.
- BOOL: En este tipo de campo solo se permiten cero (0) ó uno (1). En algunas versiones se toma como TINYINT(1).
-SMALLINT: En este tipo de datos se representa a un entero corto o pequeño, la capacidad de almacenamiento es de 65535.
- MEDIUMINT: En este tipo de datos se representa a un entero, la diferencia con el SMALLIN es la capacidad ya que este tipo de campo abarca una mayor cantidad de caracteres para guardar, la cual en este caso es de 8388607.
- INTEGER o INT: Representa a un número entero, es más utilizado normalmente para hacer referencia a este tipo de datos, su capacidad de almacenamiento es de 4294967295.
-BIGINT: Es utilizado cuando la capacidad del INT es poca para representar a un entero, su capacidad de almacenamiento es de 18446744073709551615.
1.2 Decimales o Punto Flotante:
-DECIMAL: Como su nombre lo indica permite números decimales dentro de sus valores, la sintaxis del decimal es DECIMAL(M,D), donde M tiene un rango de 1 a 64 y D tiene un rango de 0 a 30, aunque en la declaración se utiliza la coma(,) para separar el entero del decimal cuando se trabaja con los números el punto es el separador del entero y decimal ejemplo: 100.50.
-FLOAT: Es el que se utiliza normalmente para el trabajo con números decimales, ya que este permite una especificación opcional de la precisión, la escala de este tipo de datos va desde 0 a 23, que resulta en una precisión de 4 Bytes.
-DOUBLE: Al igual que el FLOAT trabaja con decimales, el alcance de este es el doble del FLOAT, este tipo de datos tiene una precisión de 8 Bytes, el doble de float y va desde el 24 a 53.
-REAL: Al igual que DOUBLE es tomado con dato de doble precisión es decir de 8 Bytes.
2.- Datos de Fecha y Hora: Como su nombre lo indica son para almacenar datos de tipo temporales (fecha y hora), como por ejemplo la fecha de nacimiento, el horario de una clase, y está compuesto por:
-DATE: En este tipo de datos almacenamos las fechas, el formato que tiene MySQL para guardar este tipo de datos es año-mes-dia (0000-00-00).
-TIME: En este tipo de dato almacenamos las horas que necesitemos en nuestra base de datos el formato es hora:minutos:segundos (00:00:00), normalmente guardado en hora militar, si se desea convertir para mostrarse en AM y PM se puede hacer uso de la función DATE_FORMAT.
-DATETIME: Como su nombre lo indica es una combinación de los dos tipo de datos anteriores, el formato es el siguiente año-mes-dia hora:minuto:segundo (0000-00-00 00:00:00).
-TIMESTAMP: Se muestra en el mismo formato que los campos de tipo DATETIME.
-YEAR: Como su nombre lo indica se utiliza para almacenar años, por defecto la cantidad de dígitos es de 4 aunque puede establecerse que se utilicen dos si se desea almacenar los años en este formato.
3.-Datos de Tipo String o Cadenas de Texto: Este tipo lo de datos lo utilizamos para almacenar las cadenas de texto que necesitemos dentro de nuestra base de datos, como por ejemplo un nombre, apellido etc., dentro de de este tipo de datos tenemos:
-CHAR: Almacena una cadena de caracteres indicando al lado la cantidad que contendrá (CHAR(10) indicaría una cadena de 10 carácteres), la cantidad de carácteres que se puede almacenar en un campo de este tipo va desde 0 hasta 255. 
-VARCHAR: Al igual que CHAR almacenamos cadenas de caracteres, la cantidad se especifica al lado (VARCHAR(10)  indicaría una cadena de 10 carácteres), y se puede almacenar una cantidad de caracteres de 0 a 255.
Pero entonces cual es la diferencia entre CHAR y VARCHAR??
 La diferencia radica en que las cadenas de tipo CHAR cuando guardas un dato rellena con espacios en blanco a la derecha hasta completar la capacidad de la columna y cuando se traen en una consulta se borran, en cambio las cadenas de tipo VARCHAR guardan solo la cantidad de caracteres que se indica en nuestra cadena, acá una tabla comparativa en el tamaño de almacenamiento tomada del manual de MySQL:


Valor
CHAR(4) Almacenamiento necesario VARCHAR(4) Almacenamiento necesario
'' ' ' 4 bytes '' 1 byte
'ab' 'ab ' 4 bytes 'ab' 3 bytes
'abcd' 'abcd' 4 bytes 'abcd' 5 bytes
'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes


-BLOB:  En este tipo de dato se guarda información binaria, normalmente se utiliza para guardar imágenes, sonidos, entre otros, dentro de este campo existen los TINYBLOB,MEDIUMBLOB,LONGBLOB, la diferencia es la capacidad de almacenamiento entre ellos.

Existen otros tipos de datos dentro de MySQL, solo se hablo de los más conocidos y utilizados, para más información el manual de MySQL es nuestro amigo.

Campos Claves en MySQL

Los campos claves son campos que indicamos para hacer más fáciles nuestras búsquedas ya que se crea una indexación de nuestros datos, dentro de este tipo de campo tenemos:

1.-PRIMARY KEY: Como su nombre lo indica son claves primarias, en palabras sencillas lo que quiere decir esto es que en la indexación de nuestros datos MySQL le da prioridad a este tipo de clave seguido de las claves únicas. Las claves primarias no permiten que haya datos duplicados dentro de este tipo de campo.

2.-UNIQUE: Este tipo de clave como su nombre lo indica no permite que exista duplicidad de datos.

3.-FOREING KEY: Las claves foráneas son aquellas que hacen referencia a la clave primaria de otra tabla, se utilizan para crear relaciones entre ellas, este tipo de clave solo se implementan en MySQL para el motor de almacenamiento InnoDB, se habla de que MyISAM posteriormente soportara este tipo de claves.

Ya conocemos las claves ahora como las implementamos en la creación de nuestras tablas??. La sintaxis es la siguiente:

CREATE TABLE personas (id INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL, nombre VARCHAR(40) NOT NULL,cedula varchar(20) UNIQUE NOT NULL);

La sentencia que acabamos de colocar crea una tabla llamada personas que contendrá el nombre y la cedula además de un campo auto-incremental que es la clave primaria de esta tabla y una clave única que es la cedula, de manera que no haya repetición de esta, sencillo no??.

Motores de Almacenamiento de MySQL

Cuando creamos las tablas de nuestra base de datos MySQL tiene diferentes tipos de almacenamiento donde podemos los cuales nos permiten realizar acciones dependiendo de cuál sea nuestra necesidad, por defecto las tablas de MySQL tienen el motor de almacenamiento en MyISAM.

A continuación veremos un resumen de los motores de almacenamiento de MySQL:

1.- ISAM: Era el motor por defecto de MySQL en versiones anteriores, maneja tablas no transaccionales.

Características:
a) El máximo tamaño de una tabla es 4GB.
b) Sólo pueden ser definidos 16 índices por tabla.
c) Claves con longitud máxima de 256 bytes.
d) No puede usarse sentencias de respaldo de tablas y restauración de tablas.

Este motor de almacenamiento se considera obsoleto y es poco recomendable su uso, fue reemplazado por el motor MyISAM.

2.- MyISAM: Es el formato por defecto de MySQL, está basado en el código de ISAM, pero tiene otras características que llevaron a  ser su reemplazo.

Características:
a) Todos los datos son almacenados en formato complemento a
dos y el formato de la IEEE de punto flotante.
b) Manejo de tablas no-transaccionales.
c) El máximo número de índice por tablas son 64. El máximo
número de columnas por índices es 16.
d) MyISAM automáticamente actualiza las columnas definidas
como AUTO_INCREMENTO en operaciones NSERT/UPDATE,
incrementado la velocidad en al menos 10%.

3.-INNODB: Este motor de almacenamiento permite a MySQL realizar transacciones (propiedades ACID).

Características:
a) Soporta la definición de claves foráneas (FOREIGN KEY).
b) En una sentencia SELECT puedan mezclarse diferentes tipos de
tablas.
c) Integrada completamente con el servidor MySQL, InnoDB mantiene
su propio buffer pool para mantener datos e índices en memoria
principal
d)Manejo de usuarios concurrentes.
e)Si una actualización falla todos los cambios son revertidos (en un
ambiente no transaccional todos los cambios hechos son
permanentes).
f)Los motores transaccionales proporcionan un mejor desempeño
sobre tablas que tienen muchas actualizaciones concurrentes.
Existen otros motores de almacenamiento en MySQL se nombraron los más utilizados, en lo personal utilizo el motor de almacenamiento InnoDB ya que soporta transacciones y por las características ya expuestas.

Ya conocemos los motores de almacenamiento de MySQL, entonces como hacemos una tabla indicando el motor de nuestra preferencia??.

Como se indico por defecto el motor de almacenamiento de MySQL es MyISAM, si no especificamos el motor a utilizar este tomara este motor automáticamente, pero si deseamos crear una tabla de tipo InnoDB como lo haríamos??

Tomando el ejemplo anterior de personas tendríamos la siguiente sentencia:

CREATE TABLE personas (id INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL, nombre VARCHAR(40) NOT NULL,cedula varchar(20) UNIQUE NOT NULL) ENGINE = InnoDB;

Como podemos observar para indicar el motor de almacenamiento utilizamos la palabra ENGINE, también podemos indicarlo mediante la palabra TYPE¸ al igual que ENGINE solo debemos de indicar el motor de la base de datos a utilizar.

Creación de Claves Foráneas en MySQL

Como se indico en los motores de almacenamiento el motor InnoDB es el que soporta claves foráneas, aunque se pueden crear en todos los motores solo tiene sentido para este tipo de almacenamiento, por lo que en la creación de tablas que utilicen este tipo de clave debemos crearlas InnoDB, veamos un ejemplo de la creación de una clave foránea:

Tabla persona:
CREATE TABLE personas (id INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL, nombre VARCHAR(40) NOT NULL,cedula varchar(20) UNIQUE NOT NULL) ENGINE = INNODB;

Tabla factures:
CREATE TABLE facturas( id INT(11) AUTO_INCREMENT NOT NULL,precio FLOAT NOT NULL,descripcion VARCHAR(40) NOT NULL,persona_id INT(11) NOT NULL,PRIMARY KEY(id), CONSTRAINT claveforanea FOREIGN KEY(clave_foranea) REFERENCES personas(id)) ENGINE = INNODB;       
                                                                               
Como podemos notar la primera tabla es la misma que habíamos trabajado, creamos una tabla profesión que va a estar relacionada con otra llamada factura, la relación la establece el id de personas, entonces que hicimos creamos la clave foránea la cual le colocamos el nombre claveforanea (ahí puede ser cualquier nombre) en el campo de la tabla facturas llamado persona_id y dijimos a cual tabla hace referencia es decir al campo id de personas sencillo no?? Además le indicamos que borrara en cascada es decir si se borra un dato de personas se borra todo lo que haya en factura que pertenezca a esa persona, veamos un ejemplo:

Llenamos la tabla personas:
INSERT INTO personas (nombre,cedula) VALUES ('carlos',’123456’);
INSERT INTO personas (nombre,cedula) VALUES (‘juan','987456');
INSERT INTO personas (nombre,cedula) VALUES (‘pedro','456789');

Llenemos la tabla factura:
INSERT INTO facturas (precio,descripcion,persona_id) VALUES ('100','articulos de oficina',1);
INSERT INTO facturas (precio,descripcion,persona_id) VALUES ('200','juguetes',2);
INSERT INTO facturas (precio,descripcion,persona_id) VALUES ('100','papeleria,3);

Con estas consultas llenamos las tablas, al momento de borrar un dato de persona se borrara automáticamente en factura ejemplo

DELETE FROM personas WHERE id = 1;

Automáticamente se borraran todas las facturas que tenía esta persona.
Las sentencias de inserción, actualización y borrado que se tocaron en este tema se explicaran cuando se hable del lenguaje de manipulación de datos (DML). La creación de otros objetos como las vistas e índices se verá más adelante cuando se haya trabajado con el lenguaje DML.

Con el comando CREATE también podemos crear bases de datos, asi como vistas e índices que se nombraron anteriormente, para crear una base de datos sencillamente se utiliza la siguiente sentencia:

CREATE DATABASE nombre_base_de_datos;

Fácil no?? Y para indicar la base de datos a utilizar sencillamente usamos el comando USE seguido del nombre de la base de datos ejemplo:

CREATE DATABASE test;
USE TEST;

Luego procedemos a crear nuestras tablas.

b) ALTER TABLE: Esta sentencia se utiliza para modificar la estructura de una tabla ya existente, mediante de esta podemos añadir, borrar y modificar los campos de nuestra tabla. Veamos cómo podemos hacerlo:

-Renombrar Tabla: Se utiliza para cambiar el nombre a una tabla la sintaxis es:

ALTER TABLE nombre_actual RENAME TO nuevo_nombre;

-Añadir un campo (ADD COLUMN): Como su nombre lo indica nos permite añadir un campo a una tabla que ya habíamos creado, veamos un ejemplo de su uso:

ALTER TABLE personas ADD COLUMN edad INT(3) NOT NULL;

Como podemos observar lo que se hizo fue indicar la tabla a modificar se indico el comando ADD COLUMN el nombre del campo y el tipo de dato tal y cual como se hace en CREATE TABLE, fácil no?? Si deseamos darle una ubicación especifica antes de otro campo de nuestra tabla sencillamente indicaríamos 

ALTER TABLE tabla ADD COLUMN campo VARCHAR( 20 ) NOT NULL FIRST;

Con esta sentencia sencillamente indicaríamos que el campo nuevo estará al comienzo de una tabla.

ALTER TABLE tabla ADD COLUMN campo INT(20) NOT NULL AFTER `campo_anterior_al_nuevo`;

Con esta sentencia indicaríamos que el campo nuevo estará después del campo que se especifique en campo_anterior_al_nuevo.
Fácil no??

-Eliminar un Campo (DROP): Con esta sentencia sencillamente eliminamos un campo de una tabla, veamos un ejemplo:

ALTER TABLE tabla DROP campo_a_borrar;

-Modificar un Campo (CHANGE):Con esta sentencia modificamos un campo de una tabla la sintaxis es la siguiente 

ALTER TABLE tabla CHANGE campo_actual campo_nuevo INT(2) NOT NULL;

Si nos fijamos la sentencia nos pide un campo actual que es el nombre del campo, campo nuevo acá se coloca el nombre nuevo del campo, si no se desea cambiar el nombre se coloca el mismo que en campo actual, luego sencillamente se indica el tipo de dato como se indico en la sentencia CREATE TABLE.

-Agregar KEY: Con esta sentencia se añade una clave a una tabla. Su sintaxis es sencilla:

PRIMARY KEY:
ALTER TABLE tabla ADD PRIMARY KEY(campo_que_sera_clave_primaria);

UNIQUE:
ALTER TABLE tabla ADD UNIQUE (
campo_que_sera_clave_unica)

FOREIGN KEY
ALTER TABLE profesion ADD CONSTRAINT nombre_clave_foranea FOREIGN KEY (campo_clave_foranea) REFERENCES table_referencia(campo_referencia);

-Borrar Key: Con este tipo de sentencia sencillamente lo que hacemos es borrar claves que contengan las tablas.

ALTER TABLE tabla DROP PRIMARY KEY;

ALTER TABLE tabla DROP INDEX campo_indice;

ALTER TABLE nombretabla DROP FOREIGN KEY nombre_clave_foranea;  

Estas son algunas de las acciones que se pueden hacer al momento de modificar una tabla para más información tenemos el manual de MySQL.

c) DROP TABLE: Se utiliza para borrar una tabla de una base de datos su sintaxis es la siguiente:

DROP TABLE nombre_tabla;

Al igual que con la sentencia CREATE la sentencia DROP también nos permite borrar base de datos, vistas e índices la sintaxis es igual a la de las tablas pero indicando lo que se desea borrar, con las vistas lo veremos cuando hablemos de estas en un próximo articulo.
Bueno eso es todo por este artículo espero sea de agrado y sirva a las personas que leen este blog dedicado a el desarrollo web, cualquier crítica o sugerencia es aceptada, hasta una próxima entrada saludos