Retroceder   Foros del Web > Programación para sitios web > Bases de Datos

Respuesta
 
Herramientas Desplegado
Antiguo 31-ene-2003, 11:05   #31 (permalink)
Cain ha deshabilitado el karma
 
Avatar de Cain
 
Fecha de Ingreso: noviembre-2002
Ubicación: Catalunya
Mensajes: 6.494
Enviar un mensaje por AIM a Cain Enviar un mensaje por Yahoo  a Cain
BD: MySQL

Pregunta: ¿Como puedo concatenar campos y valores cuando pueden haber NULL?

Respuesta:

La función CONCAT() devuelve NULL siempre que alguno de sus argumentos es NULL. Esto nos puede dar problemas al usar instrucciones como:
Código:
UPDATE tabla SET nombre_completo = CONCAT(nombre, " - ", apellidos)
Los registros donde nombre y apellido no sean NULL, podrán obtener un nombre_completo, pero si nombre o apellido son NULL, el registro no tendrá <i>nombre_completo</i>.

¿Cómo solucionamos este problema? Utilizando la función COALESCE().

COALESCE devuelve el primer argumento diferente de NULL que se le atorgue. Es decir:
Código:
COALESCE("hola", NULL)
Devuelve "hola"
Código:
COALESCE(NULL, "hola")
Devuelve "hola"

Aprovechando esto, podemos hacer:
Código:
UPDATE tabla SET nombre_completo = CONCAT(COALESCE(nombre, ""), " - ", COALESCE(apellidos, ""))
Ahora ya podremos obtener un nombre_completo para todos los registros :D
__________________
Josep Tarrés,
web: http://www.traduim.com/
blog: http://www.traduim.com/blog/
Cain está desconectado   Responder Citando
Antiguo 13-feb-2003, 21:09   #32 (permalink)
urjose está en el buen camino
 
Avatar de urjose
 
Fecha de Ingreso: noviembre-2002
Mensajes: 5.289
Enviar un mensaje por ICQ a urjose Enviar un mensaje por Yahoo  a urjose
RDBMS: Todas

Pregunta: ¿Qué es una base de datos y que es un DBMS?


Respuesta:

Por C.J. Date:

Entre la base de datos física- es decir, los datos como estan almacenados fisicamente- y los usuarios del sistema hay una capa de software conocida de manera indistinta como el administrador de base de datos o el servidor de base de datos; o mas comunmente como el sistema de administración de base de datos (DBMS). Todas las solicitudes de acceso a la base de datos son manejadas por el DBMS

------------------

El DBMS es por mucho, el componente de software más importante del sistema en general, aunque no es el único. Otros comprenden utilerias, herramientas de desarrollo de aplicaciones, ayudas de diseño, generadores de informes y (el mas importante) el administrador de transacciones o monitor.

------------------

Una base de datos es un conjunto de datos persistentes que es utilizado por los sistemas de aplicación de alguna empresa dada.
urjose está desconectado   Responder Citando
Antiguo 20-feb-2003, 07:50   #33 (permalink)
mauriciolangea está en el buen camino
 
Avatar de mauriciolangea
 
Fecha de Ingreso: noviembre-2002
Mensajes: 57
Enviar un mensaje por ICQ a mauriciolangea Enviar un mensaje por Skype™ a mauriciolangea
Tema : Interbase/Firebird

Pregunta : ¿Como creo campos auto incremenables?

Respuesta

Para este punto, InterBase/Firebird usa generadores (generators), así como Oracle usa Secuencias. Cada generador tiene un valor, a continuación mostraré unos ejemplos de como usar los Generadores :


CREATE TABLE prueba
(
campo1 integer not null,
campo2 char(10),
PRIMARY KEY (campo1)
);

CREATE GENERATOR gen_prueba_id;


Para insertar valores:


INSERT INTO prueba (campo1, campo2) VALUES (gen_id(gen_prueba_id, 1), 'prueba me');


Para el mismo INSERT, también podrías crear un TRIGGER:


SET TERM ^ ;
CREATE TRIGGER prueba_bi FOR prueba
BEFORE INSERT POSITION 0
AS
BEGIN
if (new.campo1 is null) then
new.campo1 = gen_id(gen_prueba_id, 1);
END^
SET TERM ; ^


y el INSERT quedaría así :


INSERT INTO prueba (campo2) VALUES ('prueba me');


Puedes notar que ya en el INSERT no aparece el primer campo, esto es porque al realizar el INSERT, lo que hace es ejecutar el TRIGGER, que antes de insertar (BEFORE INSERT), revisa si CAMPO1 es nulo, si lo es, ejecuta el GENERADOR gen_prueba_id.

Esto puede parecer un poco complicado, pero los generadores te dan mayor potencia que los campos autoincrementables, puesto que simpre puedes leer un generador sin incrementarlo:


SELECT gen_id(gen_prueba_id, 0) FROM ...


y para cambiar el valor actual del generador con:


SET GENERATOR gen_prueba_id TO [algún_valor];

Última edición por mauriciolangea; 30-abr-2006 a las 10:13.
mauriciolangea está desconectado   Responder Citando
Antiguo 28-feb-2003, 07:51   #34 (permalink)
mauriciolangea está en el buen camino
 
