Tuesday, July 28, 2009

1er Congreso de Software Libre

CONGRESO DE SOFTWARE LIBRE EN SEPTIEMBRE

PRIMER CONGRESO UNIVERSITARIO DE SOFTWARE Y CONOCIMIENTO LIBRE

Santo Domingo, 14 al 17 de Septiembre del 2009.

Este es el primer anuncio del 1er Congreso Latino Americano de Software y Conocimiento Libre, que será realizado por la La Universidad Autonoma de Santo Domingo y la Comuidad del Software Libre - con una gran colaboración de diversas instituciones dominicanas, del 14 al 17 de Septiembre de 2009 en Santo Domingo, Republica Dominicana. Los organizadores invitan a participar en este gran evento a todos los profesionales informáticos, profesores universitarios, estudiantes y entusiastas en general de todas las regiones del pais.

El 1er Congreso Universitario de Software y Conocimiento Libre cuenta ya con el auspicio de la diversas instituciones oficiales y todas las universidades dominicanas y se realizará en la biblioteca Pedro Mir de la Universidad Autonoma de Santo Domingo este Septiembre proximo.

Profesor Dionisio Grullon
Fundacion Codigo Libre Dominicana
809-953-0136
dionisio.grullonheredia@gmail.com


Sunday, July 26, 2009

Aprendiendo MySQL

A continuación publicare una practica básica de MySQL bien interesante y fácil de aprender, la misma fue realizada por el Ing. José Paredes, director de operaciones de la Fundación Código Libre Dominicano (FCLD)...
http://www.codigolibre.org/images/miembros/crhistian%20nunez.jpg

En esta practica de SQL estamos asumiendo que usted ya tiene instalado mysql.


MySQL

Para conectamos a mysql

bash:~$ mysql -U root -p


Para crear una Base Datos:

CREATE DATABASE fcld;

Para usted ver todas la Bases Datos creadas:

SHOW DATABASES;

Para conectarse a una Base Datos:

USE fcld;

Para nos conectamos a mysql desde el SHELL:

bash:~$ mysql -U root -p fcld

Desde su SHELL cargar el script del esquema hr a la base datos creada:

bash:~$ mysql fcld < hr_mysql.sql -u root -p

Para usted crear una tabla llamada fcld:

CREATE TABLE fcld (

estudiantes varchar(70), apellido varchar(70),

cedula integer, cod_curso varchar(10));

Para crear una tabla con Primary Key:

CREATE TABLE curso(

cod_curso varchar(10) PRIMARY KEY,

nom_curso varchar(70));

Para crear una tabla con Foreign KEY

CREATE TABLE seccion (

id_seccion int(5), desc_seccion varchar(70),

cod_curso varchar(10)

CONSTRAINT FOREIGN KEY (cod_curso) REFERENCES curso(cod_curso));

Para crear una tabla con CONSTRAINT NOT NULL, DEFAULT

CREATE TABLE picapollo ( nom_pica varchar(70) DEFAULT 'Chino', piezas varchar(30) NOT NULL);

Para crear una table especificando el motor de almacenamiento InnoDB:

CREATE TABLE estudiantes (id_estudiante int(10), nombre varchar(70), apellido varchar(70),

Telefono varchar(13), direccion varchar(300))

ENGINE=InnoDB;


Para crear una table especificando el motor de almacenamiento MySAM:

CREATE TABLE padres (nombre varchar(70), apellido varchar(70), telefono varchar(13), id_estudiante int(10), direccion varchar(300)) TYPE=MySAM;

Creando indices para la una tabla:

CREATE INDEX i_nombre ON padres(nombre);

Para usted ver todas las tablas creadas en una Base Datos:

SHOW TABLES;

Para ver la estructura de las tablas creadas:

DESC fcld;

Para insertar registros en una tabla:

INSERT INTO fcld (estudiantes, apellido, cedula, cod_curso) VALUES ('Ivelise', 'Matos', 00118999313, 'Secretaria');

Segunda forma:

INSERT INTO fcld VALUES ('Ivelis', 'Perpinan', 001399323, 'GNU/Diplomado');

Insertando registros nulos:

INSERT INTO fcld VALUES ('Miguelito', 'Perpinan', NULL, NULL);

Insertando solo en los campos deseados:

INSERT INTO fcld (estudiantes, cedula) VALUES ('Brianna', 00113499313);

Para extraer toda la informacion de una tabla:

SELECT * FROM fcld;

Para extraer los campos deseados de una tabla:

SELECT apellido, cod_curso FROM fcld;

Utilizando Operadores Aristmeticosy;

SELECT 80+60;

SELECT salary+150 Salario_Sumado, salary FROM employees;

SELECT 90-70;

SELECT salary-1050 Salario_Restado, salary FROM employees;

SELECT 20*60;

SELECT salary*10 Salario_Multiplicado, salary FROM employees;

SELECT 92/20;

SELECT salary/100 Salario_Dividio, salary FROM employees;

Utilizando Alias con las columnas:

SELECT salary AS salario, first_name "Primer Nombre", last_name PRIMER_APELLIDO

FROM employees;

Concatenando Columnas:

SELECT concat(first_name,salary) FROM employees;

Concatenando Columnas y agregando un espacio entre ellas:

SELECT concat(first_name,' ',salary) FROM employees;


Caracteres Literales:

SELECT first_name, 'Salario Es', salary FROM employees;

Utilizando la Clausula DISTINCT, para evitar registros duplicados:

