• Sábado 21 de Diciembre de 2024, 19:29

Autor Tema:  Dudas Sobre Mysql  (Leído 2793 veces)

leoandres

  • Miembro activo
  • **
  • Mensajes: 79
    • Ver Perfil
Dudas Sobre Mysql
« en: Sábado 28 de Octubre de 2006, 17:55 »
0
Saludos...

Tengo que hacer un proyecto y me plantean que lo haga em MySQL, conozco otras BD (Sybase, SQL Server, Sql Anywhere) pero no MYSQL, de paso que he tratado de instalarlo y me dice que tengo un Firewall durante la instalación, pero eso es harina de otro costal... mis preguntas son:

1.- Se pueden definir dominios en MySql (User Defined Data Types)?
2.- Tengo entendido que a partir de la versión 5 es que se pueden definir Triggers, Funciones y Procedimientos... es eso correcto?
3.- Hay limitación en la cantidad de triggers para cada tabla (Before, Insert, After Insert, etc.).
4.- En caso de multiples Triggers para la misma tabla ej... 2 o 3 Triggers After Insert, tengo tambien la posibilidad de numeración de secuencia de ejecución como en las otras BD?
5.-  Favor definirme las longitudes máximas para nombre de tabla, nombre de columna, nombre de trigger, nombre de función o procedure.
6.- Existe el check para la columna? ej. en SQL Anywhere es 'CHECK (@ Column >= 1 and @Column <= 9)' para un valor entre 1 y 9 de la columna. Si existe me podrian definir un ejemplo parecido,
7.- Como ejecuto un Script que tenga la creación de todas las tablas, columnas, relaciones, etc... de una BD, ya que uso un software que me permite generar la BD directamente si me conecto a ella o puedo generar un Script con todas las instrucciones SQL, en ese caso como separo instruccion de instruccion? ( en otras bases de datos para un script se usa 'go' entre instruccion e instruccion, ej.:
Create Table Tabla_1(....);
go
Create Table Tabla_2(....);
go
...
etc. etc..

Gracias por su atención para aclararme por ahora estas dudas que de seguro tendré más...
leopoldotaylhardat@hotmail.com

Leopoldo Taylhardat

Software, Organización y Sistemas

Maracay, Venezuela


"En computación solo hay una cosa segura...
   que no hay nada seguro" - Leopoldo Taylhardat

"Cada alternativa que tengas durante la búsqueda,
      será una meta en sí misma" - Jorge Olguín.

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Dudas Sobre Mysql
« Respuesta #1 en: Sábado 28 de Octubre de 2006, 21:47 »
0
Hola

mira espero poder ayudarte... :)


1-- Por el momento no hay manera de declarar UDT estos son los Tipos de datos Soportados

2-- Asi es es correcto apartir de la version 5.0.2

3-- Puedes definir uno por cada combinacion entre el evento  y el tiempo en que se ejecuta la accion ej. (BEFORE INSERT,AFTER INSERT)....  asi que pudieran ser 6 disparadores por tabla.... por ahora...

"There cannot be two triggers for a given table that have the same trigger action time and event. For example, you cannot have two BEFORE UPDATE triggers for a table. But you can have a BEFORE UPDATE and a BEFORE INSERT trigger, or a BEFORE UPDATE  and an AFTER UPDATE trigger." Leer mas...


4--De Momento no es posible cambiar el orden de la ejecucion aunque existe ACTION_ORDER en la tabla de TRIGGERS en INFORMATION_SCHEMA probablemente para versiones posteriores...

"El comando ACTION_ORDER contiene la posición ordinal de la acción del disparador en la lista de todos los disparadores similares en la misma tabla. Actualmente, este valor siempre es 0, porque no es posible tener más de un disparador con el mismo EVENT_MANIPULATION y ACTION_TIMING en la misma tabla." Leer más...


5--Reglas para los nombres MySQL

6-- Check es Igual en MySQL ej.

<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->CREATE TABLE empleados (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `edad` INTEGER UNSIGNED Check (edad>18 and edad<99),
  PRIMARY KEY(`id`)
)
<!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->

Aunque es ignorado por MySQL :P ... osea no funciona (al menos en windows)  lo que puedes hacer es crear Llaves Foraneas para poder crear las restricciones (constraints)