Avatar de mauriciolangea
 
Fecha de Ingreso: noviembre-2002
Mensajes: 57
Enviar un mensaje por ICQ a mauriciolangea Enviar un mensaje por Skype™ a mauriciolangea
Oracle

Pregunta : ¿Como puedo saber si tengo indices redundantes en mi base de datos?

Respuesta :

Simple, con el script que está a continuación ...


select u1.name || '.' || o1.name || ' redundante con ' || u2.name || '.' || o2.name "INDICES REDUNDANTES"
from sys.user$ u1,sys.obj$ o1,sys.ind$ i1,sys.icol$ ic1,sys.user$ u2,
sys.obj$ o2,sys.ind$ i2,sys.icol$ ic2
where
o1.obj# = i1.obj#
and o1.owner# != 0
and o1.owner# = u1.user#
and o2.obj# = i2.obj# and o2.owner# != 0
and o2.owner# = u2.user#
and i1.bo# = i2.bo#
and i1.cols = 1
and i2.cols > 1
and ic1.obj# = i1.obj#
and ic2.obj# = i2.obj#
and ic1.bo# = i1.bo#
and ic2.bo# = i2.bo#
and ic1.col# = ic2.col#
and ic1.pos# = ic2.pos#
mauriciolangea está desconectado   Responder Citando
Antiguo 25-abr-2003, 08:46   #35 (permalink)
mauriciolangea está en el buen camino
 
Avatar de mauriciolangea
 
Fecha de Ingreso: noviembre-2002
Mensajes: 57
Enviar un mensaje por ICQ a mauriciolangea Enviar un mensaje por Skype™ a mauriciolangea
Interbase

Tema : Interbase/Firebird

Pregunta : ¿Como se utiliza ISQL?

Respuesta


Configurando variables de entorno

Para utilizar ISQL lo primero que debes configurar son las variables de entorno para las variables ISC_USER y ISC_PASSWORD. Que nos serviría para autentificar nuestro usuario en Interbase/Firebird, de no configurar éstas variables arrojará el error diciendo que el usuario y contraseña no están definidas.

Ejemplo :

Desde una sesión DOS ejecuta éstas dos líneas ...

SET ISC_USER=SYSDBA
SET ISC_PASSWORD=masterkey

En Linux ...

export ISC_USER=SYSDBA
export ISC_PASSWORD=masterkey

... sin embargo, en Linux existe otro programa llamado isql (unixodbc), así que sería recomandable renombrar el archivo, por ejemplo a fsql.

También podrías dejar configurado permanente, agregando estas líneas en el archivo AUTOEXEC.BAT, para ordenadores con Windows 9x, o para los ordenadores con NT, 2000 o XP, agregar a la variables de usuario dos nuevas variables, la primera sería ISC_USER con valor SYSDBA y la otra sería ISC_PASSWORD con valor masterkey.


Creando base de datos

Entonces para continuar, lo primero que podríamos hacer sería crear una base de datos ...

SQL> create database "d:\interbase\prueba.gdb" user 'SYSDBA' password 'masterkey';


Conectar a base de datos

después de haber creado la base de datos, nos conectaremos a ella ...

SQL> connect "d:\interbase\prueba.gdb";
Database: "d:\interbase\prueba.gdb"


Crear tablas en la base de datos

después de habernos conectado, crearemos tablas en nuestra base de datos recién creada ...

SQL> create table T1(col_1 int, col_2 char(10), col_3 varchar(25));


Conclusión

Con lo que he explicado hasta ahora basta para que se saquen conclusiones de la continuación de cualquier trabajo que se desee hacer con InterBase/FireBird.

Última edición por mauriciolangea; 30-abr-2006 a las 10:24.
mauriciolangea está desconectado   Responder Citando
Antiguo 30-abr-2003, 07:35   #36 (permalink)
cubis ha deshabilitado el karma
 
Avatar de cubis
 
Fecha de Ingreso: noviembre-2002
Ubicación: Medellín
Mensajes: 1.056
Enviar un mensaje por AIM a cubis Enviar un mensaje por MSN a cubis
Tema : Todas

Pregunta : ¿Qué es SQL?

Respuesta

SQL es el lenguaje con el cual le "Hablamos" a una base de datos, las bases de datos (la mayoria) funcionan bajo sentencias SQL.

SQL se programa atravez de scripts (programas), que usan la sintax de SQL que es muy simple.

SQL al mismo tiempo lo podemos llamar como lenguaje de programación porque con el programamos diferentes tipos de funciones para nuestro DBMS.

La sintax de SQL varia en algunos DBMS, la sintax de MySQL no es la misma que de Oracle.
__________________
[color=gray][size=1]Usuario Registrado de Linux #315639
cubis está desconectado   Responder Citando
Antiguo 07-may-2003, 15:02   #37 (permalink)
mauriciolangea está en el buen camino
 
Avatar de mauriciolangea
 
Fecha de Ingreso: noviembre-2002
Mensajes: 57
Enviar un mensaje por ICQ a mauriciolangea Enviar un mensaje por Skype™ a mauriciolangea
Interbase

Tema : Interbase

Pregunta : Mi base de datos esta corrupta, ¿Que puedo hacer?

Respuesta