Aqui vemos todos los registros que estan incluyendo los que se repiten:

SELECT department_id FROM employees;

Evitamos los duplicados:

SELECT DISTINCT(department_id) FROM employees;

Utilizando la Clausula WHERE:

Todos los empleado que pernecen al departamento 90:

SELECT * FROM employees WHERE department_id=90;

Todos los empleado que su ID de trabajo es PU_CLERK:

SELECT * FROM employees WHERE job_id='PU_CLERK';

Todos los empleado que iniciaron en una fecha dada:

SELECT * FROM employees WHERE hire_date='2002-08-31';

Condiciones de Comparaciones:

Operador Igual:

Seleccionar todos registros de la tabla de departaments donde su location_id sea igual a 1700:

SELECT * FROM departments WHERE location_id=1700;

Operador Mayor:

Seleccionar los last_name, manager y salario de la tabla de employees donde el salario sean mayor a 10000:

SELECT last_name, manager_id, salary FROM employees WHERE salary > 10000;

Operador Menor:

Seleccionar todos los empleados de la tabla de employees donde el salario sean menor a 15000:

SELECT * FROM employees WHERE salary < 15000;

Operador Mayor e Igual que:

Seleccionar todos los empleados de la tabla de employees donde el salario sean Mayor o Igual qua 11000:

SELECT * FROM employees WHERE salary >= 11000;

Operador Menor e Igual que:

Seleccionar todos los empleados de la tabla de employees donde el salario sean Menor o Igual qua 4800:

SELECT * FROM employees WHERE salary <= 4800;

Operador BETWEEN:

Seleccionar primer nombre, salario para los empleados que su fecha de ingreso sea del 2001 al 2004:

SELECT first_name, salary, hire_date FROM employees WHERE hire_date BETWEEN '2001-01-01' AND '2004-01-01';


Operador IN:

Seleccionar primer nombre, salario, mail para los empleados que estan en los departamentos 30, 40 7 100:

SELECT first_name, salary, email, hire_date, department_id FROM employees

WHERE department_id IN (30, 40, 100);

Operador LIKE:

Seleccionar primer nombre, salario, mail para los empleados que su nombre inicien con A:

SELECT first_name, salary, email, hire_date, department_id FROM employees

WHERE first_name LIKE 'A%';

Seleccionar primer nombre, salario, mail para los empleados que su nombre contenga el caracter con A:

SELECT first_name, salary, email, hire_date, department_id FROM employees

WHERE first_name LIKE '%A%';

Seleccionar primer nombre, salario, mail para los empleados que su nombre inicie con A y que el sexto caracter sea O, no importa los caracteres del medio:

SELECT first_name, salary, email, hire_date, department_id FROM employees

WHERE first_name LIKE 'A_____O';

Operador IS NULL:

Seleccionar los empleados que no tienen commision:

SELECT * FROM employees WHERE commission_pct IS NULL;

Condiciones Logicas:

Operador AND:

Seleccionar primer nombre, salario, mail para los empleados que su nombre inicien con A Y que su codigo de departamento sea 80:

SELECT first_name, salary, email, hire_date, department_id FROM employees WHERE first_name LIKE 'A%' AND department_id=80;

Operador OR:

Seleccionar primer nombre, salario, mail para los empleados que su salario sea mayor a 17000 O su nombre inicien con A:

SELECT first_name, salary, email, hire_date, department_id FROM employees WHERE salary > 16000 OR first_name LIKE 'A%';

SELECT employee_id, last_name, job_id, salary FROM employees WHERE (job_id = 'SA_REP' OR job_id = 'SH_CLERK') AND salary > 10000;

Operador NOT:

Seleccionar primer nombre, salario, mail para todos los empleados que no esten en los departamentos 30, 40 7 100:

SELECT first_name, salary, email, hire_date, department_id FROM employees

WHERE department_id NOT IN (30, 40, 100);



Clausula ORDER BY:

Seleccionar los nombre, salario, fecha de ingreso para todos los empleados ordenado por id empleado:

SELECT * FROM employees ORDER BY employee_id;

La misma consulta per ordenada descendentemente:

SELECT * FROM employees ORDER BY employee_id desc;

Utilizando la posicion del campo para ordenar, aqui estamos ordenando por el campo salario descendentemente;

SELECT * FROM employees ORDER BY 8 desc;

Ordenando Ascendente por los alias;

SELECT salary Salario, first_name FROM employees ORDER BY Salario;

Funciones de Caracteres:

Funcion LOWER:

Selecciona todos los nombre de empleados en Minuscula:

SELECT LOWER(first_name), salary, last_name FROM employees;

Funcion LCASE, es sinonimo de LOWER:

SELECT LCASE(first_name), salary, last_name FROM employees;

Funcion UPPER:

Selecciona todos los nombre de empleados en Mayuscula:

SELECT UPPER(first_name), salary, last_name FROM employees;

Funciones Para la manipulacion de Texto:

Devuelve una subcadena empezando en la posicion dada:

SELECT SUBSTRING(first_name, 1,4), first_name FROM employees;

SELECT LENGTH(first_name), first_name FROM employees;

Devuelve la cadena rellana de Y a la derecha:

SELECT RPAD(first_name, 13, 'Y'), salary, last_name FROM employees;

Devuelve la cadena rellana de Y a la izquierda:

SELECT LPAD(first_name, 13, 'Y'), salary, last_name FROM employees;

Repite una cadena las veces que las desees repetida:

SELECT REPEAT(first_name, 2), salary, last_name FROM employees;

Sustituye donde quiera que encuentra A por PEPE:

SELECT REPLACE(first_name, 'A', 'PEPE'), salary, last_name FROM employees;

Devuelve la encriptacion de una cadena dada:

SELECT MD5(first_name), salary, last_name FROM employees;

Eliminando los espacio en blanco a la izquierda:

SELECT LTRIM(' Fundacion Codigo Libre');

Eliminda los espacio en blanco a la derecha:

SELECT RTRIM('Fundacion Codigo Libre ');

Repite una cadena las veces que las desees repetida:

SELECT REPEAT(first_name, 2), salary, last_name FROM employees;

Devuelve el valor ascii:

SELECT ASCII('@');

SELECT ASCII('t');


Funciones Numericas:

SELECT round(6899,999.00);

SELECT truncate(1.793,7);

SELECT mod(10,4);

SELECT mod(salary, 500) FROM employees;

Funciones de Fechas:

Devuelve la Fecha actual:

SELECT CURRENT_DATE();

Sinonimo de CURRENT_DATE:

SELECT CURDATE();


Devuelve fecha y hora actual:

SELECT CURRENT_TIMESTAMP();

Devuelve fecha y hora actual:

SELECT NOW();

Sinonimo de NOW:

SELECT SYSDATE();

Retorna la hora actual:

SELECT CURTIME();

Retorna el numero de dia entre la fecha inicial y la fecha final:

SELECT DATEDIFF(hire_date, '2009-07-15') FROM employees;

Formatea el valor segun la cadena data:

SELECT DATE_FORMAT(hire_date, '%W %M %Y') FROM employees;

Retorna el dia que entro un empleado:

SELECT DAYNAME(hire_date) FROM employees;


Para extraer el año que iniciaron los empleado:

SELECT EXTRACT(YEAR FROM hire_date), hire_date FROM employees;


Para extraer el mes que iniciaron los empleado:

SELECT EXTRACT(MONTH FROM hire_date), hire_date FROM employees;

Para extraer los minutos de un tiempo dado:

SELECT MINUTE(CURRENT_TIMESTAMP);

Para extraer los segundos de un tiempo dado:

SELECT SECOND(CURRENT_TIMESTAMP);

Conversiones:

Para convertir un Strim a formato DATE:

SELECT CAST('2008-04-20' AS DATE);


Esta funcion sustituye a to_char en termino de fecha:

SELECT DATE_FORMAT(hire_date, '%d-%m-%Y') FROM employees;

Expresiones Condicionales:

Sentencia CASE:

Funcion de control de flujo, si el valor concuerda Pon Tal cosa, jejejeje...

SELECT department_id,

CASE department_id WHEN 20 THEN 'Gualey'

WHEN 30 THEN 'Capotillo'

WHEN 40 THEN 'Guandule'

WHEN 50 THEN 'Cristo Rey'

WHEN 60 THEN 'Almirante'

ELSE 'Otro de Gente Pura'

END

FROM employees;

COALESCE:

Retorna el primer valor no NULL de una lista, sustituyendo el valor NULL:

SELECT COALESCE(commission_pct, 99)

FROM employees;

Funciones de Grupos:

Funcion AVG:

Para saber el salario promedio de los empleado:

SELECT AVG(salary) FROM employees;

Funcion COUNT:

Para saber la cantidad de empleado:

SELECT COUNT(*) FROM employees;

Funcion MAX:

Para saber salario mas alto:

SELECT MAX(salary) FROM employees;




Funcion MIN:

Para saber salario mas minimo:

SELECT MIN(salary) FROM employees;

Funcion SUM:

Para saber el monto total de todos los salario:

SELECT SUM(salary) FROM employees;

Todas Juntas:

SELECT SUM(salary) Suma_Total, AVG(salary) Salario_Promedio,

MAX(salary) Salario_Maximo, MIN(salary) Salario_Minimo

FROM employees;

Funcion GROUP BY:

Si queremos el total de empleado por departamentos:

SELECT count(*) Total_Empleado, department_id AS Departamentos FROM employees

GROUP BY department_id;

Funcion HAVING:

Esta Funcion se utiliza para manejar las funciones de grupo:

Si queremos saber el salario promedio para todos los departamentos, pero que el promedio sea mayo a 5000:

SELECT department_id, AVG(salary) Promedio FROM employees GROUP BY department_id

HAVING AVG(salary) >5000;

Obteniendo Datos de varias tablas:

NATURAL JOIN une dos tablas mediante todas las columnas que tengan el mismo nombre.

Selecciona los registros que provienen de las dos tablas siempre y cuando los valores de las columnas que tienen el mismo nombre coincidan.

Si el tipo de dato es diferente en las columnas que tienen el mismo nombre, se produce un error.

SELECT department_id, department_name, first_name FROM employees NATURAL JOIN departments;

USING Utilizar la cláusula USING solamente cuando existe mas de una columna que coincide.

SELECT department_id, department_name, first_name FROM employees

JOIN departments USING (department_id);

Utilizando Alias:

SELECT a.department_id, b.department_name, a.first_name, a.salary

FROM employees a JOIN departments b USING (department_id);

Utilizando ON Se utiliza la cláusula ON para especificar la unión de las columnas

con distinto nombre o condiciones arbitrarias:

SELECT e.department_id, d.department_name, e.first_name, l.city FROM employees e

JOIN departments d ON e.department_id=d.department_id

