Está en la página 1de 23

Para decirle a SQL que muestre los datos en una tabla especfica le decimos: SELECT * FROM Nombre_de_tabla;

No hay nada como MOSTRAR (y si no lo creen pregntenle a las bailarinas o bailarines strippers) y en MySQL eso es sencillo con la sentencia SHOW. La sentencia SHOW tiene una sintaxis sencilla y en nuestro ejemplo siguiente, lo utilizamos en tres diferentes formas: SHOW DATABASES; SHOW TABLES; SHOW COLUMNS FROM nombre_de_tabla;

Ahora bien, para ver las tablas contenidas en una base, necesitamos primero que nada, decirle a MySQL que deseamos utilizar o USAR dicha base, lo cual hacemos por medio de la palabra reservada USE, de la siguiente forma: USE nombre_base_de_datos;

Para crear la base de datos, basta con utilizar la sentencia SQL CREATE DATABASE nombre_base;

Efectivamente, la creacin de la base de datos es as de sencilla, pero, qu pasara si el nombre de la tabla ya existe, sencillo, MySQL producira un error 1007, si, un feo (y ruidoso pues produce un efecto sonoro en el altavoz de la computadora) error. Cmo evitamos este error, sencillo, agregamos a nuestra sentencia lo siguiente: CREATE DATABASE IF NOT EXISTS nombre_base;

Esto no hace que la base de datos que estamos creando sobreescriba que la que ya existe, sino que simplemente evitamos que MySQL nos de ese error. Si lo que se estn preguntando es y qu ganamos con eso?, pues bien, en realidad es una cuestin de forma. Supongamos que tenemos una aplicacin que utiliza nuestro motor de base de datos, digamos PHP y a la hora de utilizar la aplicacin tenemos la necesidad de crear una base de datos en tiempo real, esto nos producira un error en nuestra pantalla, el cual se desplegara en nuestro navegador de Internet, lo cual sera desastroso para nuestra aplicacin. Por otro lado, en ocasiones es necesario deshacernos de algunas bases de datos que han convertido en obsoletas o, tal vez duplicadas, en este caso, lo que hacemos para borrar dichas bases de datos es lo siguiente: DROP DATABASE nombre_tabla;

Imaginemos que deseamos crear lgicamente (es decir en MySQL) una tabla como la siguiente:
nombre nombre_1 nombre_2 nombre_n apellido apellido_1 apellido_2 apellido_n telefono telefono_1 telefono_2 telefono_n direccion direccion_1 direccion_2 direccion_n

Lo que necesitamos hacer es utilizar la sentencia SQL que nos permite crear tablas, siempre y cuando tengamos una base de datos que la contenga, es decir: CREATE TABLE nombre_tabla (campo1 tipo(longitud), campo2 tipo(longitud), campo_n tipo(longitud)); Debemos recordar que, antes de utilizar esta sentencia, debemos seleccionar una base de datos, que ser la que contendr a la tabla que vamos a crear, la forma de hacerlos es, como seguramente recordarn, utilizando USE nombre_base_de_datos; para posteriormente crear la tabla. En caso de que la tabla ya no nos sea de utilidad, podemos deshacernos de ella utilizando la sentencia DROP TABLE nombre_de_tabla; la cual borra por completo la tabla indicada.

TIPOS DE DATOS

CHAR/CHAR(): Las columnas de tipo char o char() almacenan un carcter o una cadena de caracteres de 0 hasta 255 respectivamente (Si lo recuerdan, este fue el tipo de datos que le asignamos a todas nuestras columnas en la tabla UNO) VARCHAR: Estas columnas almacenan una cadena de caracteres variables de 0 a 255. TINYINT(): Almacena un valor entero pequeo de 0 a 255 o de -128 a 127 BIT BOOL BOOLEAN: Todos estos tipos son sinnimos de TINYINT(1). SMALLINT: Almacena un entero corto (digamos que, no tan pequeo), entre -32768 y 32767 o, en caso de no tener un signo de 0 a 65535. MEDIUMINT: Almacena un entero de tamao medio entre -83888608 y 8388607 y entre 0 y 16777215 sin signo. INT/INTEGER: Contiene un entero de tamao normal (este normal es para nosotros en realidad un tamaote) entre -2147483648 y 2147483647 o entre 0 y 4294967295. BIGINT: Como podrn imaginarse contiene un entero grande (o lo que es lo mismo un enterote) entre -9223372036854775808 a 922337203685477807 con signo o de 0 a 18446744073709551615 sin signo. FLOAT/FLOAT(): Guarda un nmero de coma flotante. Opcionalmente puede acompaarse (al tipo flota sin los parntesis) de la palabra precision que le indica la precisin decimal que se desea, que puede llegar hasta 24 para precisin sencilla y de 25 a 53 para una precisin doble. Para flota(), los valores permitidos van desde 3402823466E+38 y -1.175494351E-38, 0, y entre 1.175494351E+38 y 3.402823466E+38. En caso de espcificarse el modificador UNSIGNED los valores negativos no son permitidos. DOUBLE: Contiene un nmero de coma flotante de precisin normal. Sus valores van desde -1.7976931348623157E+308 y -2.2250738585072014E-308, 0, y entre 2.2250738585072014E-308 y 1.7976931348623157E+308. Una vez ms, si se define UNSIGNED, los valores negativos no son permitidos. DOUBLE PRECISION REAL : Son sinnimos de DOUBLE DECIMAL: Guarda un nmero de coma flotante sin empaquetar. Esto de sin empaquetar implica que se guarda como una cadena (vase CHAR), usando un carcter para dgito del valor. DEC NUMERIC FIXED : Son todos sinnimos de DECIMAL