La corrupción de base de datos puede ser reparado y en la mayoría de los casos corregido por GFIX o combinando GFIX y GBAK.

1. Las siguientes variables tienen que estar definidas.

SET ISC_USER=SYSDBA
SET ISC_PASSWORD=masterkey

2. Siempre debes asegurarte que estás trabajando con una copia de la base de datos, no la base de datos de producción. Usa en sistema operativo para hacer una copia de la base de datos. Debes tener acceso exclusivo para hacer esto.

copy employee.gdb basededatos.gdb

3. Ahora revisaremos si hay corrupción de base de datos.

gfix -v -full basededatos.gdb

4. Si con el comando anterior indica que hay problemas con la base de datos, necesitaremos repararlo.

gfix -mend -full -ignore basededatos.gdb

5. Ahora veremos si la corrupción ha sido reparada.

gfix -v -full basededatos.gdb

6. Si aún sigue habiendo problemas, necesitaremos realizar un respaldo y restauración completo. El su formato más simple el la línea de comando de respaldo sería:

gbak -backup -v -ignore basededatos.gdb basededatos.gbk

7. Sin embargo si GBAK se cae porque está teniendo problemas con la basura, entonces usa el siguiente comando:

gbak -backup -v -ignore -garbage basededatos.gdb basededatos.gbk

8. Si hay corrupción en las versiones del registro de una transacción del limbo, entonces usted necesitas incluir el interruptor -limbo:

gbak -backup -v -ignore -garbage -limbo basededatos.gdb basededatos.gbk

9. Ahora crea una nueva base de datos del respaldo:

gbak -create -v basededatos.gbk nuevabasededatos.gdb

Última edición por mauriciolangea; 01-feb-2006 a las 13:41.
mauriciolangea está desconectado   Responder Citando
Antiguo 14-may-2003, 11:33   #38 (permalink)
mauriciolangea está en el buen camino
 
Avatar de mauriciolangea
 
Fecha de Ingreso: noviembre-2002
Mensajes: 57
Enviar un mensaje por ICQ a mauriciolangea Enviar un mensaje por Skype™ a mauriciolangea
Interbase

Tema : Interbase

Pregunta : ¿Como se crean los usuarios en Interbase ?

Respuesta


La seguridad de InterBase está basada en el concepto de usuario. Los usuarios autorizados están almacenados en una base de datos de seguridad, que se llama ISC4.GDB. Cada servidor InterBase tiene su propia base de datos de seguridad, lo que significa que la definición del usuario sólo pertenece al servidor en donde está almacenado. El mismo usuario puede existir en varios servidores distintos, pero debe ser creado en cada uno de esos servidores donde es requerido. La base de datos también almacena la contraseña encriptada para cada usuario. Los usuarios en la base de datos de seguridad pueden acceder a todas las bases de datos que estén el servidor, siempre que estén autorizados para hacerlo.

El usuario puede tener un largo máximo de 31 caracteres. El usuario en discrimina entre mayúsculas o minúsculas. La contraseña puede tener un largo de 8 caracteres, y si distingue entre mayúsculas y minúsculas.

Para crear un usuario en Interbase, se hace con la siguiente línea de comando;


gsec -add prueba -pw prueba

Para mostrar los usuario que existen en la base de datos de seguridad;

gsec -display

user name uid gid full name
--------------------------------------------------------------------------------
SYSDBA 0 0
PRUEBA 0 0


Para eliminar un usuario Interbase;

gsec -del prueba
mauriciolangea está desconectado   Responder Citando
Antiguo 16-may-2003, 14:31   #39 (permalink)
mauriciolangea está en el buen camino
 
Avatar de mauriciolangea
 
Fecha de Ingreso: noviembre-2002
Mensajes: 57
Enviar un mensaje por ICQ a mauriciolangea Enviar un mensaje por Skype™ a mauriciolangea
Interbase

Tema : Interbase

Pregunta : ¿Cuanta información puede almacenar Interbase?

Respuesta


La mayoría de los límites reales de la base de datos Interbase/Firebird son prácticos en lugar de definidos por el software. Por ejemplo, puedes definir hasta 32767 columnas en una tabla.

Hoy dos restricciones significativas:

El máximo de indices por tablas es de 64.

El tamaño máximo de un índice es 254 bytes y es menos para las llaves compuestas.

Otros límites:

Los nombres de metadatos están restringido a 31 caracteres.

Las filas están restringidas a 32767 bytes

Una base de datos no puede contener más de 32767 tablas.

El tamaño máximo para una base de datos es alrededor de 7 terabytes.

Cada tabla puede almacenar aproximadamente 2**31 filas. Una tabla con filas largas - con muchos campos o campos largos - almacenará menos registros que una tabla con campos muy cortos.
mauriciolangea está desconectado   Responder Citando
Antiguo 20-may-2003, 09:54   #40 (permalink)
fenix4 está en el buen camino
 
Avatar de fenix4
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 172
Enviar un mensaje por MSN a fenix4 Enviar un mensaje por Yahoo  a fenix4
SQL 2000

Pregunta: Se puede agregar un registro a una tabla, dependiendo del ultimo valor actualizado en un campo de otra tabla