JOIN locations l ON l.location_id=d.location_id;




Para retornar aquellos registros que no coinciden mediante una relación entre tablas, LEFT OUTER JOIN Seleccionamos todos los empleados incluyendo los que no esten a un departamento:

SELECT e.department_id, d.department_name, e.first_name, e.employee_id FROM employees e

LEFT OUTER JOIN departments d ON e.department_id=d.department_id ORDER BY 1;

RIGHT OUTER JOIN

Seleccionamos todos los departamentos tienen empleados y pero que tambien me traiga los que no tienen empleados:

SELECT e.department_id, d.department_name, e.first_name, e.employee_id FROM employees e

RIGHT OUTER JOIN departments d ON e.department_id=d.department_id ORDER BY 1;

Nota esto es forzando un FULL OUTER JOIN en mysql ya que no existe:

SELECT e.department_id, d.department_name, e.first_name, e.employee_id FROM employees e

LEFT OUTER JOIN departments d ON e.department_id=d.department_id UNION

SELECT e.department_id, d.department_name, e.first_name, e.employee_id FROM employees e

RIGHT OUTER JOIN departments d ON e.department_id=d.department_id;


Ahora el clasico Join:

SELECT e.department_id, d.department_name, e.first_name, e.employee_id FROM employees e, departments d where e.department_id=d.department_id;


Subconsultas:

Para obtener el nombre del empleado que mas alto tiene su salario:

SELECT first_name, salary FROM employees WHERE salary =(SELECT MAX(salary)

FROM employees);

Para saber el salario y nombre de los empleados que su salario es mayor al empleado Abel:

SELECT last_name, salary FROM employees WHERE salary > (SELECT salary FROM employees

WHERE last_name LIKE 'Abel');

Saber el salario minimo por departamento donde su salario minimo sea mayor al minimo del id departamento 50:

SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 50);

Operadores para Multiples Registros:

Operador ANY:

Compara el valor de la consulta por cualquiera de los valores que son retornados por la subconsulta.

SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';

Operador IN

Compara si uno o mas de los elementos retornados por la subconsulta coinciden con los de la lista de la consulta principal:

SELECT emp.last_name, manager_id FROM employees emp WHERE emp.employee_id NOT IN(SELECT mgr.manager_id FROM employees mgr);

SELECT emp.last_name, manager_id FROM employees emp WHERE emp.employee_id IN(SELECT mgr.manager_id FROM employees mgr);

Operador ALL:

Compara el valor de la consulta con todos los valores que retorna la subconsulta:

SELECT employee_id, last_name, job_id, salary FROM employees

WHERE salary < ALL (SELECT salary FROM employees WHERE job_id = 'IT_PROG')

AND job_id <> 'IT_PROG';


Operadores de Conjuntos:

Operador UNION:Une distintas consultas, no muestra los registros duplicados:

Lista los códigos de cada empleado, con su cargo actual y su historio.

SELECT employee_id, job_id FROM employees UNION

SELECT employee_id, job_id FROM job_history;


Operador UNION:Une distintas consultas, muestra los registros duplicados:

Lista los códigos de cada empleado, con su cargo actual y su historio, sin importar que se repitan:

SELECT employee_id, job_id, department_id FROM employees

UNION ALL SELECT employee_id, job_id, department_id FROM job_history ORDER BY employee_id;

Utilizando la Sentencia UPDATE:

Vamos actualizar el salario al empleado Id 146 A 56000:

Primero vemos cuanto gana este empleado:

SELECT * FROM employees WHERE employee_id=146;

Su salario es de RD$13500

Actualizacion del mismo:

UPDATE employees SET salary=56000

WHERE employee_id=146;

Ahora consultado haber si se realizo la actualizacion correctamente:

SELECT * FROM employees WHERE employee_id=146;

Si queremos actualizar varios campos:

Actualizaremos el nombre, apellido y email al empleado de id 144:

Primero vemos sus datos

SELECT * FROM employees WHERE employee_id=144;


UPDATE employees

SET first_name='Antonio',

last_name='Perpinan',

email='info@codigolibre.org'

WHERE employee_id=144;

Validamos la informacion actualizada:

SELECT * FROM employees WHERE employee_id=144;



Modificando desde Subconsultas:

Modificando los datos del job_id y el salary del empleado cuyo código es 114, obteniendo los datos a modificar del empleado cuyo código es 205.

Nota: Para realizar este UPDATE tenemos que crear la tabla employee2, ya que MysSqL tiene problema tomando valores de la misma tabla por tanto realice una copia de la tabla employees:

Creando la tabla employees2

CREATE TABLE employees2 AS SELECT * FROM employees

Ahora realizaremos el UPDATE:

UPDATE employees e

SET e.job_id = (SELECT e1.job_id

FROM employees2 e1

WHERE e1.employee_id = 205),

e.salary = (SELECT e2.salary

FROM employees2 e2

WHERE e2.employee_id = 205)

WHERE e.employee_id = 114;

Usando la sentencia DELETE:

Eliminamos el empleado con id 114 de la tabla employees2:

Nota:Si no especificamos con WHERE cual es el registro lo eliminara todos:

DELETE FROM employees2 WHERE employee_id=114;

Eliminando registro con un SubSelect:

Eliminamos los registros de la tabla employees2 que su id de departamento sea igual al id departamento que tienen de nombre Public:

DELETE FROM employees2 WHERE department_id = (SELECT department_id FROM departments WHERE department_name LIKE '%Public%');