DATE: Almacena un valor de fecha, los rangos permitidos son desde 1000-01-01 y 9999-12-31 (Fecha en la que podra que nosotros ya no estemos vivos). El formato de fecha presentado es, como ya lo habrn imaginado AAAA-MM-DD DATETIME: Contiene un MIX (para demostrar que sabemos de terminologa moderna), es decir una mezcla de fecha y hora. El rango que MySQL soporta es desde 1000-01-01 00:00:00 hasta 9999-12-31 23:59:59. El formato es del tipo AAAAMM-DD HH:MM:SS TIMESTAMP: Es un valor de tiempo que puede estar desde -1970-01-01 00:00:00 hasta un momento en el ao 2037 (lo cual suena como a un libro de ciencia ficcin o algo as, no les parece?) TIME: Es una hora que permite los valores -838:59:59 a 838:59:59. Los valores se muestran en formato HH:MM:SS YEAR: Guarda un ao en formato de 2 o 4 dgitos, siendo el valor por defecto 4. Los valores permitidos son desde 1901 a 2155 y 0000 en el formato de 4 dgitos y desde 1970 a 2069 en el formato de 2 dgitos (70-69). Los siguientes tipos son para datos sin tipo o grandes cantidades de datos. TINYBLOB TINYTEXT: Almacena una columna BLOB o TEXT con una longitud de hasta 255 caracteres (28-1) BLOX TEXT: Almacena una columna BLOB o TEXT con una longitud de hasta 65535 caracteres (216-1) MEDIUMBLOB MEDIUMTEXT: Almacena una columna BLOB o TEXT con una longitud de hasta 16777215 caracteres (224-1) LONGBLOB LONGTEXT: Almacena una columna BLOB o TEXT con una longitud de hasta 4294967298 caracteres (232-1) Los siguientes son los tipos enumerados y los conjuntos: ENUM: Almacena un enumerado, el cual es un objeto cadena que pueden un valor de entre una lista, el valor NULL o el valor de error . Este valor puede tener un mximo de 65535 valores diferentes. SET: Almacena un conjunto. Es una cadena que puede tener 0 ms valores. Todos esos valores debe estar entre una lista de valores. El mximo de miembros de un conjunto puede ser 64.

En esta nueva leccin, vamos a aprender como insertar datos en MySQL. Tal y como vimos en nuestra leccin anterior, debemos tener siempre en cuenta que los tipos de datos que vamos a almacenar en nuestras columnas sean el tipo de datos que hemos definido a la hora de crear nuestra tabla. Dicho lo anterior, podemos empezar. La insercin en MySQL (basados en el lenguaje SQL, claro est) se hace por medio de la sentencia INSERT INTO , cuya sintaxis bsica es: INSERT INTO nombre_tabla (columna_1, columna_2, columna_n) VALUES(valor_1, valor_2, valor_n) WHERE condicin(opcional)
VALUES es la palabra que avisa a MySQL que los datos a continuacin son los que se insertarn. WHERE condicion especifica una condicin a cumplirse para que la insercin se lleve a cabo.

En fin, continuemos. Para llevar a cabo un proceso selectivo debemos utilizar la sentencia SQL SELECT, la cual tiene la siguiente sintaxis bsica: SELECT nombre_columna FROM nombre_tabla WHERE condicion (opcional) GROUP BY orden_de_agrupacion ORDER BY orden_de_ordenamiento. Tomando el ejemplo de la caja registradora, supongamos que el cdigo de barra lanza el siguiente cdigo 0245f0124n01214, la sentencia SELECT que podra llevarse a cabo en el CPU de la computadora es: SELECT precio, nombre_producto FROM productos WHERE codigo_barras = 0245f0124n01214;

Para MySQL las actualizaciones se llevan a cabo mediante la sentencia UPDATE, cuya sintaxis es la siguiente: UPDATE nombre_base/nombre_tabla SET columna_1 = expresion1, columna_2 = expresion2, columna_n = expresin WHERE condicion.