Respuesta: Si. Solo se tiene que revisar en la tabla inserted, que es la tabla del sistema donde se guardan los ultimos insert o update de las tablas (es como una tabla tmp). Esto se hace atravez de un desencadenador o trigger es cual se ejecutara cuando se haga un cambio en la tabla a la cual esta asignada el trigger. Luego de revisar si el campo de la tabla fue moficado con la funcion IF UPDATE (CAMPO ) se compara ese valor que se ha obtenido de la tabla inserted con el valor que se desea comparar. Posteriormente es buena idea revisar la tabla destino a ver si ese valor ya no esta alli. y luego se realiza el inser o update dependiendo del caso.


Ejemplo:
Código:
CREATE TRIGGER export_dir ON [dbo].[prog_acreditados_tmp] 
AFTER UPDATE 
AS
declare @situacion int
declare @nro_exp int
select @situacion = situacion, @nro_exp = nro_exp from inserted --revisa en la tabla inserted los valores de los campos
begin
IF UPDATE (situacion)	-- verifica si se modifico el campo situacion
	begin		
	if ((@situacion = 17) or (@situacion = 168) ) -- verifica si es informe favorable o si es acreditado
		begin
		if (select id from dbo.directorio_tmp where nro_exp = @nro_exp and tipo_exp = 90) is null --revisa en la tabla a ver si ya esta el registro
			begin   
			insert into dbo.directorio_tmp	(
					nivel,
					programa,
					mencion,
					areaconocimiento,
					grado,
					sede,
					instituto,
					nro_exp,
					tipo_exp
					) 
					SELECT
					nivel,
					LOWER(nombre),
					LOWER(mencion),
					area_conocimiento,
					grado,
					LOWER(sede),				
					institucion,
					nro_exp,
					'90' 
					from dbo.prog_acreditados_tmp 
					where nro_exp = @nro_exp    			
			end
		end
	end	
--raiserror('Situacion de dir_tmp %d de exp %d ',16,1,@situacion,@nro_exp) -- para verificar los valores
end
__________________
S.L.P.S.
fenix4 está desconectado   Responder Citando
Antiguo 12-feb-2004, 07:18   #41 (permalink)
victork_py está en el buen camino
 
Fecha de Ingreso: agosto-2003
Mensajes: 440
BD : Firebird

Pregunta : ¿Cómo conectar a la base de datos desde JSP?

Repuesta : Suponiendo los siguientes puntos :
- Firebird ya esta instalado.
- Se quiere acceder a la BD “ejemplo.gdb” desde una aplicación JSP ubicada en la carpeta “C:\ejemplo” del servidor web.
- La BD esta ubicada en la carpeta “C:\db_ejemplo”
- La BD contiene una tabla llamada clientes y se quiere hacer un SELECT a dicha tabla.

Siga los siguientes pasos:

- Bajar el archivo FirebirdSQL-1.0.1.ZIP
- En la carpeta donde están ubicados los archivos JSP, crear la carpeta WEB-INF y dentro de WEB-INF la carpeta lib.
- Copiar todos los archivo con extensión JAR a la carpeta lib
- El siguiente código es para conectarse a la BD:

Class.forName("org.firebirdsql.jdbc.FBDriver");
conn = DriverManager.getConnection("jdbc:firebirdsql:loca lhost:C:\\ejemplo\\ejemplo.gdb?lc_ctype=ISO8859_1" , “SYSDBA”, “masterkey”);

Observaciones :
- La variable lc_ctype indica el charset que se usa para la conexión, si no se indica explícitamente el ISO8859_1, usará el charset por defecto y lanzará una excepción cuando se intenta insertar “ñ”, o vocales con acento.
- Esta usando el usuario SYSDBA con su password por defecto, si desea usar otro usuario o cambió la contraseña de SYSDBA debe cambiar al usuario y la contraseña adecuada.
- La variable conn es de tipo Connection

Espero que les sirva.
victork_py está desconectado   Responder Citando
Antiguo 17-mar-2004, 11:13   #42 (permalink)
mauriciolangea está en el buen camino
 
Avatar de mauriciolangea
 
Fecha de Ingreso: noviembre-2002
Mensajes: 57
Enviar un mensaje por ICQ a mauriciolangea Enviar un mensaje por Skype™ a mauriciolangea
Interbase

Tema : Interbase

Pregunta : ¿Como permito que los usuarios puedan modificar su propia contraseña?

Respuesta

La manera más sencilla es hacer un GRANT UPDATE a la tabla USERS para que sea una tabla PUBLICA, además de crear u TRIGGER para prevenir que los usuarios puedan cambiar la contraseña de otros usuarios, a excepción de SYSDBA.

Debes conectarte a la base de datos de seguridad de Interbase (isc4.gdb) ...


En windows ...

CONNECT 'C:\Archivos de programa\Borland\InterBase\isc4.gdb'
USER 'SYSDBA'
PASSWORD 'masterkey';



En Linux ...

CONNECT /opt/interbase/isc4.gdb
USER 'SYSDBA'
PASSWORD 'masterkey';



Creamos el TRIGGER, para que los usuarios no se cambién la contraseña entre sí, a excepción de SYSDBA.


CREATE EXCEPTION E_NO_RIGHT
'No estás autorizado para modificar a éste usuario.';