Sentencia TRUNCATE:

Elimina todos los registros de una tabla y automaticamente realiza un COMMIT:

TRUNCATE TABLE employees2;

Comandos de Controles de Transacciones:

Necesitamos desactivar el AUTOCOMMIT:

SET AUTOCOMMIT=0;

Para este ejercicio vamos a insertar datos en la tabla employees2:

INSERT INTO employees2 (employee_id, first_name, last_name, salary)

SELECT employee_id, first_name, last_name, salary FROM employees;

Ahora vamos a confirmar que insertamos en la employees2;

SELECT * FROM employees2;

Ahora vamos a actualizar un registro para luego deshacer la actualizacion:

UPDATE employees2

SET first_name='Ivelis Perpinan',

salary='89000'

WHERE employee_id=114;


Confirmamos la actualizacion:

SELECT * FROM employees2 WHERE employee_id=114;

Ahora vamos hacer uso del comando ROLLBACK:

ROLLBACK;


Confirmamos si se deshiso los cambios realizados:

SELECT * FROM employees2 WHERE employee_id=114;

Si queremos que los cambios sean permanentes tenemos que aplicar COMMIT luego de la transaccion: Ya no importa los ROLLBACK que ejecutemos: Ahora vamos a actualizar un registro para luego confirmar la transaccion de la actualizacion:

UPDATE employees2

SET first_name='Brianna Melissa',

salary='98000'

WHERE employee_id=114;

Confirmamos la actualizacion:

SELECT * FROM employees2 WHERE employee_id=114;

Ahora vamos hacer uso del comando COMMIT:

COMMIT;

Ejecutamos para deshacer los cambios:

ROLLBACK;

Confirmamos si se deshizo los cambios realizados:

SELECT * FROM employees2 WHERE employee_id=114;

SAVE POINT:

SAVEPOINT fcld;

Ahora borraremos unos registros para recuperar los mismos hasta el punto de salvamento creado:

DELETE FROM employees2 WHERE employee_id=114;

Consultamos el registro y vemos que no esta:

SELECT * FROM employees2 WHERE employee_id=114;

Ahora vamos a realizar ROLLBACK hasta el punto creado:

ROLLBACK TO fcld;

Consultamos el registro esta recuperado:

SELECT * FROM employees2 WHERE employee_id=114;


Borrando Objetos:

Borrando tablas

DROP TABLE padres;

Borrando Bases Datos:

DROP TABLE fcld;

Para Borrar un Indice:

DROP INDEX i_nombre ON padres;

Para cambias el nombre de una tabla:

RENAME TABLE padres to tutores;

Ahora vamos con mi comando favorito *ALTER*:

Vamos agregar el campo sex a la tabla estudiantes:

ALTER TABLE estudiantes ADD COLUMN sex char(2);

Vemos la estructura de la tabla y confirmamos que el campo esta agregado;

DESC estudiantes;

Vamos a borrar el campo direccion de la tabla estudiantes:

ALTER TABLE estudiantes DROP COLUMN direccion;

Vemos la estructura de la tabla y confirmamos que el campo esta agregado;

DESC estudiantes;

Vamos a cambiar el nombre de la columna sex a sexo:

ALTER TABLE estudiantes CHANGE sex sexo char;

Vamos a cambiar el tipo de dato de la columna sexo:

ALTER TABLE estudiantes MODIFY sexo varchar(2);

Vamos cambiar el nombre de la tabla tutores a padres;

ALTER TABLE tutores RENAME padres;

Vamos añadir un indice a la table padre:

ALTER TABLE padres ADD INDEX id_nombre (nombre);

Para cambiar el motor de almacenamiento de una tabla:

ALTER TABLE padres ENGINE = InnoDB;

Y para terminar Creacion de Usuario:

CREATE USER fcld;

Si queremos dos usuario con su password:

CREATE USER fcld IDENTIFIED BY 'kikla';

CREATE USER jp IDENTIFIED BY 'kikla';

Para ver si el usuario esta creado:

SELECT user, password FROM mysql.user;


Para cambiar el password al usuario fcld:

UPDATE mysql.user set password=PASSWORD('1234') where user='fcld';

UPDATE mysql.user SET Password=PASSWORD('1234'), host='localhost' WHERE User='fcld';

Recargue las tablas de permisos usando:

FLUSH PRIVILEGES;

Para borrar un usuario:

DROP USER fcld;

DROP USER jp;

Otorgamos permisos en Objetos con GRANT y REVOKE:

Vamos a darle todos los privilegios al usuario fcld en la Base Datos fcld:

GRANT ALL ON fcld.* TO 'fcld'@'localhost';

Vamos a quitarle todos los privilegios al usuario fcld en la Base Datos fcld:

REVOKE ALL ON fcld.* FROM'fcld'@'localhost';

Quitando privilegios de SELECT al usario jp en la tabla employees;

REVOKE SELECT ON hr.employees FROM 'jp'@'localhost';

Otorgando privilegios de SELECT al usario jp en la tabla employees;

GRANT SELECT ON hr.employees TO 'jp'@'localhost';

Para Salir del Prompt de SQL:

CRLT+D

EXIT

QUIT

No es cuestion de certificacion, no es cuestion de blablabla, es cuestion de trabajar....

Espere muy pronto GNU/Diplomado de Bases Datos:

MySQL

PostgreSQL

Oracle



Thursday, July 23, 2009

Vender Software Libre no es contradictorio