veamos la sintaxis de la sentencia DELETE, que por cierto es la encargada de borrar los datos de la base: DELETE FROM nombre_tabla WHERE condicion Observacin importante: Si omitimos la condicin WHERE el contenido TOTAL de la tabla se borrar: DELETE FROM uno;
En caso de que necesitemos poner algunos obstculos en el camino del usuario para evitar que los datos sean borrados a troche y moche. Algunas opciones podran ser un subformulario en JavaScript o una simple pgina intermedia de PHP que le pregunte al usuario un nombre de usuario y/o una contrasea para poder hacer el borrado de tal o cual dato

La sentencia LIKE nos simplifica la vida de una manera enorme, ya que nos da la facilidad de seleccionar un resultado con base a bsquedas no exactas. La palabra LIKE en ingls significa COMO. En otras palabras, cuando le decimos a MySQL por ejemplo: SELECT precio FROM tabla WHERE producto LIKE %so%; Le estamos diciendo a MySQL SELECCIONE la columna precio DESDE tabla, EN DONDE la columna producto SEA COMO (o CONTENGA) so

veamos la sintaxis de la sentencia ALTER, que es la que se utiliza para ALTERAR el balance del universo de nuestra base de datos:

NOT NULL: Esta sentencia le dice a MySQL que el valor que debe guardarse en la columna en donde la utilizamos no puede ser nulo, lo cual previene nuestra base de guardar no valores en sus contenedores. AUTO_INCREMENT: Esta sentencia hace que la columna a la que se le aplica le de un valor numrico que se incrementar automticamente cada vez que una nueva FILA sea agregada a nuestra base de datos.

Todos conocemos las operaciones bsicas, es decir: la suma, la multiplicacin, la resta y la divisin. Todas estas operaciones pueden llevarse a cabo sin problemas en MySQL sin necesidad de recurrir a datos que estn guardados en la base de datos. La forma en la que vamos a hacer dichas operaciones es a travs de la sentencia SELECT (otras de las bondades de esta sentencia), de la siguiente forma: SELECT operacin;

As, la sentencia SELECT 2+2; Nos dara como resultado 4 (a que no esperaban una respuesta de este tipo). Con todo, debemos tener cuidado de la precedencia de los operadores, ya que algunos operadores tiene mayor precedencia que otros y, por ejemplo, si hacemos la siguiente operacin: Finalmente, y antes de ver a los operadores en accin, mencionemos un operador nuevo (al menos en cuanto a las operaciones matemticas se refiere), este es, el operador Mdulo (%). Para aquellos conocedores de C, C++ o PHP les ser muy conocido nuestro viejo amigo Mdulo. Este operador proporciona el residuo de un cociente, por ejemplo, la operacin: SELECT 6 % 4; Nos da como resultado 2, siendo que el residuo de la divisin entre 6 y 4 es 2.

La forma de llevar a cabo las comparaciones es a travs de la sentencia SELECT, de la siguiente forma: SELECT operacin comparativa; Las operaciones comparativas que podemos llevar cabo son: La operacin de igualdad: 8 = 8 La operacin Mayor que: 7 > 3 La operacin Menor que: 4 < 15 La operacin Mayor o igual que: 3 >= 3 La operacin Menor o igual que: 10 <= 5 La operacin No es igual a: 10 = 3 3 <> 2 La operacin Null: 7 <=> Null (La expresin null, recuerden, no es igual a 0, null es un valor que no ha sido programado an, lo cual no significa necesariamente que est vaco, sino que es un valor que no est definido an) Una observacin importante, es que si decimos que 7 = Null, el resultado no ser cierto o falso (1 0), sino que resultar en que la expresin entera se convierte en null, por tal razn, debemos utilizar el operador especial para la sentencia NULL < = >.

SELECT cadena operador cadena; Por favor presten atencin a lo que encierra a ambos valores de cadena, es decir a las comillas simples. Lo que las comillas simples hacen, como seguramente ya habrn imaginado, es decirle a MySQL que el valor a evaluar es precisamente una cadena de caracteres. De tal manera, la sentencia: SELECT me llamo Juan = me llamo Juan; Retornara un valor de 1, es decir verdadero. SELECT bibidibabidibu LIKE bibidibabidibu; Retornara un valor verdadero (afortunadamente la computadora no tartamudea al comparar esto, lo cual es supercalifragilisticoespialidoso, no les parece?). Una de las ventajas de utilizar la sentencia LIKE, es que nos permite utilizar comodines. Lo que un comodn hace, como en un juego de pker (perdn si no son tahres como nosotros), es reemplazar o bien un carcter o bien la cadena completa. Los caracteres que utilizamos como comodines pueden ser: El smbolo sustituto de un solo carcter, el cual es el guin bajo (_) O el smbolo que sustituye la cadena completa, o el resto de la cadena a partir de donde ponemos el smbolo, el cual es el smbolo de porcentaje (%)