SET TERM !!;
CREATE TRIGGER user_name_bu
FOR USERS
BEFORE UPDATE
AS
BEGIN
IF (NOT (USER='SYSDBA' OR USER=OLD.USER_NAME))
THEN EXCEPTION E_NO_RIGHT;
END !!
SET TERM ;!!



Y finalmente realizamos el GRANT UPDATE sobre la table USERS, para que sea una tabla PUBLICA.


GRANT UPDATE(PASSWD, GROUP_NAME, UID, GID, FIRST_NAME, MIDDLE_NAME, LAST_NAME)
ON USERS
TO PUBLIC;



Esta modificación tiene una gran falencia, todos los usuarios y sus contraseñas encriptadas, quedarán visibles al PUBLICO, de esta manera es más fácil descargar la lista de usuarios y intentar romperlas a fuerza bruta.
mauriciolangea está desconectado   Responder Citando
Antiguo 13-jul-2004, 12:40   #43 (permalink)
mauriciolangea está en el buen camino
 
Avatar de mauriciolangea
 
Fecha de Ingreso: noviembre-2002
Mensajes: 57
Enviar un mensaje por ICQ a mauriciolangea Enviar un mensaje por Skype™ a mauriciolangea
InterBase

Tema : InterBase

Pregunta : ¿Como puedo cambiar la contraseña de SYSDBA?

Respuesta :

SYSDBA es la cuenta administrativa por defecto, cuando InterBase/Firebird es instalado por primera vez, y el el único usuraio autorizado. Esta cuenta especializada tiene acceso total a todas las bases de datos del servidor y está por sobre las restricciones de seguridad. Por lo tanto, es extremadamente importante cambiar la contraseña de SYSDBA de la por defecto, la que es "masterkey", por otra que sólo los administradores sepan.

El siguinete procedimiento se asume que no tienes una herramienta gráfica y que debes usar los commandos de consola.
  1. Vaya a la máquina servidor y conectese como usuario Administrador o root.
  2. Sobre una máquina con windows abra un dialogo de consola (MS-DOS).
  3. Cambiese al directorio en donde InterBase/Firebird fue instalado. (Sobre Windows esto sería C:\Archivos de programa\Firebird\bin ó C:\Archivos de programa\Borland\InterBase\bin. Sobre Linux sería /opt/interbase/bin ).
  4. Para conectarte al servidor InterBase/Firebird escribe lo siguiente, para conectarte (Las mayúsculas importan):
    gsec -user sysdba -password masterkey
    Después deberías ver la utilidad:
    GSEC>
  5. Escribe el siguiente comando para cambiar la contraseña:

    GSEC> modify sysdba -pw nuevacontraseña
    Donde "nuevacontraeña" es la nueva contraseña de SYSDBA.
  6. Ahora sal de GSEC.
    GSEC> quit
mauriciolangea está desconectado   Responder Citando
Antiguo 10-sep-2004, 09:13   #44 (permalink)
Edypu ha deshabilitado el karma
 
Avatar de Edypu
 
Fecha de Ingreso: octubre-2003
Ubicación: La Paz - Bolivia
Mensajes: 378
Enviar un mensaje por MSN a Edypu Enviar un mensaje por Skype™ a Edypu
BD: MySQL

Autor: MySQL AB
Traductor: MySQL Hispano

Pregunta: Conectar y desconectarse al servidor

Respuesta:

Para conectarse al servidor necesitas el nombre de usuario MySQL y el Password si el servidor se esta ejecutando en una maquian distinta a la que estás conectada , necesitas especificar también el nombre de Host

shell> MySql -h host -u user -p
Enter password : ***********
welcome to the MySQL monitor. Commands en whit ; or \g.
Your MySQL connetion id is 459 to server version : 3.22.20a-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> help

El prompt te indica que MySQL ya está listo para las instruciones de commandos.

Algunas instalaciones MySql permiten a los usuarios conectarse como usuarios "anonymuos" (sin nombre) el servidor en el host local. Si este es el caso en tu máquina, deberías ser capaz de conectar a ese servidor invocando mysql sin ninguna opción:

shell>mysql
Bye

Una vez que hayas conectado con éxito, pudes desconectarte en cualquier momento tecleando QUIT en el promt mysql>

mysql>quit

tambien puedes desconectarte usando CTRL + D
__________________
programador web 2.0 php/mysql
Diseño y desarrollo de paginas web 2.0

Última edición por Edypu; 10-sep-2004 a las 09:41. Razón: Add autor
Edypu está desconectado   Responder Citando
Antiguo 10-sep-2004, 09:25   #45 (permalink)
Edypu ha deshabilitado el karma
 
Avatar de Edypu
 
Fecha de Ingreso: octubre-2003
Ubicación: La Paz - Bolivia
Mensajes: 378
Enviar un mensaje por MSN a Edypu Enviar un mensaje por Skype™ a Edypu
BD: MySQL

Autor:
MySQL AB
Traductor: MySQL Hispano

Pregunta: Haciendo consultas
Respuesta:

Asegúrate de que estás conectado al servidor, como se ha discutido en secciones anteriores. El hacerlo no implica que tengas seleccionada ninguna base de datos con la que trabajar, pero está bien. En este punto, es más importante averiguar un poco sobre cómo lanzar consultas que lanzarse directamente a la creación de tablas, cargar datos en ellas y recuperar los datos de las mismas. Esta sección describe los principios básicos de la entrada de comandos, usando varias consultas que puedes probar para familiarizarte con la forma de trabajo de mysql.
Aquí presentamos un comando simple que pide al servidor que nos diga su número de versión y fecha actual. Tecléalo como se muestra a continuación siguiendo el prompt mysql> y pulsa la tecla RETURN:


mysql> SELECT VERSION(), CURRENT_DATE;
+-----------+--------------+
| version() | CURRENT_DATE |
+-----------+--------------+
| 3.22.23b | 2000-01-05 |
+-----------+--------------+
1 row in set (0.06 sec)

mysql>

Esta consulta ilustra muchas cosas sobre mysql:

* Un comando consiste normalmente de una sentencia SQL seguida por un punto y coma. (Existen algunas excepciones donde no es necesario el punto y coma. QUIT, mencionado más adelante, es una de ellas. Conoceremos otras más adelante.)

* Cuando lanzas un comando, mysql lo envía al servidor para su ejecución y muestra los resultados, después imprime otro mysql> para indicar que está listo para otro comando.

* mysql muestra la salida de una consulta como una tabla (filas y columnas). La primera fila contiene etiquetas para las columnas. Las siguientes filas son el resultado de la consulta. Normalmente, las etiquetas de las columnas son los nombres de las columnas que has obtenido de la base de datos. Si pides el valor de una expresión en vez de una columna de una tabla (como en el ejemplo anterior), mysql etiqueta la columna usando la propia expresión.

* mysql muestra el número de filas que se han dado como resultado, y cuánto tiempo llevó la ejecución de la consulta, lo que te da una idea aproximada del rendimiento del servidor. Estos valores son imprecisos porque representan tiempo real (no tiempo de CPU o máquina), y porque están afectados por factores como la carga del servidor y la latencia de la red. (Por cuestiones de brevedad, la línea "rows in set" no se mostrará en los ejemplos posteriores de este capítulo.)

Las palabras clave pueden ser tecleadas en cualquier combinación mayúscula/minúscula. Las siguientes consultas son equivalentes:

mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;

He aquí otra consulta. Demuestra que puedes usar mysql como una calculadora sencilla:

mysql> SELECT SIN(PI()/4), (4+1)*5;
+-------------+---------+
| SIN(PI()/4) | (4+1)*5 |
+-------------+---------+
| 0.707107 | 25 |
+-------------+---------+

Los comandos vistos hasta aquí han sido relativamente cortos, sentencias de una sola línea. También puedes insertar múltiples sentencias en una sola línea. Simplemente, termina cada una con un punto y coma:

mysql> SELECT VERSION(); SELECT NOW();

+-----------+
| version() |
+-----------+
| 3.22.23b |
+-----------+

+---------------------+
| NOW() |
+---------------------+
| 2000-01-05 17:33:16 |
+---------------------+

Un comando no necesita ser dado todo en una sóla línea, así pues, los comandos largos que requieran varias lineas no son un problema. mysql determina cuando termina tu sentencia buscando el punto y coma final, no buscando el final de la línea de entrada. (En otras palabras, mysql acepta entrada de libre formato: recoleta las líneas de entrada pero no las ejecutahasta que vea el punto y coma.)

Aquí tenemos un simple ejemplo de múltiples líneas:

mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
+----------------+--------------+
| USER() | CURRENT_DATE |
+----------------+--------------+
| root@localhost | 2000-01-05 |
+----------------+--------------+
__________________
programador web 2.0 php/mysql
Diseño y desarrollo de paginas web 2.0

Última edición por Edypu; 10-sep-2004 a las 09:42. Razón: add autor
Edypu está desconectado   Responder Citando
Antiguo 10-sep-2004, 09:39   #46 (permalink)
Edypu ha deshabilitado el karma
 
Avatar de Edypu
 
Fecha de Ingreso: octubre-2003
Ubicación: La Paz - Bolivia
Mensajes: 378
Enviar un mensaje por MSN a Edypu Enviar un mensaje por Skype™ a Edypu
BD: MySQL

Autor: MySQL AB
Traductor: MySQL Hispano

Pregunta: Creando y usando una base de datos

Respuesta:

Ahora que conocemos como escribir y ejecutar sentencias, es tiempo de accesar a una base de datos.

Supongamos que tenemos diversas mascotas en casa (nuestro pequeño zoológico) y deseamos tener registros de los datos acerca de ellas. Podemos hacer esto al crear tablas que guarden esta información, para que posteriormente la consulta de estos datos sea bastante fácil y de manera muy práctica. Esta sección muestra como crear una base de datos, crear una tabla, incorporar datos en una tabla, y recuperar datos de las tablas de diversas maneras

La base de datos "zoológico" será muy simple (deliveradamente), pero no es difícil pensar de situaciones del mundo real en la cual una base de datos similar puede ser usada.

Primeramente usaremos la sentencia SHOW para ver cuáles son las bases de datos existentes en el servidor al que estamos conectados:

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)