Mucha gente cree que el espíritu del proyecto GNU es que no se debería cobrar dinero por distribuir copias de software; o que se debería cobrar lo menos posible, sólo lo suficiente para cubrir el coste.

En realidad, recomendamos a la gente que distribuye software libre que cobre tanto como desee o pueda. Si esto le sorprende, por favor continúe leyendo.

[En inglés,] la palabra «free» tiene dos significados generales válidos. Puede referirse tanto a la libertad como al precio. Cuando hablamos de «software libre» (o «free software» en inglés), estamos hablando de libertad, no de precio. (Piense en «libertad de expresión», no en «barra libre»). Específicamente, significa que un usuario es libre de ejecutar el programa, cambiarlo y redistribuirlo con o sin cambios.

En algunos casos los programas libres son distribuidos gratuitamente, y en otras ocasiones por un precio muy alto. A menudo, el mismo programa se puede conseguir de ambos modos de fuentes distintas. El programa es libre a pesar del precio, porque los usuarios tienen libertad al usarlo.

Los programas que no son libres habitualmente se venden a un precio alto, pero en ocasiones alguna tienda le dará una copia sin costo. Sin embargo, eso no lo hace software libre. Con precio o sin él, el programa no es libre si los usuarios no tienen libertad.

Como el software libre no tiene nada que ver con el precio, un precio bajo no indica que el programa sea más libre o que esté más cerca de serlo. Entonces, si está redistribuyendo copias de software libre, podría poner un precio y ganar algo de dinero. Redistribuir software libre es una actividad buena y legítima. Si lo hace, es correcto que obtenga un beneficio de ella.

El software libre es un proyecto comunitario, y todo aquel que dependa del proyecto debería buscar formas de contribuir a construir la comunidad. Para un distribuidor, el modo de hacerlo es donar parte del beneficio a la Fundación para el Software Libre (FSF), u otro proyecto de desarrollo de software libre. Financiando el desarrollo, puede mejorar el mundo del software libre.

Distribuir software libre es una oportunidad de obtener fondos para el desarrollo. ¡No la desperdicie!

Para poder contribuir con fondos, necesita tener un beneficios. Si pone un precio demasiado bajo, no le sobrará nada para contribuir al desarrollo.

¿Perjudicará a los usuarios un precio de distribución más alto?

A la gente, a veces le preocupa que un precio de distribución más alto pondrá al software libre fuera del alcance de los usuarios que no tengan demasiado dinero. En el caso del software privativo, un precio alto hace exactamente eso, pero el software libre es diferente.

La diferencia es que el software libre tiende a esparcirse naturalmente, y existen muchas formas de obtenerlo.

Los acaparadores de software hacen un gran esfuerzo para evitar que ejecute un programa privativo si no ha pagado la tarifa estándar. Si dicho precio es alto, eso hace difícil que algunos usuarios usen el programa.

Con el software libre, los usuarios no tienen que pagar el precio de la distribución para poder usar el software. Pueden copiar el programa de un amigo que tenga una copia, o con la ayuda de un amigo que tenga acceso a la red. O pueden reunirse varios usuarios, dividir el precio de un CD-ROM, y instalar el software uno detrás de otro. Un precio alto para el CD-ROM no es un obstáculo importante cuando el software es libre.

¿Frenará el uso de software libre un precio de distribución más alto?

Otra preocupación común es por la popularidad del software libre. La gente cree que un precio de distribución alto reduciría el número de usuarios, o que un precio bajo es propenso a aumentarlo.

Esto es verdad para software privativo; pero el software libre es diferente. Con tantas formas de obtener copias, el precio del servicio de la distribución tiene un efecto menor en la popularidad.

A largo plazo, la cantidad de gente que usa software libre es determinado principalmente por cuanto puede hacer el software libre, y cuán fácil es usarlo. Muchos usuarios continuarán usando software privativo si el software libre no puede realizar todos los trabajos que quieran hacer. Por ende, si queremos incrementar el número de usuarios a largo plazo, deberíamos por encima de todo programar más software libre.

El modo más directo de hacerlo es escribiendo el software libre o los manuales que se necesitan. Pero si los distribuye en vez de escribirlos, la mejor forma en que puede ayudar es obteniendo fondos para que otros los escriban.

La expresión «vendiendo software» también puede ser confusa

Estrictamente hablando, «vender» significa cambiar bienes por dinero. Vender una copia de un programa libre es legítimo, y lo alentamos.

Sin embargo, cuando la gente piensa sobre la «venta de software», habitualmente imaginan hacerlo del mismo modo que lo hacen las compañías: hacer el programa privativo en vez de libre.

Entonces, a menos que vaya a delimitar cuidadosamente las distinciones, tal como lo hace este artículo, aconsejamos que es mejor evitar usar la expresión «venta de software» y elegir en cambio otras palabras. Por ejemplo, podría decir «distribución de software libre por un precio», dado que eso no es ambiguo.

Precios altos o bajos, y la GPL de GNU

Salvo por una situación especial, la Licencia Pública General de GNU (GPL de GNU) no establece restricciones acerca cuánto puede cobrar uno por distribuir una copia de software libre. Puede no cobrar, cobrar un centavo, un dólar, o mil millones de dólares. Eso depende de usted y del mercado, por ende no se nos queje si nadie quiere pagar mil millones de dólares por una copia.