SELECT 12 = 12 OR 28 = 115; Nos da un valor verdadero (1), pese a que 28 es definitivamente diferente de 115 (a menos de que las reglas de igualdad hayan cambiado al mismo tiempo que escribimos este manual). Esto claro, es debido a que estamos utilizando el operador lgico OR, el cual decide de entre la evaluacin de una expresin O la evaluacin de otra. Una observacin importante, es que en MySQL, al igual que en muchos lenguajes de programacin como C o C++, los operadores lgicos pueden escribirse con base en smbolos. Dicho lo anterior, observen que la expresin de arriba, es totalmente equivalente a la siguiente: SELECT 12 = 12 || 28 = 115; El operador AND, se abrevia mediante un par de ampersands (&&), y se escriben de la misma manera en la que se escribe el operador OR (||), es decir:

SELECT 12 = 12 && 28 = 115;

SELECT NOT (3 = 6); La evaluacin normal sera obviamente falsa, sin embargo, siendo que estamos anteponiendo el operador lgico NOT, la evaluacin resulta verdadera. Razn, lo falso de los falso, es lo verdadero.

SELECT rumpelspinskin REGEXP k; La sentencia anterior nos dara como resultado un valor de 1, lo cual implica que es un resultado verdadero. Quin nos dice por qu? De acuerdo, el muchacho de la camisa caf con rombos rojos (un aplauso al que haga juego con nuestra descripcin) Correcto, la letra k est incluida en la cadena que estamos evaluando. Por otro lado, si evaluamos la sentencia: SELECT rumpelspinskin REGEXP k|z; La evaluacin en este caso tambin resulta verdadera, dado que la barra vertical le dice a MySQL que evale si existe una expresin O la otra. Si por ejemplo la sentencia hubiese sido REGEXP a|z, entonces la expresin hubiese sido evaluada como falsa (0). Una observacin que se hace necesaria, es que no importa si la evaluacin incluye ms de una palabra, de tal manera que si la expresin fuese: SELECT rumpelspinskin REGEXP rumpelspinskin|rapunzel; El resultado hubiese sido evaluado como cierto, dado que una de las dos palabras (o nombres) est incluido en la expresin evaluada. Podemos evaluar, de igual manera, el hecho de si la expresin regular comienza con un carcter especfico, utilizando en la evaluacin el circunflejo (^), de la manera siguiente: SELECT El perfume REGEXP ^E; Con la expresin anterior, el resultado sera cierto (1), dado que la expresin comienza con el carcter E La contraparte del circunflejo viene a ser el signo de dlar ($), el cual le advierte a MySQL que la expresin regular que deseamos evaluar debe ser el carcter final, de la siguiente manera: SELECT Karamazov REGEXP v$;

Esta expresin retornara un valor verdadero, dado que la expresin comparada finaliza con el signo de dlar. Si nuestras necesidades se encaminan a comparar solamente el primer y el ltimo carcter de nuestra expresin, podramos utilizar un carcter comodn, de la siguiente forma: SELECT Karamazov REGEXP ^K.+v$; Por favor obseren que la expresin de evaluacin es ^K.+v$, y que inmediatamente despus de la K hay un punto, esto es importante, pues le dice a MySQL que busque la expresin regular cuyo inicio sea la letra K, el siguiente carcter sea cualquiera, los siguiente caracteres (sin importar su nmero) sean cualesquiera y el carcter final, sea la negra v

SELECT Rpido corren los carros por el ferrocarril REGEXP [rren]; Esta evaluacin nos da un valor verdadero (1), dado que lo que hacen los corchetes, es decirle a MySQL que busque la expresin regular contenida dentro de ellos, en cualquier lugar de la cadena evaluada. Por otro lado, si desesemos, por ejemplo, hacer un rango de evaluacin, bastara con incluirlo dentro de los corchetes, de la siguiente manera: SELECT alskjdhasjkdhasljkdhas REGEXP [a-z]; Lo anterior basta para que la expresin sea evaluada como verdadera, debido que estamos especificando un rango extenso entre la a y la z. Sin embargo, bastara con incluir un nmero (perdn, un dgito) para que la expresin sea evaluada como falsa. Por otro lado, la expresin: SELECT lksjfsdfsdlfsdjlsfd45646465lkashdakshdkas REGEXP [a-z0-9]; Sera evaluada como verdadera.

MANUAL DE MySQL. ORDENANDO Salud y amor para todos! (lo del dinero depende de sus gustos) En este nuestro nuevo coloquio, vamos a aprender a hacer consultas ms complejas, gracias a los criterios de agrupamiento que existen.