mysql>Es probable que la lista de bases de datos que veamos sea diferente en nuestro caso, pero seguramente las bases de datos "mysql" y "test" estarán entre ellas. En particular, la base de datos "mysql" es requerida, ya que ésta tiene la información de los privilegios de los usuarios de MySQL. La base de datos "test" es creada durante la instalación de MySQL con el propósito de servir como área de trabajo para los usuarios que inician en el aprendizaje de MySQL.

Se debe anotar también que es posible que no veamos todas las bases de datos si no tenemos el privilegio SHOW DATABASES. Se recomienda revisar la sección del manual de MySQL dedicada a los comandos GRANT y REVOKE.

Si la base de datos "test" existe, hay que intentar accesar a ella:

mysql> USE test
Database changed
mysql>Observar que USE, al igual que QUIT, no requieren el uso del punto y coma, aunque si se usa éste, no hay ningún problema. El comando USE es especial también de otra manera: éste debe ser usado en una sóla línea.

Podríamos usar la base de datos "test" (si tenemos acceso a ella) para los ejemplos que vienen a continuación, pero cualquier cosa que hagamos puede ser eliminada por cualquier otro usuario que tenga acceso a esta base de datos. Por esta razón, es recomendable que preguntemos al administrador MySQL acerca de la base de datos que podemos usar. Supongamos que deseamos tener una base de datos llamada "zoologico" (nótese que no se está acentuando la palabra) a la cual sólo nosotros tengamos acceso, para ello el administrador necesita ejecutar un comando como el siguiente:

mysql> GRANT ALL on zoologico.* TO MiNombreUsuario@MiComputadora
-> IDENTIFIED BY 'MiContraseña';en donde MiNombreUsuario es el nombre de usuario asignado dentro del contexto de MySQL, MiComputadora es el nombre o la dirección IP de la computadora desde la que nos conectamos al servidor MySQL, y MiContraseña es la contraseña que se nos ha asignado, igualmente, dentro del ambiente de MySQL exclusivamente. Ambos, nombre de usuario y contraseña no tienen nada que ver con el nombre de usuario y contraseña manejados por el sistema operativo (si es el caso).

Si el administrador creó la base de datos al momento de asignar los permisos, podemos hacer uso de ella. De otro modo, nosotros debemos crearla:

mysql> USE zoologico
ERROR 1049: Unknown database 'zoologico'
mysql>El mensaje anterior indica que la base de datos no ha sido creada, por lo tanto necesitamos crearla.

mysql> CREATE DATABASE zoologico;
Query OK, 1 row affected (0.00 sec)

mysql> USE zoologico
Database changed
mysql>Bajo el sistema operativo Unix, los nombres de las bases de datos son sensibles al uso de mayúsculas y minúsculas (no como las palabras clave de SQL), por lo tanto debemos de tener cuidado de escribir correctamente el nombre de la base de datos. Esto es cierto también para los nombres de las tablas.

Al crear una base de datos no se selecciona ésta de manera autómatica; debemos hacerlo de manera explícita, por ello usamos el comando USE en el ejemplo anterior.

La base de datos se crea sólo una vez, pero nosotros debemos seleccionarla cada vez que iniciamos una sesión con mysql. Por ello es recomendable que se indique la base de datos sobre la que vamos a trabajar al momento de invocar al monitor de MySQL. Por ejemplo:

shell>mysql -h casita -u blueman -p zoologico

Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17 to server version: 3.23.38-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer

mysql>Observar que "zoologico" no es la contraseña que se está proporcionando desde la línea de comandos, sino el nombre de la base de datos a la que deseamos acceder. Si deseamos proporcionar la contraseña en la línea de comandos después de la opción "-p", debemos de hacerlo sin dejar espacios (por ejemplo, -phola123, no como -p hola123). Sin embargo, escribir nuestra contraseña desde la línea de comandos no es recomendado, ya que es bastante inseguro.

__________________
programador web 2.0 php/mysql
Diseño y desarrollo de paginas web 2.0

Última edición por Edypu; 10-sep-2004 a las 09:44. Razón: add autor
Edypu está desconectado   Responder Citando
Antiguo 10-sep-2004, 09:50   #47 (permalink)
Edypu ha deshabilitado el karma
 
Avatar de Edypu
 
Fecha de Ingreso: octubre-2003
Ubicación: La Paz - Bolivia
Mensajes: 378
Enviar un mensaje por MSN a Edypu Enviar un mensaje por Skype™ a Edypu
BD: MySQL

Autor:
MySQL AB
Traductor: MySQL Hispano

Pregunta: Creando una tabla
Respuesta:

Crear la base de datos es la parte más fácil, pero en este momento la base de datos está vacía, como lo indica el comando SHOW TABLES:
mysql> SHOW TABLES;
Empty set (0.00 sec)La parte un tanto complicada es decidir la estructura que debe tener nuestra base de datos: qué tablas se necesitan y qué columnas estarán en cada tabla.

En principio, necesitamos una tabla que contenga un registro para cada una de nuestras mascotas.

Ésta puede ser una tabla llamada mascotas, y debe contener por lo menos el nombre de cada uno de nuestros animalitos. Ya que el nombre en sí no es muy interesante, la tabla debe contener alguna otra información. Por ejemplo, si más de una persona en nuestra familia tiene una mascota, es probable que tengamos que guardar la información acerca de quien es el dueño de cada mascota. Así mismo, también sería interesante contar con alguna información más descriptiva tal como la especie, y el sexo de cada mascota.