La única excepción es en el caso en que los binarios sean distribuidos sin el código fuente completo correspondiente. Aquellos que lo hagan están obligados por la GPL de GNU a proveer el código fuente si se solicita posteriormente. Si no se estableciese un límite en el precio del código fuente, estarían en condiciones de fijar un precio demasiado alto para que cualquiera pueda pagarlo, como mil millones de dólares. De ese modo, parecería que se libera el código fuente cuando en verdad lo están ocultando. Por eso, en este caso, tenemos que limitar el precio del código fuente, para asegurar la libertad del usuario. Sin embargo, en situaciones ordinarias no existe tal justificación para limitar los precios de distribución, por lo que no lo hacemos.

A veces, las compañías cuyas actividades traspasan los límites permitidos por la GPL de GNU, piden permiso diciendo que «no cobrarán un precio por el software de GNU», o algo por el estilo. Esto no los lleva a nada. El software libre hace referencia a la libertad, y hacer cumplir la GPL es defender la libertad. Cuando defendemos la libertad de los usuarios, no nos distraemos por cuestiones secundarias, como cuánto se cobra por una distribución. La libertad es la cuestión, la cuestión entera y la única cuestión.

Fuente





Sunday, July 19, 2009

Un poco de Compiz

No se como aun se atreven a decir que Linux no esta listo para el escritorio, pero en fin.... no hay peor ciego que aquel que no quiera ver...




Disfrutenlo.....


Android y Ubuntu

android y ubuntu

Android es un sistema operativo para móviles que desarrolló entre otros, Google.

Hay un proyecto paralelo que implementa este sistema operativo en el ordenador. De hecho hay un live CD (el cual no he probado) listo para su descarga.

Hay además, otras noticias sobre Android relacionadas con Ubuntu.

Parece que Canonical, la empresa que lleva Ubuntu, está interesada en dar soporte a Android en su sistema operativo. Aunque no se sabe exactamente cómo, pese a que podrías ser corriendo aplicaciones nativas de Android en Ubuntu.

De todas maneras hay un tutorial de cómo instalar Android en Ubuntu para el que le interese.

Via PillateunLinux

Tuesday, July 14, 2009

Mark Shuttleworth

Mark Shuttleworth (nacido el 18 de septiembre de 1973 en Welkom, Sudáfrica) es un informático y empresario sudafricano. Es el fundador de la empresa Canonical Ltd., una empresa promotora del Software Libre.

200px-Mark_Shuttleworth_by_Martin_SchmittFue el primer africano en el espacio y el segundo turista espacial del mundo.

El 25 de abril de 2002, la nave Soyuz TM-34 despegó del cosmódromo de Baikonur hacia la Estación Espacial Internacional con una tripulación formada por tres personas: el piloto-cosmonauta ruso Yuri Gidzenko como comandante de la misión, el cosmonauta-investigador italiano Roberto Vittori y el cosmonauta-ingeniero sudafricano Mark Shuttleworth.

El segundo cosmonauta “turista” en la historia, después del vuelo del millonario estadounidense Dennis Tito en la Soyuz TM-32, prefiere no ser considerado un simple turista, y por ello puso gran énfasis en los aspectos educativos y científicos de su misión. Llevó a cabo experimentos científicos en las áreas de fisiología y de fenómenos de cristalización, así como otros relativos a la investigación de las células madre.

Después de 8 días a bordo de la Estación Espacial Internacional (y 10 días de estancia en el espacio), la tripulación conformada por Gidzenko, Vittori y Shuttleworth regresó a la Tierra a bordo de la Soyuz TM-33, a la sazón acoplada a la Estación. La misión de la Soyuz TM-34 fue la cuarta que viajaba a la Estación Espacial Internacional y la última de dicha variante TM de la venerable nave, siendo sustituida luego por la Soyuz TMA.

La fuente de su fortuna fue la venta de su empresa de seguridad en Internet Thawte por 575 millones de dólares a VeriSign en 1999.

Shuttleworth ha financiado el proyecto Ubuntu, distribución de GNU/Linux basada en Debian.

En marzo de 2004 fundó la empresa Canonical Ltd, para la promoción y soporte comercial de proyectos de software libre.


Via Yosoylinux



El Servicio Postal Estadounidense se pasa a GNU/Linux

USPS con GNU/Linux

El servicio postal estadounidense, equivalente a nuestro español Correos, ha anunciado que está migrando sus sistemas de seguimiento de envíos a GNU/Linux. Los sistemas mainframe tienen 15 años de antigüedad y funcionan sobre Cobol. El motivo principal de dicha migración de los sistemas TPS es conseguir una mayor capacidad de gestión y seguimiento de envíos y además rebajar los costes de operación del mainframe propietario gracias a la gratuidad del GNU/Linux utilizado.

USPS es otra de las muchas compañías que están viendo GNU/Linux como solución software en los tiempos de crisis que corren, en los que cualquier ahorro o recorte de gasto es bienvenido. El servicio de seguimiento (tracking) de los paquetes de USPS hace uso de un mainframe de IBM de sistema propietario Cobol por el que es necesario pagar una cantidad fija por su uso, y dicho gasto se puede ir ahorrando si cambian de sistema. El problema es cómo cambiar algo que lleva 15 años funcionando sin mayores problemas.

USPS con GNU/Linux

En palabras de John Byrne, gerente de desarrollo de aplicaciones de USPS, “tenemos el sistema de tracking en un mainframe, y este mainframe es un entorno propietario, lo que significa que tienes que pagar a los fabricantes un cierto precio por usar su software. Queremos sacar partido de Linux y el código abierto, y crecer sin tener que pagar más por costes de software. Asi que ponemos rumbo hacia Linux“.