Esto de los criterios de agrupamiento son en realidad una delicia semntica para impresionar a los incautos. Dicho en buen cristiano, un criterio de agrupamiento es la forma en la que le decimos a nuestro motor de bases de datos (es decir MySQL) en la que queremos que ordene o agrupe los datos de nuestra consulta. Para que nuestra consulta se ordene de una forma determinada, podemos utilizar la sentencia ORDER BY en conjunto con la sentencia SELECT. Una consulta normal, es decir, una consulta como las que hemos hecho hasta el momento, sera de la siguiente manera: SELECT * FROM tabla; Para poner un orden a esta consulta, basta con hacer lo siguiente: SELECT * FROM tabla ORDER BY columna_1; La sentencia anterior presentara nuestro resultado de forma ascendente (de la A a la Z). La forma ascendente es la forma en la que MySQL ordena los resultados por defecto. Sin embargo, si nuestro deseo es cambiar el orden a desdencente (de la Z a la A), entonces basta con poner la palabra DESC inmediatamente despus del nombre de la columna que queremos que sea el parmetro de ordenamiento, es decir: SELECT * FROM tabla ORDER BY columna_1 DESC; Claro est, la columna por la cual vamos a presentar el ordenamiento, puede ser cualquiera que nosotros escojamos, sin importar el tipo de datos que hayamos guardado en esa columna especfica. SELECT * FROM tabla LIMIT fila inicio, filas a presentar; Claro est, la sentencia LIMIT puede utilizarse en amena compaa de la sentencia ORDER BY que aprendimos en la leccin anterior de la manera siguiente: SELECT * FROM tabla ORDER BY criterio_de_ordenacin LIMIT fila_inicio, filas_a_presentar;

A partir de este momento, empezamos esa propiedad de las bases de datos relacionales y le damos la bienvenida a las uniones (JOINS es su nombre es ingls). Los tipos de uniones que podemos realizar son INNER JOINS (Uniones Interiores) y LEFT JOINS (Uniones por la Izquierda). Las uniones ms comunes con las del tipo Interior, es decir, INNER JOINS, las cuales son las ms sencillas. La forma en la que hacemos un INNER JOIN es simplemente especificando las columnas de las tablas de las que queremos hacer la consulta,

escribiendo explcitamente la palabra INNER JOIN inmediatamente despus, o simplemente escribiendo una coma entre la tabla uno y la tabla dos, posteriormente DEBEMOS especificar una condicin WHERE a cumplir. As por ejemplo, imaginemos la siguiente consulta: SELECT gente.nombre, gente.apellido, empresa.sueldo, empresa.cargo FROM gente, empresa WHERE gente.cod_empleado = empresa.cod_empleado; La consulta anterior le dice a MySQL que SELECCIONE de la tabla gente, tanto la columna nombre como la columna apellido; y de la tabla empresa, la columna sueldo y la columna cargo EN DONDE la columna cod_empleado de la tabla gente sea igual a la columna cod_empleado de la tabla empresa. Esta misma consulta podra haberse hecho de la siguiente manera: SELECT gente.nombre, gente.apellido, empresa.sueldo, empresa.cargo FROM gente INNER JOIN empresa ON gente.cod_empleado = empresa.cod_empleado; Como vern, la forma de especificar las tablas de donde estamos sacando la informacin es simplemente con un punto (.), especificando primero el nombre de la tabla y posteriormente el nombre de la columna, esto tanto despus de la palabra SELECT, como despus de la palabra WHERE

La solucin es utilizando LEFT JOIN. Los LEFT JOINS (perdn por utilizar las palabras en ingls, pero la traduccin de unin izquierda o unin interior para los INNER JOINS no resulta del todo satisfactoria), son uniones en las que le pedimos a MySQL que nos muestre los datos contenidos en las tablas inmiscuidas en la consulta, sin importar que, por ejemplo, en un par de filas el valor nulo (NULL) aparezca. Contrario a los INNER JOINS, los LEFT JOINS no pueden llevar una condicionante WHERE. Las razones son, claro est, que para cumplir una condicionante WHERE, la consulta debe arrojar solamente los resultados que concuerden exactamente con la condicin, y nuestro deseo es precisamente lo contrario. La sintaxis de los LEFT JOINS es bastante similar a la de los INNER JOINS, salvo que debemos utilizar la sentencia ON forzosamente, de la siguiente manera: SELECT tabla1.columna1, tabla2.columna1 FROM tabla1 LEFT JOIN tabla2 ON tabla1.columna3 = tabla2.columna1; Finalmente, como recomendacin habremos de decir que los LEFT JOINS son herramientas que podemos utilizar en casos especiales. Sin embargo, debemos tener cuidado en el orden en el que especificamos las tablas en un LEFT JOIN, ya que si la tabla de la izquierda es la tabla que contiene, digamos menos datos, y la de la derecha es la que contiene ms, las filas que no concuerden sern ignoradas por MySQL.