¿Y que sucede con la edad?. Esto puede ser también de interés, pero no es una buena idea almacenar este dato en la base de datos. La edad cambia conforme pasa el tiempo, lo cual significa que debemos de actualizar los registros frecuentemente. En vez de esto, es una mejor idea guardar un valor fijo, tal como la fecha de nacimiento. Entonces, cuando necesitemos la edad, la podemos calcular como la diferencia entre la fecha actual y la fecha de nacimiento. MySQL proporciona funciones para hacer operaciones entre fechas, así que no hay ningún problema.

Al almacenar la fecha de nacimiento en lugar de la edad tenemos algunas otras ventajas:

Podemos usar la base de datos para tareas tales como generar recordatorios para cada cumpleaños próximo de nuestras mascotas. Podemos calcular la edad en relación a otras fechas que la fecha actual. Por ejemplo, si almacenamos la fecha en que murió nuestra mascota en la base de datos, es fácil calcular que edad tenía nuestro animalito cuando falleció. Es probable que estemos pensando en otro tipo de información que sería igualmente útil en la tabla "mascotas", pero para nosotros será suficiente por ahora contar con información de nombre, propietario, especie, nacimiento y fallecimiento.

Usaremos la sentencia CREATE TABLE para indicar como estarán conformados los registros de nuestras mascotas.

mysql> CREATE TABLE mascotas(
-> nombre VARCHAR(20), propietario VARCHAR(20),
-> especie VARCHAR(20), sexo CHAR(1), nacimiento DATE,
-> fallecimento DATE);
Query OK, 0 rows affected (0.02 sec)

mysql>VARCHAR es una buena elección para los campos nombre, propietario, y especie, ya que los valores que almacenarán son de longitud variable. No es necesario que la longitud de estas columnas sea la misma, ni tampoco que sea de 20. Se puede especificar cualquier longitud entre 1 y 255, lo que se considere más adecuado. Si resulta que la elección de la longitud de los campos que hemos hecho no resultó adecuada, MySQL proporciona una sentencia ALTER TABLE que nos puede ayudar a solventar este problema.

El campo sexo puede ser representado en una variedad de formas, por ejemplo, "m" y "f", o tal vez "masculino" y "femenino", aunque resulta más simple la primera opción.

El uso del tipo de dato DATE para los campos nacimiento y fallecimento debe de resultar obvio.

Ahora que hemos creado la tabla, la sentencia SHOW TABLES debe producir algo como:

mysql> SHOW TABLES;
+---------------------+
| Tables_in_zoologico |
+---------------------+
| mascotas |
+---------------------+
1 row in set (0.00 sec)

mysql>Para verificar que la tabla fué creada como nosotros esperabamos, usaremos la sentencia DESCRIBE:

mysql> DESCRIBE mascotas;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| nombre | varchar(20) | YES | | NULL | |
| propietario | varchar(20) | YES | | NULL | |
| especie | varchar(20) | YES | | NULL | |
| sexo | char(1) | YES | | NULL | |
| nacimiento | date | YES | | NULL | |
| fallecimento | date | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
6 rows in set (0.01 sec)

mysql>Podemos hacer uso de la sentencia DESCRIBE en cualquier momento, por ejempo, si olvidamos los nombres ó el tipo de las columnas en la tabla.
__________________
programador web 2.0 php/mysql
Diseño y desarrollo de paginas web 2.0
Edypu está desconectado   Responder Citando
Antiguo 10-sep-2004, 09:52   #48 (permalink)
Edypu ha deshabilitado el karma
 
Avatar de Edypu
 
Fecha de Ingreso: octubre-2003
Ubicación: La Paz - Bolivia
Mensajes: 378
Enviar un mensaje por MSN a Edypu Enviar un mensaje por Skype™ a Edypu
BD: MySQL

Autor:
MySQL AB
Traductor: MySQL Hispano

Pregunta: Cargar datos desde un fichero TXT
Respuesta:

Después de haber creado la tabla, ahora podemos incorporar algunos datos en ella, para lo cual haremos uso de las sentencias INSERT y LOAD DATA.
Supongamos que los registros de nuestras mascotas pueden ser descritos por los datos mostrados en la siguiente tabla.



Nombre Propietario Especie Sexo Nacimiento Fallecimento
Fluffy Arnoldo Gato f 1999-02-04
Mau Juan Gato m 1998-03-17
Buffy Arnoldo Perro f 1999-05-13
FanFan Benito Perro m 2000-08-27
Kaiser Diana Perro m 1998-08-31 1997-07-29
Chispa Omar Ave f 1998-09-11
Wicho Tomás Ave 2000-02-09
Skim Benito Serpiente m 2001-04-29

Debemos observar que MySQL espera recibir fechas en el formato YYYY-MM-DD, que puede ser diferente a lo que nosotros estamos acostumbrados.

Ya que estamos iniciando con una tabla vacía, la manera más fácil de poblarla es crear un archivo de texto que contenga un registro por línea para cada uno de nuestros animalitos para que posteriormente carguemos el contenido del archivo en la tabla únicamente con una sentencia.

Por tanto, debemos de crear u