Páginas

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

martes, 4 de enero de 2011

Introducción a MySQL: Conceptos Básicos


 En esta entrada comenzaremos a  trabajar con el popular  manejador de Base de Datos MySQL, vamos a ir avanzando desde lo más sencillo hasta llegar a cierto nivel de complejidad, en esta entrada se darán algunos conceptos, su instalación.
Comencemos con varios conceptos importantes antes de ir a la acción, como siempre indicando que son simples resúmenes o mejor dicho, son conceptos propios con los que se desea explicar de manera sencilla algún tema, sin más preámbulo veamos los conceptos:

Que es MySQL??

Es un Manejador o Gestor de base de datos relacional, multiusuario basado en el estándar SQL sus siglas en ingles Structure Query Language (Lenguaje de Consulta Estructurado en español).

Lenguaje de Consulta Estructurado ( SQL)

 Es el lenguaje mediante el cual realizamos diferentes operaciones en nuestros sistemas o manejadores Bases de Datos, para manipular los datos a medida que esto vaya siendo necesario. El estándar SQL es utilizado en diferentes gestores de base de dato como por ejemplo ORACLE, POSTGRESQL,SQLSERVER y MySQL por supuesto.

Manejador de Bases de Datos

Los manejadores de base de datos son programas que utilizamos para manipular la información y la creación de bases de datos para nuestros sistemas, entre los más conocidos tenemos:
-ORACLE
-MySQL.
-SQLSERVER.
-POSTGRESQL
-Microsoft Access.
Entre otros.

Ya sabemos que es un manejador de base de datos pero Que es una Bases de Datos??

Es el lugar donde guardamos la información relacionada a un sistema para ser manipulada cuando esto sea necesario, entendiendo por sistema un conjunto de componentes o información relacionada entre sí para llegar a un fin.

Una vez conocido estos conceptos generales procedamos a conocer más sobre el gestor de Base de Datos MySQL

Ya sabemos que es MySQL, pero que podemos hacer con él??

MySQL nos sirve para la administración de bases de datos, podemos realizar desde realizar operaciones básicas como creación de bases de datos, inserción, actualización y eliminación de registros, hasta la creación de funciones, procedimientos almacenados, trigger, que hacen que la gestión de nuestras bases de datos sean más eficientes.
Bueno ya que conocemos un poco vayamos al trabajo con MySQL.

Primero Instalación de MySQL

Para Windows personalmente lo he trabajado con paquetes como el XAMPP o el WAMP que traen el servidor MySQL ya instalado, también instala el cliente de MySQL, además traen un Servidor APACHE y el PHP que con instalarlos solo debes de realizar tus proyectos y guardarlos en la carpeta correspondiente, en Linux lo podemos instalar ejecutando el siguiente comando en la terminal:
Instalamos el servidor MySQL
$ apt-get install mysql-server
Instalamos el Cliente MySQL
$ apt-get install mysql-client

Ya teniendo instalado MySQL en nuestro equipo estamos listos para la acción.
Si estamos en Windows para trabajar con MySQL entramos a simbología del sistema dando click en el botón de inicio, ejecutar y colocamos cmd y presionamos enter (intro), una vez en la pantalla de simbología del sistema nos ubicamos en el bin de la carpeta mysql bien sea de XAMPP o WAMP colocando lo siguiente, en caso del XAMPP ejecutando el siguiente comando
cd  c:\xampp\mysql\bin
una vez en esta carpeta ingresamos de la siguiente manera:
mysql -u root –p
Al ejecutar este comando el terminal te pedirá la clave del usuario root normalmente esta en blanco luego de este entramos en nuestro cliente MySQL y nos aparecerá algo como esto
C:\xampp\mysql\bin>mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 23
Server version: 5.1.41 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
Cabe destacar que el paquete del XAMPP también instala un modo grafico al cual podemos acceder mediante el navegador con la siguiente URL

Si estamos en Ubuntu trabajaremos desde la terminal utilizando el cliente MySQL accediendo de esta manera
$mysql -u root -p
Al igual que se indico para Windows te pedirá la clave del usuario root normalmente esta en blanco y ya entramos en nuestro cliente MySQL nos mostrara algo como esto

carlos@carlos-desktop:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 141
Server version: 5.1.41-3ubuntu12.8 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Antes de comenzar con la creación de base de datos y las sentencias de MySQL se indicaran varios Tips para que nuestras consultas sean lo más óptimas, a medida que continúe el articulo nos iremos acostumbrando.
a)      Todas las sentencias SQL terminan en punto y coma “;“ esto es una regla del estándar SQL.
b)     En los nombres de las base de datos, tablas y los campos no pueden haber separación, si el nombre de la tabla es de dos silabas se sugiere que se utilice el underscore  para separar los nombres ejemplo:
     CREATE TABLE nombre_tabla;
c)      Las sentencias deben de ir en mayúsculas, excepto por los nombres de las bases de datos, tablas o campos de una tabla de nuestra base de datos, las funciones de MySQL siempre estarán en mayúscula, ejemplo: SELECT campo FROM database.tabla;
d)     Los nombres de las bases de datos, tablas y deben de hacer referencia a lo que estas guardaran, evitar en lo mayor posible abreviaciones de nombres de tablas, ya que mientras más claro sea el nombre más fácil de entender serán nuestras consultas. Ejemplo:      
    
Manera sugerida: 
    Base de datos: cine.
   Tabla: películas
   Campos:genero,director,actores


 Manera no sugerida:

     Base de datos: cine.
     Tabla: pel 
     Campos: gen, dir, act.  

        Aunque la creación de la base de datos y las tablas no daría error, de la manera en que se sugirió se hace referencia exacta a lo que se está almacenando y cualquier administrador de base de datos con solo ver los nombres de los campos y de la tabla entiende a que hace referencia.
e)       Se sugiere que los nombres de las tablas sean en plural ya que dentro de ellas se almacenaran una gran cantidad de registros, aunque esto no da ningún error al momento de trabajar es mas explicativo.
f)      Para velar por la integridad de nuestros datos debemos tener en cuenta que para cada tipo de dato hay un tipo de campo por lo que se sugiere que se almacenen datos en sus tipo esto evita errores, un error muy común es que las fechas se almacenen en campos tipo VARCHAR, debido a que pueden guardar la fecha en el formato que ellos quieren, esto es un error grave ya que al momento de hacer comparaciones entre fechas no será óptimo ya que están en campos de tipo string y no en su correspondiente que sería de tipo fecha, para dar formatos a fechas o hacer búsquedas de alguna existen funciones como date_format,DAY, etc.

Estas son simples sugerencias para que la administración de nuestras base de datos sean lo más optima posible, en los proyectos que he realizado he trabajado de esta manera y hasta ahora no he tenido ningún problema, aunque  cualquier sugerencia siempre será válida y tomada en cuenta incluso si tienen alguna otra convención diferente que ayude a optimizar la administración de bases de datos seria buena.

Bueno en este articulo aprendimos un poco sobre los conceptos básicos de los manejadores de base de datos en especial MySQL, vimos la instalación de de este gestor, también establecimos algunas convenciones para que el manejo de las consultas sea óptimo, espero que cree curiosidad, hay mucha más teoría que se puede investigar sobre MySQL, como sus motores de almacenamiento, tipos de datos, aunque de esto se hablara un poco cuando empecemos a trabajar con tablas, ya se está trabajando en el segundo artículo donde hablaremos del lenguaje de definición de datos en MySQL, comenzaremos el trabajo con sentencias de este pequeño tutorial de MySQL, un saludo, espero que les sea útil cualquier sugerencia es aceptada Feliz Año Nuevo!!.