la funcin SUM, la cual devuelve la suma de una expresin. Claro que la funcin SUM no es la nica que podramos presentar aqu, pero es la que ms se adapta a las necesidades del ejemplo. SELECT columna1, SUM(columna2) FROM tabla1 GROUP BY columna1; Lo que le estamos diciendo a MySQL en la sentencia anterior es SELECCIONE la columna1 y la suma de la columna2 DE la tabla1 AGRUPADO CON BASE A la columna1. Algo que no puede olvidrsenos cuando hacemos un agregado de datos, es que DEBEMOS incluir la sentencia GROUP BY (por cierto, GROUP BY, te presento a unos amigos y amigas, amigos y amigas, GROUP BY) Esta sentencia, como su mismo nombre lo indica, agrupa valores en una consulta con base a un criterio (en nuestro fabuloso ejemplo el criterio sera la columna1). La sentencia GROUP BY, no slo puede utilizarse en un agregado de datos, sino tambin en una consulta comn y silvestre como las que ya hemos visto. Antes de ver nuestro vdeo, los dejamos con algunas de las funciones MySQL ms utilizadas: MIN Devuelve el valor mnimo de una expresin MAX Devuelve el valor mximo de una expresin COUNT Devuelve el nmero de valores distintos de NULL en las filas recuperadas por una sentencia SELECT AVG Devuelve el valor medio ADDDATE Suma un intervalo de tiempo a una fecha ADDTIME Suma tiempos Existen muchas otras funciones, de las cuales algunas utilizaremos en este curso.

Datos por defecto son aquellos que especificamos al momento de la creacin de nuestra tabla, aquellos datos por defecto que tal o cual columna mostrar, en caso de que ningn valor sea especificado para ella al momento de hacer una insercin.

Como vemos, hay ciertos datos que no han sido insertados al momento de escribir la sentencia INSERT INTO y por lo tanto se muestran como NULL (valor nulo). Para prevenir este problema, es que existen los datos por defecto, ellos viven para salvarnos la vida. Cuando hacemos un DESCRIBE nombre_tabla, notamos una columna que dice DEFAULT, tal y como lo muestra la siguiente imagen:

La columna DEFAULT contiene la informacin de valor por defecto que contiene una columna especfica, tal y como lo muestra la imagen, el valor por defecto de nuestras columnas es, para todas, NULL, lo que significa que, en caso de no existir un dato insertado, el valor que esta columna contendr ser NULL.

MANUAL DE MySQL. COLUMNAS DE TIPO ENUMERADO En esta leccin, vamos a aprender un tipo de columna bastante especial e importante. Programadores de C y C++, este tipo de columna les va a sonar un tanto conocida. Las columnas de tipo enumerado nos ayudan a especificar valores determinados y especficos que podemos guardar en una tabla.