7-- Pues generas un archivo de texto con todas las instrucciones regularmente con extencion SQL anque no es relevante ya que es texto.... y lo ejecutas no requieres utilizar Go ni ningun 'separador' ej...

base.sql
<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->CREATE DATABASE bd;
USE bd;

[color=blue;font-weight]DROP[/color] TABLE IF EXISTS `account`;
CREATE TABLE `account` (
  `acct_num` int(11) NOT NULL auto_increment,
  `amount` decimal(10,2) default NULL,
  PRIMARY KEY  (`acct_num`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

[color=blue;font-weight]INSERT[/color] INTO `account` (`acct_num`,`amount`) VALUES
 (1,'20.00'),
 (4,'400.00'),
 (5,'500.00');

[color=blue;font-weight]DROP[/color] TABLE IF EXISTS `empleados`;
CREATE TABLE `empleados` (
  `idempleado` int(11) NOT NULL auto_increment,
  `nombre` varchar(32) default NULL,
  `departamento` varchar(1) default NULL,
  `sueldo` double default NULL,
  PRIMARY KEY  (`idempleado`),
  KEY `id` (`idempleado`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

[color=blue;font-weight]INSERT[/color] INTO `empleados` (`idempleado`,`nombre`,`departamento`,`sueldo`) VALUES
 (1,'Juan Perez','1',5000),
 (2,'Laura Morales','',5500),
 (3,'Luis Gutierrez','',8500),
 (4,'Pedro Solar','',500),
 (5,'David Vilchez','',5500);
<!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->

para ejecutarlo puedes hacer esto por ejemplo:

Linea de comando: mysql>\. C:\base.sql;

O puedes usar algun programa con entorno grafico que te ayude como:Saludos
y Suerte
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

leoandres

  • Miembro activo
  • **
  • Mensajes: 79
    • Ver Perfil
Re: Dudas Sobre Mysql
« Respuesta #2 en: Domingo 29 de Octubre de 2006, 01:03 »
0
Gracias... f_tanori, me aclaraste algo el panorama, me surgió otra duda leyendo un poco mas de MySQL, esta es:

No puedo hacer sub_querys dentro de un select, por ej:

Select codigo, nombre from tabla1 where codigo in select codigo from tabla2 where fecha_nacimiento > '1995/01/01'...

es decir en este caso COMO EJEMPLO, me buscaría en una tabla dos columnas solo si el identificador existe en otra tabla (tabla2) donde la fecha de nacimiento para ese dato sea superior al 1ro, de enero de 1995...

y así por el estilo puedo necesitar concatenar varios subquerys...

¿es posible hacer subquerys?

Gracias por tu atención...
leopoldotaylhardat@hotmail.com

Leopoldo Taylhardat

Software, Organización y Sistemas

Maracay, Venezuela


"En computación solo hay una cosa segura...
   que no hay nada seguro" - Leopoldo Taylhardat

"Cada alternativa que tengas durante la búsqueda,
      será una meta en sí misma" - Jorge Olguín.

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Dudas Sobre Mysql
« Respuesta #3 en: Domingo 29 de Octubre de 2006, 06:00 »
0
Hola

pues esa consulta la puedes obtener asi



<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]Select[/color] t1.codigo, t1.nombre from tabla1 t1, tabla2 t2 where t1.codigo=t2.codigo and t2.fecha_nacimiento > '1995/01/01'
<!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->

o asi
Para saber si existe en la tabla 2...

<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]SELECT[/color] * FROM tabla1 t1 where exists ([color=blue;font-weight]SELECT[/color] 1 FROM tabla2 t2 WHERE t1.codigo=t2.codigo );
<!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->

o bien los que no existen  .. where not exists ...

tambien puedes usar  las subconsulta de este tipo..

<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]SELECT[/color] t1.*,([color=blue;font-weight]SELECT[/color] fecha_nacimiento FROM tabla2 WHERE tabla2.codigo=t1.codigo ) as FechaDNacimiento FROM tabla1 t1, tabla2 t2 WHERE t2.fecha_nacimiento > '1995/01/01'
<!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->


Suerte espero te sea de ayuda
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================