El problema de este tipo de medidas es que desarrollar un sistema pleno desde cero es un trabajo monumental. Por ello han conseguido aprovechar la experiencia, programas y sistemas desarrollados en Cobol gracias al uso de un compilador de Micro Focus, que ha compilado los programas existentes para Linux.

Via MuyLinux

Friday, July 10, 2009

10 cosas que hacer después de instalar Windows.

Si acabas de instalar Windows y estás contento porque todo ha ido bien, sigue estos sencillos 10 pasos para conseguir el máximo rendimiento, la mayor seguridad y el más alto grado de libertad que se puede alcanzar con un sistema operativo.

  1. Abre Internet Explorer y descarga este archivo si tienes un PC de 32 bits, o este otro si tienes uno de 64 bits. Ante la duda, descarga el primero. Dentro de este archivo está la solución a todos los problemas. Su nombre es "ISO de Ubuntu".
  2. Mientras se descarga el archivo anterior, descarga también este programa. Este programa te servirá para poder usar el archivo anterior. ImgBurn le llaman.
  3. Una vez se han descargado los dos archivos anteriores, deberás instalar ImgBurn y grabar la ISO de Ubuntu en un CD virgen.
  4. Reinicia el ordenador con el CD recién grabado dentro, y cuando salga una amigable pantalla de instalación elige el idioma español e inicia Ubuntu.
  5. Una vez iniciado del todo, ve al icono de instalar y sigue todos los pasos. En el apartado de las particiones sólo debes tener cuidado si tienes copias de seguridad escondidas en algún sitio, sino déjale que se las apañe solo.
  6. Cuando haya finalizado la instalación, reinicia el ordenador y contempla las nuevas bondades de tu nuevo sistema operativo. Verás que en vez de Windows pone "Ubuntu". Ubuntu es una versión de Windows mejorada, por así decirlo, así que no usa NADA de Windows y está escrita basándose en otras cosas super-secretas que sólo los frikis saben.
  7. Admira lo que ves. Verás que el fondo de escritorio no es un campo verde, sino un austero fondo color caca. Según algunos estudios recientes, el poner un fondo de escritorio tan feo anima a los usuarios a trabajar más, todo con tal de no ver el fondo de escritorio. Por eso Ubuntu incrementa la eficiencia de sus usuarios.
  8. Cotillea por los menús que aparecen arriba a la derecha. Verás un botón para agregar programas. Allí puedes instalar todo tipo de programas. Si tienes un disco duro grande, instala todos los que te interesen, sin pensarlo. Busca e instala.
  9. Ahora que tienes el sistema más seguro, el que utilizan en las películas de expertos en informática, con un montón de programas gratis sin necesidad de crack o número de serie, puedes apagar el ordenador y pensar interiormente: "¡Cómo molo!".
  10. Coge tu bicicleta y date un paseo por el barrio, sabiendo que ninguno de esos mortales tiene algo tan buenísimo instalado en su ordenador.

Pero recuerda, esto es un ultra-secreto de los mejores expertos en informática de Internet, así que díselo sólo a las personas que te caigan bien.

PD: No me responsabilizo de nada de lo que te pase por seguir estos pasos. Si después de seguir estos pasos te roban la bici sin candado que tienes en el garaje, no he sido yo.

Fuente: La Ventana Muerta.




Tuesday, July 7, 2009

Adios Michael Jackson

VLC 1.0.0 Liberado!!!!!!

VLC media player 1.0.0 - Goldeneye


Mi gente..... el mejor player.... al fin.... la Version 1.0, es decir... Estable.....

VLC

VLC 1.0.0 Features


  • Libre, Codigo Abierto y Multi-Plataforma
  • Independiente de sistemas de codecs y soporta la mayoria de formato de videos
  • Grabacion en vivo
  • Pausa instantanea y soporte de trama a trama "Frame-by-Frame"
  • Fino controles de velocidad
  • Nuevos codecs HD (AES3, Dolby Digital Plus, TrueHD, Blu-Ray Linear PCM, Real Video 3.0 and 4.0, ...)
  • Nuevos Formatos (Raw Dirac, M2TS, ...) y grandes mejoras en muchos formatos...
  • Nuevo codificador Dirac y codificador de punto fijo de MP3
  • Escalado de vídeo en pantalla completa
  • Soporte de RTSP Trickplay
  • Reproduccion de archivos en Zip
  • Barra de herramientas personalizables
  • Interfaz de codificacion mas facil
  • Mejor integración en entornos de Gtk
  • Dispositivos MTP en linux
  • AirTunes streaming
  • Nuevo skin para la Interfaz skins2


Wednesday, July 1, 2009

VirtualBox 3.0

Para beneplácito de la comunidad, principalmente de nuestro amigo y ocasional colaborador José Luís Chiquete, recién ha sido anunciado en los foros de VirtualBox el lanzamiento de la versión definitiva de VirtualBox 3.0. Esta importante actualización del tan popular equipamiento lógico para virtualización incorpora por primera vez multiprocesamiento simétrico (SMP) en huéspedes (se requiere un anfitrión con Intel VT-x o AMD-V), soporte experimental de Direct3D 8 y 9 en huéspedes Windows y OpenGL 2.0 en Linux, Windows y Solaris, entre muchas otras cosas más.

También se ha publicado un muy renovado manual del usuario de 259 páginas.

Fuente: VivaLinux.