Imaginemos que estamos en un mundo de buenas caricaturas y que tenemos una tienda en donde llevamos un registro de nuestros mejores clientes, con base a la cantidad de productos ACME que estos clientes nos compran. Nuestro clientes ms frecuentes son: Ranma 1/2 Inuyasha Batusai Himura Son Gok Estos cuatro clientes son los nicos que semana a semana nos compran productos ACME para sus despensas, por lo que podemos ENUMERAR estos clientes en una columna especfica, digamos del siguiente tipo: CREATE TABLE clientes (compra_no smallint auto_increment, nombre enum(Ranma 1/2', Inuyasha, Batusai Himura, Son Gok); Esta tabla contendr una columna de tipo enumerado, en donde los datos a guardar podrn ser Ranma 1/2, Inuyasha, Batusai Himura o Son Gok), de tal manera que al insertar datos en la tabla podramos hacer lo siguiente: INSERT INTO clientes (nombre) VALUES (Inuyasha); Los datos insertados seran, por supuesto, 1 en la columna compra_no e Inuyasha en la columna nombre. Sin embargo, tambin pudimos haber introducido los datos de la siguiente manera: INSERT INTO clientes (nombre) VALUES (2); El resultado de lo anterior es exactamente el mismo. La razn es que definimos la columna nombre del tipo ENUM, la cual ENUMERA los datos que le definimos al momento de la creacin y que los referimos luego por medio de, o bien la informacin especfica (en este caso la cadena Inuyasha) o bien con el entero que hara referencia a este dato (siendo que la cadena Inuyasha es la segunda en el orden de enumeracin, se puede hacer referencia a ella por medio del entero 2)

En este nuevo encuentro vamos a aprender como se asignan variables en el entorno de MySQL. La asignacin de variables puede tener una gran variedad de aplicaciones, cada una de las cuales la dictar la necesidad de cada uno de nosotros a la hora de trabajar con nuestro querido motor de base de datos. Para asignar una variable simplemente utilizamos la palabra reservada SET, seguida por el signo de arroba y el nombre de la variable, posteriormente el signo de igual (que en este caso sera el signo de asignacin) y el valor de la variable, de la siguiente forma:

SET @nombre = Tomas; Lo que hemos hecho en este breve ejemplo es asignar a la variable nombre el valor de la cadena de caracteres Tomas. Para desplegar el valor de la variable basta con recurrir a nuestro viejo amigo SELECT de la siguiente manera: SELECT @nombre; Todo lo anterior nos da una salida como la siguiente:

Sin embargo, la utilidad de la asignacin de variables va muchos ms all, pudiendo asignar el valor de una columna de una tabla a una variable de una forma similar a la siguiente: SELECT @nombre := nombre_columna from tabla1 where condicin; La gran utilidad de esto es cuando tenemos una gran cantidad de procesos en los que necesitamos utilizar el nombre de la variable (para referirse claro est al nombre de una columna asignada a dicha variable)

MANUAL DE MySQL. LA FUNCIN IF Decisiones, cada da, alguien pierde alguien gana ave Mara Una deliciosa cancin de Rubn Blades, un panameo genio que debera hacer msica por siempre. En realidad eso de las decisiones es siempre una cuestin de pensarlo mucho. Lo mismo ocurre con nuestras bases de datos (en serio, de cuando en cuando deben ellas tomar decisiones) Las decisiones en MySQL, al igual que en la gran mayora de los lenguajes de programacin, se hace con la sentencia IF (que es SI condicionante en espaol), lo cual sonar ms que conocido para la gran mayora que tenga experiencia en algn lenguaje de programacin. La funcin IF en MySQL acepta tres argumentos, el primero es la condicin en si, el segundo es la operacin a llevar se cabo si la evaluacin resulta cierta, y el tercero es la operacin a efectuarse si la evaluacin resulta falsa. Un ejemplo sencillo de lo anterior sera:

SELECT IF (Esto = Esto, Es igual, No es igual);

Como es lgico de imaginar, la funcin IF es de mayor utilidad, aplicada a una base de datos. Por ejemplo, supongamos que existe una tabla dentro de una base de datos y queremos utilizar una funcin IF para hacer una seleccin: SELECT nombre, IF(edad <= 20, Joven, Adulto) FROM personas ORDER BY edad; En la consulta anterior, todas las personas en nuestra base de datos cuya edad sea menor o igual que 20 tendr un mote de Joven, mientras que todas las personas mayores de 20 tendrn uno de Adulto.

MANUAL DE MySQL. ARCHIVOS SQL En este nuestro nuevo encuentro vamos a hablar de archivos SQL que podemos ejecutar por medio de nuestro cliente MySQL. Los archivos SQL o los procesos por lotes, son de gran ayuda cuando necesitamos procesar una gran cantidad de sentencias SQL de manera repetitiva, ya que podemos simplemente ejecutar el archivo que contiene las sentencias SQL que se han de ejecutar y ejecutar dicho archivo con sentencias cada vez que nos sea necesario. Los archivos SQL deben compilarse desde el sistema operativo, por ejemplo, en el caso de los sistemas operativos de Microsoft, desde el emulador de DOS:
Por favor noten la diferencia entre la lnea de comandos del DOS (command prompt) y la lnea de comandos de MySQL:

La forma en la que vamos a ejecutar el archivo SQL es mediante la siguiente instruccin: mysql < nombre_del_archivo

Sin embargo, hasta este momento, no hemos mencionado el tipo de relaciones que pueden existir entre tablas (slo hemos mencionado el tipo de uniones que pueden existir, no el tipo de relaciones). A nivel terico, diremos que el tipo de relaciones entre tablas pueden ser: DE UNO A UNO DE UNO A MUCHOS DE MUCHOS A MUCHOS Antes de proseguir, hay que decir que MySQL no soporta la relacin de muchos a muchos, por lo que se hace necesaria la intervencin de una tabla intermediaria. Hemos de decir que todo lo anteriormente mencionado es parte de lo que se conoce como NORMALIZACIN, lo cual indica el grado de eficiencia con la que nuestra base de datos est diseada.

As pues, parte de la optimizacin implica lo siguiente:


Evitar la duplicacin (parte de lo que explicamos en nuestra leccin anterior) Evitar la inclusin de columnas de tamao variable (como VARCHAR y TEXT) Utilizar los tamaos de columna (o mejor dicho de tipo de datos) ms pequeo que nuestras necesidades lo permitan (como SMALLINT) Utilizar en la medida de lo posible los tipos numricos sin signo (UNSIGNED) ya que esto aumenta la eficiencia con la que nuestra base ha de trabajar Utilizar la optimizacin de las tablas para evitar, como ya dijimos, la duplicacin innecesaria de los datos Considerar la desnormalizacin de las tablas (es decir, sacrificar la elegancia, para ganar un poco de velocidad), o cual implica, si no hay ms remedio, permitir la duplicacin o la redundancia de informacin Utilizar datos por defecto cada vez que nos sea posible Utilizar los ndices para acelerar nuestras consultas

Para garantizar los privilegios a un usuario especfico, tenemos la sentencia GRANT, que es precisamente la que le dice a MySQL si tal o cual usuario tiene o no tiene los privilegios para hacer algo con nuestras bases de datos. Ese algo podra ser la habilidad de hacer consultas (SELECT), la habilidad de actualizar o modificar (UPDATES), la habilidad de insertar informacin (INSERT) o la habilidad de borrar (DELETE). La Instruccin GRANT es utilizada una vez que iniciamos una sesin MySQL con el usuario ROOT, es decir, cuando el comando del sistema escribimos lo siguiente: mysql u root Una vez dentro de la sesin con el usuario raz o superadministrador, debemos utilizar la sentencia GRANT de la siguiente manera: GRANT privilegio_a_otorgar ON nombre_base_de_datos TO usuario@localhost IDENTIFIED BY password Posteriormente podemos probar estos privilegios entrando a otra sesin de MySQL con el usuario al cual le hemos permitido los privilegios e intentar hacer algo que no le hemos permitido a dicho usuario. Un ejemplo, una vez estemos dentro del usuario ROOT: GRANT SELECT ON prueba.* TO usuario1@localhost INDENTIFIED BY dejameentrar; Para probar esto debemos salirnos de la sesin ROOT simplemente digitando EXIT en la lnea de comandos de MySQL y entrando luego al usuario especfico digitando lo siguiente:

mysql u usuario1 p De esta manera hemos iniciado una sesin con el usuario USUARIO1. La sentencia GRANT anterior le dice a MySQL: Garantice el privilegio de SELECCIONAR EN prueba EN usuario@localhost IDENTIDICADO POR dejameentrar; La directiva p que hemos especificado al entrar en la sesin usuario1 hace que MySQL nos pida una contrasea antes de entrar, recordemos que la contrasea especificada fue dejameentrar, as que escribimos precisamente dejameentrar al momento de entrar a la sesin. Una vez dentro, al estar en la lnea de comandos de MySQL (mysql>) podemos intentar, por ejemplo, algo como esto: DELETE FROM prueba; Lo que MySQL nos dir es que hay un error, un error 1142 para ser ms exactos, cada vez que intentemos hacer algo para lo que nuestro usuario no tiene usuario (recuerden por favor que usuario1 slo tiene permiso para hacer consultas (SELECT). Finalmente, podemos solicitarle a MySQL los privilegios de un usuario especfico por medio de la sentencia SHOW GRANTS, tal y como lo muestra la imagen:

Muy bien, despus de que la madre despierta de su desmayo, decide castigar al querubn revocando los privilegios que le otorg (amn de un penoso incidente en el que un fuete estar incluido claro est). De tal suerte que la madre entra a su computadora y escribe lo siguiente: mysql u root Y desde la lnea de comandos escribe lo siguiente:

REVOKE ALL ON *.* FROM my_hijo@localhost;

As pues, si deseamos que un usuario especfico tenga privilegios slo de SELECCIN, debemos hacer lo siguiente: INSERT INTO user (Host, User, Password, Select_priv) VALUES (localhost, yosoy, Password(yavine), Y); Lo anterior le garantiza al usuario yosoy la capacidad de seleccionar, pero de nada ms, el usuario yosoy no puede ni modificar, ni agregar, ni borrar datos de las bases de datos a las que tenga acceso. Finalmente, debemos agregar que una vez que hemos agregado los privilegios para un usuario determinado, debemos utilizar la sentencia: FLUSH PRIVILEGES; La sentencia anterior hace que los cambios que hayamos hecho a un usuario determinado tomen efecto.

MANUAL DE MySQL. ENCRIPTACIN Esconder, una de las fascinaciones de muchos seres humanos: esconder lo que puede ser escondido, e incluso lo que no se puede. La encriptacin en MySQL puede hacerse de dos formas. La primera, que es una forma de encriptacin, digamos al azar, que es la forma de encriptacin de la que no se puede regresar, es decir, una encriptacin que no se puede revertir. Dicho de otra forma, si por ejemplo lo que hemos encriptado con este formato es una palabra de acceso, y se nos olvida dicha palabra de acceso, entonces, dicho con un lxico florido: Estamos fritos. La segunda forma es una encriptacin que puede ser recuperada y que por lo tanto, puede ser desencriptado.

La funcin ENCODE toma dos argumentos, el primero es la cadena que habremos de encriptar y la segunda es la secuencia que ser utilizada para encriptar la informacin. Un ejemplo sera:

La otra forma de encriptacin, la que no puede revertirse, se hace por medio de la funcin md5 de la siguiente forma:

Otra de las formas de encriptacin, irreversible como md5 es mediante la sentencia PASSWORD, que se hace de manera idntica a la funcin md5, es decir: SELECT PASSWORD(hola); La forma en la que MySQL sabe si el password introducido es el adecuado, es comparando la cadena resultante de la encriptacin con la cadena encriptada, si esa comparacin resulta cierta, entonces MySQL sabe que el password era el correcto.

También podría gustarte