home

=media type="custom" key="29449437"= FUNDAMENTOS DE BASE DE DATOS

Una base de datos es como una biblioteca puede considerarse una base de datos compuesta en su mayoría por documentos y textos impresos en papel e indexados para su consulta.


 * DEFINICIONES **


 * BASE DE DATOS: **

En donde los datos son almacenados dentro de una tabla o conjunto de tablas interrelacionadas entre si, para cumplir un objetivo en común

Conjunto de caracteres con algún valor ; pueden ser numéricos, alfabéticos o alfanuméricos Es el conjunto ordenado de datos que son manejados según la necesidad del usuario
 * Dato: **
 * Información **

Es un objeto que existe y se distingue de otros objetos de acuerdo a sus características llamadas atributos pueden ser abstractas o concretas
 * Entidad **


 * Tabla: **

Es la representación de una entidad en donde se identifican los atributos en campos

Es un espacio para almacenar un dato que cumple una característica en particular de una entidad Es el conjunto de datos regidos por campos de una o varias tablas Es atributo que consideramos clave para la identificación de una entidad Es uno o mas campos de un tabla que hacen referencia al campo o campos de clave principal de otra tabla
 * Campo **
 * Registro: **
 * Llave primaria **
 * Llave foránea **


 * modelo entidad relación de base de datos **

El Modelo de Entidad Relación es un modelo de datos basado en una percepción del mundo real que consiste en un conjunto de objetos básicos llamados entidades y relaciones entre estos objetos, implementándose en forma gráfica a través del Diagrama Entidad Relación.

Una ** relación ** es la asociación que existe entre dos o más entidades Un ** conjunto de relaciones ** es un grupo de relaciones del mismo tipo
 * RELACIONES Y CONJUNTO DE RELACIONES **


 * TIPOS DE RELACIONES **


 * Relación uno a uno **

Cuando una entidad esta relacionada con una entidad diferente y viceversa Ejemplo: Un esposo solo pude tener una mujer


 * Relación uno a muchos **



Significa que una entidad del tipo A puede relacionarse con cualquier cantidad de entidades de tipo B, y una entidad de tipo B solo puede relacionarse con una entidad de tipo A Ejemplo: Un cliente puede tener muchas facturas a su nombre, pero una factura esta dirigida a un solo cliente


 * Muchas a muchas[[image:relaciones.JPG width="800" height="583"]] **

Establece que cualquier cantidad de entidades de tipo A pueden estar relacionados en cualquier cantidad de entidades del tipo B Ejemplo: Un medico puede tener muchos pacientes, pero un paciente puede tener muchos médico

descargar DBdesigner http://www.fabforce.net/downloadfile.php


 * MANEJO DE DBDESIGNER **

media type="custom" key="20647497" width="446" height="446"

taller1

1) Explique que es base de datos 2) Que es un dato 3) Que es un tipo de dato 4) Que es longitud de datos 5) Que es información 6) Que es campo 7) Que es registro 8) Que es llave primaria 9) Que es llave foránea 10) Explique la relación uno a uno 11) Explique la relación uno a muchos 12) Explique la relación muchos a muchos

investigación

Que es InnDB y MySAM

Contiene la información referente a la estructura de la base de datos
 * Diccionario de datos **

Database Model plugin_tmp.xml


 * carro ||
 * || ColumnName || DataType || PrimaryKey || NotNull || Flags || Default Value || Comment || AutoInc ||
 * **plac_carr** || **INTEGER** || PK || NN || UNSIGNED ||  ||   || AI ||
 * mode_carr || TEXT ||  ||   ||   ||   ||   ||   ||
 * tipo_carr || TEXT ||  ||   ||   ||   ||   ||   ||
 * colo_carr || TEXT ||  ||   ||   ||   ||   ||   ||   ||
 * || IndexName || IndexType || Columns ||
 * PRIMARY || PRIMARY || plac_carr ||  ||


 * cliente ||
 * || ColumnName || DataType || PrimaryKey || NotNull || Flags || Default Value || Comment || AutoInc ||
 * **codi_clie** || **INTEGER** || PK || NN || UNSIGNED ||  ||   || AI ||
 * nomb_clie || TEXT ||  || NN ||   ||   ||   ||   ||
 * apel_clie || TEXT ||  || NN ||   ||   ||   ||   ||
 * tele_clie || INTEGER(7) ||  || NN || UNSIGNED ||   ||   ||   ||
 * dire_clie || TEXT ||  ||   ||   ||   ||   ||   ||   ||
 * || IndexName || IndexType || Columns ||
 * PRIMARY || PRIMARY || codi_clie ||  ||

carro_plac_carr ||
 * cliente_has_carro ||
 * || ColumnName || DataType || PrimaryKey || NotNull || Flags || Default Value || Comment || AutoInc ||
 * **cliente_codi_clie** || **INTEGER** || PK || NN || UNSIGNED ||  ||   ||   ||
 * **carro_plac_carr** || **INTEGER** || PK || NN || UNSIGNED ||  ||   ||   ||   ||
 * || IndexName || IndexType || Columns ||
 * PRIMARY || PRIMARY || cliente_codi_clie
 * cliente_has_carro_FKIndex1 || Index || cliente_codi_clie ||
 * cliente_has_carro_FKIndex2 || Index || carro_plac_carr ||  ||

scrip de creasion

codigo de creasion de la base de datos en lenguaje mysql

CREATE TABLE carro ( plac_carr INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,  mode_carr TEXT NULL,  tipo_carr TEXT NULL,  colo_carr TEXT NULL,  PRIMARY KEY(plac_carr)  );

CREATE TABLE cliente ( codi_clie INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,  nomb_clie TEXT NOT NULL,  apel_clie TEXT NOT NULL,  tele_clie INTEGER(7) UNSIGNED NOT NULL,  dire_clie TEXT NULL,  PRIMARY KEY(codi_clie)  );

CREATE TABLE cliente_has_carro ( cliente_codi_clie INTEGER UNSIGNED NOT NULL,  carro_plac_carr INTEGER UNSIGNED NOT NULL,  PRIMARY KEY(cliente_codi_clie, carro_plac_carr),  INDEX cliente_has_carro_FKIndex1(cliente_codi_clie),  INDEX cliente_has_carro_FKIndex2(carro_plac_carr),  FOREIGN KEY(cliente_codi_clie)  REFERENCES cliente(codi_clie)  ON DELETE NO ACTION  ON UPDATE NO ACTION,  FOREIGN KEY(carro_plac_carr)  REFERENCES carro(plac_carr)  ON DELETE NO ACTION  ON UPDATE NO ACTION  );


 * MySQL **.

Para empezar, crearemos una base de datos para nosotros solos, y la llamaremos "prueba". Para crear una base de datos se usa una sentencia [|CREATE DATABASE] :

mysql> CREATE DATABASE prueba; Query OK, 1 row affected (0.03 sec)

mysql> Podemos averiguar cuántas bases de datos existen en nuestro sistema usando la sentencia [|SHOW DATABASES] :

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

mysql>


 * Tabla Desc : **

Podemos examinar la estructura de una tabla usando la sentencia **DESCRIPTION** o **DESC**. El ejemplo siguiente describe ula estructura de la tabla student.

mysql> desc student;

+-+-+--+-+-+---+

| Field | Type | Null | Key | Default | Extra |

+-+-+--+-+-+---+

| studid | int(10) | YES | | NULL | |

| name | varchar(20) | YES | | NULL | |

| address | varchar(40) | YES | | NULL | |

| phone | int(10) | YES | | NULL | |

+-+-+--+-+-+---+

4 rows in set (0.00 sec)

También podemos usar la sentencia **SHOW FIELDS FROM** para mostrar la misma estructura.

mysql> SHOW FIELDS FROM student;


 * Listando Tablas : **

Podemos listar todas las tablas en la base de datos usando el ejemplo **SHOW TABLES**. El siguiente ejemplo listará las tablas en la actual base de datos.

mysql> show tables;

++

| Tables_in_sample |

++

| student |

++

1 row in set (0.00 sec)

Para seleccionar una base de datos se usa el comando [|USE] , que no es exactamente una sentencia SQL, sino más bien de una opción de <span style="font-family: Arial,sans-serif; font-size: 11.5pt;"> **MySQL** <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">:

mysql> USE prueba; Database changed mysql> <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">la sentencia <span style="font-family: Arial,sans-serif; font-size: 11.5pt;">[|CREATE TABLE] <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">creará una tabla con las columnas que indiquemos. Crearemos, como ejemplo, una tabla que nos permitirá almacenar nombres de personas y sus fechas de nacimiento. Deberemos indicar el nombre de la tabla y los nombres y tipos de las columnas:

mysql> USE prueba Database changed mysql> CREATE TABLE gente (nombre VARCHAR(40), fecha DATE); Query OK, 0 rows affected (0.53 sec)

mysql>

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Podemos consultar cuántas tablas y qué nombres tienen en una base de datos, usando la sentencia [|SHOW TABLES] <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">:

mysql> SHOW TABLES; +--+ | Tables_in_prueba | +--+ | gente | +--+ 1 row in set (0.01 sec)

mysql>

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">De modo parecido, se pueden eliminar bases de datos completas, usando la sentencia [|DROP_DATABASE] <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">La sintaxis también es muy simple:

DROP DATABASE [IF EXISTS] db_name <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Hay que tener cuidado, ya que al borrar cualquier base de datos se elimina también cualquier tabla que contenga.

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

mysql> USE borrame Database changed mysql> CREATE TABLE borrame ( -> id INT,  -> nombre CHAR(40)  -> ); Query OK, 0 rows affected (0.09 sec)

mysql> SHOW DATABASES; ++ | Database | ++ | borrame | | mysql | | prueba | | test | ++ 4 rows in set (0.00 sec)

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

mysql> DROP DATABASE IF EXISTS borrame; Query OK, 1 row affected (0.11 sec)

mysql> DROP DATABASE IF EXISTS borrame; Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql>

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">La forma más directa de insertar una fila nueva en una tabla es mediante una sentencia [|INSERT] <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">. En la forma más simple de esta sentencia debemos indicar la tabla a la que queremos añadir filas, y los valores de cada columna. Las columnas de tipo cadena o fechas deben estar entre comillas sencillas o dobles, para las columnas númericas esto no es imprescindible, aunque también pueden estar entrecomilladas.

mysql> INSERT INTO gente VALUES ('Fulano','1974-04-12'); Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO gente VALUES ('Mengano','1978-06-15'); Query OK, 1 row affected (0.04 sec)

mysql> INSERT INTO gente VALUES -> ('Tulano','2000-12-02'), -> ('Pegano','1993-02-10'); Query OK, 2 rows affected (0.02 sec) Records: 2 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM gente; +-++ | nombre | fecha | +-++ | Fulano | 1974-04-12 | | Mengano | 1978-06-15 | | Tulano | 2000-12-02 | | Pegano | 1993-02-10 | +-++ 4 rows in set (0.08 sec)

mysql> <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Podemos modificar valores de las filas de una tabla usando la sentencia <span style="font-family: Arial,sans-serif; font-size: 11.5pt;">[|UPDATE] <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">. En su forma más simple, los cambios se aplican a todas las filas, y a las columnas que especifiquemos.

mysql> UPDATE ciudad3 SET poblacion=poblacion*1.10; Query OK, 5 rows affected (0.15 sec) Rows matched: 5 Changed: 5 Warnings: 0

mysql> SELECT * FROM ciudad3; +-+---+ | nombre | poblacion | +-+---+ | Berlín | 6600000 | | Londres | 11000000 | | Madrid | 7920000 | | París | 10120000 | | Roma | 10450000 | +-+---+ 5 rows in set (0.00 sec)

mysql>

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Para eliminar filas se usa la sentencia [|DELETE] <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">. La sintaxis es muy parecida a la de <span style="font-family: Arial,sans-serif; font-size: 11.5pt;">[|UPDATE] <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM table_name [WHERE where_definition] [ORDER BY ...] [LIMIT row_count] <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">La forma más simple es no usar ninguna de las cláusulas opcionales:

mysql> DELETE FROM ciudad3; Query OK, 5 rows affected (0.05 sec)

mysql>

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Cuando queremos eliminar todas la filas de una tabla, vimos en el punto anterior que podíamos usar una sentencia[|DELETE] <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">sin condiciones. Sin embargo, existe una sentencia alternativa, <span style="font-family: Arial,sans-serif; font-size: 11.5pt;">[|TRUNCATE] <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">, que realiza la misma tarea de una forma mucho más rápida.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">La diferencia es que [|DELETE] <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">hace un borrado secuencial de la tabla, fila a fila. Pero <span style="font-family: Arial,sans-serif; font-size: 11.5pt;">[|TRUNCATE] <span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">borra la tabla y la vuelve a crear vacía, lo que es mucho más eficiente.

mysql> TRUNCATE ciudad5; Query OK, 1 row affected (0.05 sec)

mysql>


 * <span style="font-family: Arial,sans-serif; font-size: 11.5pt;">DELETE **

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Esta instrucción nos servirá para borrar un determinado registro de una tabla en nuestra base de datos MySQL, esta función podrá ser especificada por medio de una condición.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Ejemplo:

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">delete from ciudad3 where nombre = "Berlin";


 * <span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">Borrando tablas : **

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">La sentencia **DROP** es usada para borrar una o más tablas completamente de la base de datos.

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">La sintaxis es

DROP TABLE tbl_name

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">El ejemplo siguiente borrar la tabla student

<span style="color: #a52a2a; font-family: Verdana,sans-serif; font-size: 9pt;">mysql> drop table student;

<span style="color: #a52a2a; font-family: Verdana,sans-serif; font-size: 9pt;">Query OK, 0 rows affected (0.00 sec)

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">Este ejemplo eliminará o borrará la tabla student.


 * <span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">DROP TABLE **<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;"> este ejemplo suelta todos los campos de una tabla y borra la tabla. Una vez que se usa la sentencia **DROP TABLE**, no podemos usar esa tabla. Así que debemos ser cuidadosos con esta sentencia.


 * <span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">Renombrando tablas : **

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">La sentencia **RENAME** es usada para renombrar una o más tablas en una base de datos.

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">La sintaxis es

RENAME TABLE tbl_name TO new_tbl_name

[, tbl_name2 TO new_tbl_name2] ...

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">El siguiente ejemplo de muestra renombra la tabla de student como tabla class.

<span style="color: #a52a2a; font-family: Verdana,sans-serif; font-size: 9pt;">mysql> rename table student to class;

<span style="color: #a52a2a; font-family: Verdana,sans-serif; font-size: 9pt;">Query OK, 0 rows affected (0.00 sec)

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">Ahora podemos ver la tabla si el nombre es cambiado con el ejemplo siguiente.

mysql> show tables;

++

| Tables_in_sample |

++

| class |

++

1 row in set (0.00 sec)

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">Si el ejemplo renombra más de una tabla, las operaciones de renombrar van de izquierda a derecha.

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">Podemos tambien alternar dos nombres de tablas. Vamos a asumir la tabla tmp que no existe.


 * <span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">Ejemplo : **

RENAME TABLE emp1 TO tmp,

emp2 TO emp1,

tmp TO emp2;

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">Podemos también usar **RENAME TABLE** para mover la tabla de una base de datos a otra.


 * <span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">Ejemplo : **

<span style="color: #a52a2a; font-family: Verdana,sans-serif; font-size: 9pt;">RENAME TABLE current_db.tbl_name TO other_db.tbl_name;


 * <span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">ALTER TABLE : **


 * <span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">ALTER TABLE **<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;"> es usado para cambiar la estructura de una tabla existente. Podemos añadir o borrar columnas, cambiar el tipo de las columnas existentes, o renombrar las columnas o la tabla misma. También podemos cambiar el comentario de la tabla y el tipo de tabla.

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">La Sintaxis es

<span style="color: #a52a2a; font-family: Verdana,sans-serif; font-size: 9pt;">ALTER TABLE tbl_name alter_specification [, alter_specification] ...

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">La siguiente tabla describe la especificacion Alter

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">|| **<span style="font-family: Arial,sans-serif; font-size: 9pt;">Especificación Alter **
 * **<span style="font-family: Arial,sans-serif; font-size: 9pt;">Descripción ** ||
 * <span style="color: blue; font-family: Arial,sans-serif; font-size: 9pt;">[|Rename] || <span style="font-family: Arial,sans-serif; font-size: 9pt;">Renombra el nombre de una Tabla ||
 * <span style="color: blue; font-family: Arial,sans-serif; font-size: 9pt;">[|Add] || <span style="font-family: Arial,sans-serif; font-size: 9pt;">Añade una columna nueva, clave, índice ||
 * <span style="color: blue; font-family: Arial,sans-serif; font-size: 9pt;">[|Add First] || <span style="font-family: Arial,sans-serif; font-size: 9pt;">Añade una columna First ||
 * <span style="color: blue; font-family: Arial,sans-serif; font-size: 9pt;">[|Add After] || <span style="font-family: Arial,sans-serif; font-size: 9pt;">Añade una columna After ||
 * <span style="color: blue; font-family: Arial,sans-serif; font-size: 9pt;">[|Drop] || <span style="font-family: Arial,sans-serif; font-size: 9pt;">Suelta una columna, Índice, clave ||
 * <span style="color: blue; font-family: Arial,sans-serif; font-size: 9pt;">[|Change] || <span style="font-family: Arial,sans-serif; font-size: 9pt;">Cambia el nombre de una columna ||
 * <span style="color: blue; font-family: Arial,sans-serif; font-size: 9pt;">[|Change Type] || <span style="font-family: Arial,sans-serif; font-size: 9pt;">Cambia el tipo de columna ||
 * <span style="color: blue; font-family: Arial,sans-serif; font-size: 9pt;">[|Modify] || <span style="font-family: Arial,sans-serif; font-size: 9pt;">Modifica el tipo de columna ||

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">Podemos **RENOMBRAR** la tabla usando **ALTER TABLE**. El siguiente ejemplo renombra la tabla student a class.

<span style="color: #a52a2a; font-family: Verdana,sans-serif; font-size: 9pt;">mysql> ALTER TABLE student RENAME class;

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">El ejemplo de arriba cambiará el nombre de la tabla.

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">Para hacerlo el modificador **ADD COLUMN** es utilizado para añadir una columna a una tabla. El siguiente ejemplo añade un campo llamado marks a la tabla student.

mysql> ALTER TABLE student ADD COLUMN marks INT(10);

Query OK, 0 rows affected (0.05 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> desc student;

+-+-+--+-+-+---+

| Field | Type | Null | Key | Default | Extra |

+-+-+--+-+-+---+

| studid | int(10) | YES | | NULL | |

| name | varchar(20) | YES | | NULL | |

| address | varchar(40) | YES | | NULL | |

| phone | int(10) | YES | | NULL | |

| marks | int(10) | YES | | NULL | |

+-+-+--+-+-+---+

5 rows in set (0.00 sec)

<span style="color: #3d366f; font-family: Verdana,sans-serif; font-size: 9pt;">A continuación veremos las alteraciones al mostrar las tablas.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">link:[]


 * <span style="font-family: Arial,sans-serif; font-size: 17pt;">funciones mysql **

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Existen en MySQL funciones que nos permiten contar registros, calcular sumas, promedios, obtener valores máximos y mínimos. Ya hemos aprendido "count", veamos otras.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">La función "sum" retorna la suma de los valores que contiene el campo especificado. Por ejemplo, queremos saber la cantidad de libros que tenemos disponibles para la venta:

select sum(cantidad) from libros;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">También podemos combinarla con "where". Por ejemplo, queremos saber cuántos libros tenemos de la editorial "Planeta":

select sum(cantidad) from libros where editorial ='Planeta';

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Para averiguar el valor máximo o mínimo de un campo usamos las funciones "max" y "min" respectivamente. Ejemplo, queremos saber cuál es el mayor precio de todos los libros:

select max(precio) from libros;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Queremos saber cuál es el valor mínimo de los libros de "Rowling":

select min(precio) from libros where autor like '%Rowling%';

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">La función avg retorna el valor promedio de los valores del campo especificado. Por ejemplo, queremos saber el promedio del precio de los libros referentes a "PHP":

select avg(precio) from libros where titulo like '%PHP%';

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Estas funciones se denominan "funciones de agrupamiento" porque operan sobre conjuntos de registros, no con datos individuales.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Tenga en cuenta que no debe haber espacio entre el nombre de la función y el paréntesis, porque puede confundirse con una referencia a una tabla o campo. Las siguientes sentencias son distintas:

select count(*) from libros; select count (*) from libros;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">La primera es correcta, la segunda incorrecta.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">link:[]


 * <span style="font-family: Arial,sans-serif; font-size: 17pt;">Agrupacion Mysql **

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Hemos aprendido que las funciones de agrupamiento permiten contar registros, calcular sumas y promedios, obtener valores máximos y mínimos. También dijimos que dichas funciones operan sobre conjuntos de registros, no con datos individuales.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Generalmente esta funciones se combinan con la sentencia "group by", que agrupa registros para consultas detalladas.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Queremos saber la cantidad de visitantes de cada ciudad, podemos tipear la siguiente sentencia:

select count(*) from visitantes where ciudad='Cordoba';

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">y repetirla con cada valor de "ciudad":

select count(*) from visitantes where ciudad='Alta Gracia'; select count(*) from visitantes where ciudad='Villa Dolores'; ...

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Pero hay otra manera, utilizando la cláusula "group by":

select ciudad, count(*) from visitantes group by ciudad;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Entonces, para saber la cantidad de visitantes que tenemos en cada ciudad utilizamos la función "count", agregamos "group by" y el campo por el que deseamos que se realice el agrupamiento, también colocamos el nombre del campo a recuperar.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">La instrucción anterior solicita que muestre el nombre de la ciudad y cuente la cantidad agrupando los registros por el campo "ciudad". Como resultado aparecen los nombres de las ciudades y la cantidad de registros para cada valor del campo.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Para obtener la cantidad visitantes con teléfono no nulo, de cada ciudad utilizamos la función "count" enviándole como argumento el campo "telefono", agregamos "group by" y el campo por el que deseamos que se realice el agrupamiento (ciudad):

select ciudad, count(telefono) from visitantes group by ciudad;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Como resultado aparecen los nombres de las ciudades y la cantidad de registros de cada una, sin contar los que tienen teléfono nulo. Recuerde la diferencia de los valores que retorna la función "count" cuando enviamos como argumento un asterisco o el nombre de un campo: en el primer caso cuenta todos los registros incluyendo los que tienen valor nulo, en el segundo, los registros en los cuales el campo especificado es no nulo.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Para conocer el total de las compras agrupadas por sexo:

select sexo, sum(montocompra) from visitantes group by sexo;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Para saber el máximo y mínimo valor de compra agrupados por sexo:

select sexo, max(montocompra) from visitantes group by sexo; select sexo, min(montocompra) from visitantes group by sexo;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Se pueden simplificar las 2 sentencias anteriores en una sola sentencia, ya que usan el mismo "group by":

select sexo, max(montocompra), min(montocompra) from visitantes group by sexo;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Para calcular el promedio del valor de compra agrupados por ciudad:

select ciudad, avg(montocompra) from visitantes group by ciudad;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Podemos agrupar por más de un campo, por ejemplo, vamos a hacerlo por "ciudad" y "sexo":

select ciudad, sexo, count(*) from visitantes group by ciudad,sexo;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">También es posible limitar la consulta con "where".

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Vamos a contar y agrupar por ciudad sin tener en cuenta "Cordoba":

select ciudad, count(*) from visitantes where ciudad<>'Cordoba' group by ciudad;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Podemos usar las palabras claves "asc" y "desc" para una salida ordenada:

select ciudad, count(*) from visitantes group by ciudad desc;


 * **<span style="font-family: Arial,sans-serif; font-size: 16pt;">(between - in) ** ||  ||

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Hemos visto los operadores relacionales:

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">(mayor o igual), <= (menor o igual), is null/is not null (si un valor es NULL o no).Existen otros que simplifican algunas consultas:
 * <span style="font-family: Arial,sans-serif; font-size: 17pt;">(igual), <> (distinto), > (mayor), < (menor), > **

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Para recuperar de nuestra tabla "libros" los registros que tienen precio mayor o igual a 20 y menor o igual a 40, usamos 2 condiciones unidas por el operador lógico "and":

select * from libros where precio>=20 and precio<=40;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Podemos usar "between":

select * from libros where precio between 20 and 40;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">"between" significa "entre". Averiguamos si el valor de un campo dado (precio) está entre los valores mínimo y máximo especificados (20 y 40 respectivamente).

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Si agregamos el operador "not" antes de "between" el resultado se invierte.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Para recuperar los libros cuyo autor sea 'Paenza' o 'Borges' usamos 2 condiciones:

select * from libros where autor='Borges' or autor='Paenza';

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Podemos usar "in":

select * from libros where autor in('Borges','Paenza');

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Con "in" averiguamos si el valor de un campo dado (autor) está incluido en la lista de valores especificada (en este caso, 2 cadenas).

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Para recuperar los libros cuyo autor no sea 'Paenza' ni 'Borges' usamos:

select * from libros where autor<>'Borges' and autor<>'Paenza';

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">También podemos usar "in" :

select * from libros where autor not in ('Borges','Paenza');

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Con "in" averiguamos si el valor del campo está incluido en la lista, con "not" antecediendo la condición, invertimos el resultado.


 * **<span style="font-family: Arial,sans-serif; font-size: 16pt;">Registros duplicados (distinct) ** ||  ||

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Con la cláusula "distinct" se especifica que los registros con ciertos datos duplicados sean obviadas en el resultado. Por ejemplo, queremos conocer todos los autores de los cuales tenemos libros, si utilizamos esta sentencia:

select autor from libros;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Aparecen repetidos. Para obtener la lista de autores sin repetición usamos:

select distinct autor from libros;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">También podemos tipear:

select autor from libros group by autor;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Note que en los tres casos anteriores aparece "null" como un valor para "autor"· Si sólo queremos la lista de autores conocidos, es decir, no queremos incluir "null" en la lista, podemos utilizar la sentencia siguiente:

select distinct autor from libros where autor is not null;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Para contar los distintos autores, sin considerar el valor "null" usamos:

select count(distinct autor) from libros;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Note que si contamos los autores sin "distinct", no incluirá los valores "null" pero si los repetidos:

select count(autor) from libros;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Esta sentencia cuenta los registros que tienen autor.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Para obtener los nombres de las editoriales usamos:

select editoriales from libros;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Para una consulta en la cual los nombres no se repitan tipeamos:

select distinct editorial from libros;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Podemos saber la cantidad de editoriales distintas usamos:

select count(distinct editoriales) from libros;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Podemos combinarla con "where". Por ejemplo, queremos conocer los distintos autores de la editorial "Planeta":

select distinct autor from libros where editorial='Planeta';

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">También puede utilizarse con "group by":

select editorial, count(distinct autor) from libros group by editorial;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Para mostrar los títulos de los libros sin repetir títulos, usamos:

select distinct titulo from libros order by titulo;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">La cláusula "distinct" afecta a todos los campos presentados. Para mostrar los títulos y editoriales de los libros sin repetir títulos ni editoriales, usamos:

select distinct titulo,editorial from libros order by titulo;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Note que los registros no están duplicados, aparecen títulos iguales pero con editorial diferente, cada registro es diferente.


 * **<span style="font-family: Arial,sans-serif; font-size: 16pt;">Agregar campos a una tabla (alter table - add) ** ||  ||

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Para modificar la estructura de una tabla existente, usamos "alter table".

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">"alter table" se usa para:

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- agregar nuevos campos,

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- eliminar campos existentes,

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- modificar el tipo de dato de un campo,

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- agregar o quitar modificadores como "null", "unsigned", "auto_increment",

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- cambiar el nombre de un campo,

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- agregar o eliminar la clave primaria,

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- agregar y eliminar índices,

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- renombrar una tabla.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">"alter table" hace una copia temporal de la tabla original, realiza los cambios en la copia, luego borra la tabla original y renombra la copia.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Aprenderemos a agregar campos a una tabla.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Para ello utilizamos nuestra tabla "libros", definida con la siguiente estructura:

- código, int unsigned auto_increment, clave primaria, - titulo, varchar(40) not null, - autor, varchar(30), - editorial, varchar (20), - precio, decimal(5,2) unsigned.

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Necesitamos agregar el campo "cantidad", de tipo smallint unsigned not null, tipeamos:

alter table libros add cantidad smallint unsigned not null;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Usamos "alter table" seguido del nombre de la tabla y "add" seguido del nombre del nuevo campo con su tipo y los modificadores.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Agreguemos otro campo a la tabla:

alter table libros add edicion date;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Si intentamos agregar un campo con un nombre existente, aparece un mensaje de error indicando que el campo ya existe y la sentencia no se ejecuta.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Cuando se agrega un campo, si no especificamos, lo coloca al final, después de todos los campos existentes; podemos indicar su posición (luego de qué campo debe aparecer) con "after":

alter table libros add cantidad tinyint unsigned after autor;


 * **<span style="font-family: Arial,sans-serif; font-size: 16pt;">Eliminar campos de una tabla (alter table - drop) ** ||  ||

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">"alter table" nos permite alterar la estructura de la tabla, podemos usarla para eliminar un campo.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Continuamos con nuestra tabla "libros".

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Para eliminar el campo "edicion" tipeamos:

alter table libros drop edicion;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Entonces, para borrar un campo de una tabla usamos "alter table" junto con "drop" y el nombre del campo a eliminar.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Si intentamos borrar un campo inexistente aparece un mensaje de error y la acción no se realiza.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Podemos eliminar 2 campos en una misma sentencia:

alter table libros drop editorial, drop cantidad;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Si se borra un campo de una tabla que es parte de un índice, también se borra el índice.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Si una tabla tiene sólo un campo, éste no puede ser borrado.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Hay que tener cuidado al eliminar un campo, éste puede ser clave primaria. Es posible eliminar un campo que es clave primaria, no aparece ningún mensaje:

alter table libros drop codigo;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Si eliminamos un campo clave, la clave también se elimina.


 * **<span style="font-family: Arial,sans-serif; font-size: 16pt;">Modificar campos de una tabla (alter table - modify) ** ||  ||

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Con "alter table" podemos modificar el tipo de algún campo incluidos sus atributos.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Continuamos con nuestra tabla "libros", definida con la siguiente estructura:

- código, int unsigned, - titulo, varchar(30) not null, - autor, varchar(30), - editorial, varchar (20), - precio, decimal(5,2) unsigned, - cantidad int unsigned.

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Queremos modificar el tipo del campo "cantidad", como guardaremos valores que no superarán los 50000 usaremos smallint unsigned, tipeamos:

alter table libros modify cantidad smallint unsigned;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Usamos "alter table" seguido del nombre de la tabla y "modify" seguido del nombre del nuevo campo con su tipo y los modificadores.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Queremos modificar el tipo del campo "titulo" para poder almacenar una longitud de 40 caracteres y que no permita valores nulos, tipeamos:

alter table libros modify titulo varchar(40) not null;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Hay que tener cuidado al alterar los tipos de los campos de una tabla que ya tiene registros cargados. Si tenemos un campo de texto de longitud 50 y lo cambiamos a 30 de longitud, los registros cargados en ese campo que superen los 30 caracteres, se cortarán.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Igualmente, si un campo fue definido permitiendo valores nulos, se cargaron registros con valores nulos y luego se lo define "not null", todos los registros con valor nulo para ese campo cambiarán al valor por defecto según el tipo (cadena vacía para tipo texto y 0 para numéricos), ya que "null" se convierte en un valor inválido.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Si definimos un campo de tipo decimal(5,2) y tenemos un registro con el valor "900.00" y luego modificamos el campo a "decimal(4,2)", el valor "900.00" se convierte en un valor inválido para el tipo, entonces guarda en su lugar, el valor límite más cercano, "99.99".

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Si intentamos definir "auto_increment" un campo que no es clave primaria, aparece un mensaje de error indicando que el campo debe ser clave primaria. Por ejemplo:

alter table libros modify codigo int unsigned auto_increment;

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">"alter table" combinado con "modify" permite agregar y quitar campos y atributos de campos. Para modificar el valor por defecto ("default") de un campo podemos usar también "modify" pero debemos colocar el tipo y sus modificadores, entonces resulta muy extenso, podemos setear sólo el valor por defecto con la siguienmte sintaxis:

alter table libros alter autor set default 'Varios';

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Para eliminar el valor por defecto podemos emplear:

alter table libros alter autor drop default;


 * **<span style="font-family: Arial,sans-serif; font-size: 16pt;">Cambiar el nombre de un campo de una tabla (alter table - change) ** ||  ||

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Con "alter table" podemos cambiar el nombre de los campos de una tabla.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Continuamos con nuestra tabla "libros", definida con la siguiente estructura:

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- código, int unsigned auto_increment,

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- nombre, varchar(40),

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- autor, varchar(30),

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- editorial, varchar (20),

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- costo, decimal(5,2) unsigned,

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- cantidad int unsigned,

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">- clave primaria: código.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Queremos cambiar el nombre del campo "costo" por "precio", tipeamos:

alter table libros change costo precio decimal (5,2);

<span style="background-color: white; font-family: Arial,sans-serif; font-size: 11.5pt;">Usamos "alter table" seguido del nombre de la tabla y "change" seguido del nombre actual y el nombre nuevo con su tipo y los modificadores.

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">Con "change" cambiamos el nombre de un campo y también podemos cambiar el tipo y sus modificadores. Por ejemplo, queremos cambiar el nombre del campo "nombre" por "titulo" y redefinirlo como "not null", tipeamos:

alter table libros change nombre titulo varchar(40) not null;

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">link:[]

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">traller de exportar e inportar

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">crear una base de datos con su nombre

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">crear 2 tablas:

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">cliente

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">contacto

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">llenarla con 8 registros cada uno

<span style="font-family: Arial,sans-serif; font-size: 11.5pt;">y exportar y enviar al correo con su nombre

**como sincronizar dbdesigner con mysql**




code Para Exportar

Exportar una base de datos en particular mysqldump -u usuario -p nombre_base_de_datos > archivo.sql

Importar

Proceso inverso al mysqldump mysql -u root -p nombre_base_de_datos < ruta_base_de_datos.sql

la forma clásica, con la sentencia GRANT Utilizando la sentencia **GRANT** podemos crear un usuario a la par que otorgarle uno ovarios privilegios sobre los objetos de una base de datos, o la base de datos completa

Al encontrarse una sentencia de tipo GRANT, el motor de MySQL revisa si el usuario existe previamente para el contexto que estamos asignándole permisos, y si dicho usuario noestá presente en el sistema, lo crea

No entraré en detalles sobre todas las opciones que nos permite ejecutar la sentencia GRANT, sino solo en las que se refieren a la creación del usuario.

CREATE USER 'fernando'@'localhost' IDENTIFIED BY 'fer_pass';

Pongamos un **ejemplo**, queremos crear el usuario adolfo para la base de datos test: Nos conectamos con un usuario que tenga privilegios, root, como propietario de la base de datos, los tiene.

mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 17 Server version: 5.0.67 Source distribution

Nos conectamos utilizando -u para indicarle el usuario y si quisieramos indicarle un password, deberiamos poner -p (sin añadirle la contraseña), en este caso la cuenta root, al ser una máquina de desarrollo, está desprotegida.

Lanzamos la sentencia GRANT, indicando los permisos que otorgamos, la base de datos y los objetos de la misma sobre los que estamos asignando privilegios, el nombre del usuario y el password:

mysql> GRANT SELECT, INSERT ON test.* TO 'adolfo'@'localhost' IDENTIFIED BY 'pass_adolfo';

como-crear-un-usuario-en-mysql-3-formas-diferentes

Los comandos  REVOKE

permiten a los adminitradores de sistemas crear cuentas de usuario MySQL y darles permisos y quitarlos de las cuentas.

La información de cuenta de MySQL se almacena en las tablas de la base de datos

Esta base de datos y el sistema de control de acceso se discuten extensivamente en Administración de bases de datos que puede consultar para más detalles Si las tablas de permisos tienen registros de permisos que contienen nombres de tablas o bases de datos con mayúsculas y minúsculas y la variable de sistema está activa, REVOKE no puede usarse para quitar los permisos. Es necesario manipular las tablas de permisos directamente. GRANT no creará estos registros cuando está activo, pero tales registros pueden haberse creado préviamente a activar la variable.

code Los permisos pueden darse en varios niveles:

Nivel global
Los permisos globales se aplican a todas las bases de datos de un servidor dado. Estos permisos se almacenan en la tabla mysql.user. GRANT ALL ON *.* y REVOKE ALL ON *.* otorgan y quitan sólo permisos globales.

Nivel de base de datos
Los permisos de base de datos se aplican a todos los objetos en una base de datos dada. Estos permisos se almacenan en las tablas mysql.db y mysql.host. GRANT ALL ON db_name.* y REVOKE ALL ON db_name.* otorgan y quitan sólo permisos de bases de datos.

Nivel de tabla
Los permisos de tabla se aplican a todas las columnas en una tabla dada. Estos permisos se almacenan en la tabla mysql.tables_priv. GRANT ALL ON db_name.tbl_name y REVOKE ALL ON db_name.tbl_name otorgan y quian permisos sólo de tabla. code http://dev.mysql.com/doc/refman/5.0/es/grant.html

GRANT SELECT ON mailserver.* TO 'mailuser'@'127.0.0.1' IDENTIFIED BY 'aquí_una_contraseña';

GRANT ALL ON bbdd.* to usuario@'localhost' IDENTIFIED BY 'contraseña';

Conceder privilegios

GRANT SELECT ON prueba.gente TO anonimo; code

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">Como se ve, para este usuario sólo existe la base de datos 'prueba' y dentro de esta, la tabla 'gente'. Además, podrá hacer consultas sobre esa tabla, pero no podrá añadir ni modificar datos, ni por supuesto, crear o destruir tablas ni bases de datos.

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">Para conceder privilegios globales se usa //ON *.*//, para indicar que los privilegios se conceden en todas las tablas de todas las bases de datos.

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">Para conceder privilegios en bases de datos se usa //ON nombre_db.*//, indicando que los privilegios se conceden sobre todas las tablas de la base de datos 'nombre_db'.

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">Usando //ON nombre_db.nombre_tabla//, concedemos privilegios de nivel de tabla para la tabla y base de datos especificada.

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">En cuanto a los privilegios de columna, para concederlos se usa la sintaxis //tipo_privilegio (lista_de_columnas), [tipo_privilegio (lista_de_columnas)]//.

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">Otros privilegios que se pueden conceder son:


 * ALL: para conceder todos los privilegios.
 * CREATE: permite crear nuevas tablas.
 * DELETE: permite usar la sentencia [|DELETE].
 * DROP: permite borrar tablas.
 * INSERT: permite insertar datos en tablas.
 * UPDATE: permite usar la sentencia [|UPDATE].

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">Para ver una lista de todos los privilegios existentes consultar la sintaxis de la sentencia [|GRANT]. <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;"> <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;"> <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">

show grants for luis@localhost;

 * Salir del usuario**

exit

 * Ingrasar como el usuario creado**

password 12345
<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;"> <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;"> <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;"> <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">Se pueden conceder varios privilegios en una única sentencia. Por ejemplo:

code format="salida" GRANT SELECT, UPDATE ON prueba.gente TO anonimo IDENTIFIED BY 'clave'; code

Revocar privilegios
<span style="color: #ececec; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px;"> [|^] <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">Para revocar privilegios se usa la sentencia [|REVOKE]. code format="sintaxis" REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON   FROM user [, user]. code <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">La sintaxis es similar a la de [|GRANT], por ejemplo, para revocar el privilegio //SELECT// de nuestro usuario 'anonimo', usaremos la sentencia: code format="salida" REVOKE SELECT ON prueba.gente FROM anonimo; code

Borrar usuarios
<span style="color: #ececec; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px;"> [|^] <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">Para eliminar usuarios se usa la sentencia [|DROP USER]. <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">No se puede eliminar un usuario que tenga privilegios, por ejemplo: code format="salida" mysql> DROP USER anonimo; ERROR 1268 (HY000): Can't drop one or more of the requested users mysql> code <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">Para eliminar el usuario primero hay que revocar todos sus privilegios: code format="salida" mysql> SHOW GRANTS FOR anonimo; ++ ++ ++ 2 rows in set (0.00 sec)
 * Grants for anonimo@%                                              |
 * GRANT USAGE ON *.* TO 'anonimo'@'%' IDENTIFIED BY PASSWORD '*5...' |
 * GRANT SELECT ON `prueba`.`gente` TO 'anonimo'@'%'                 |

mysql> REVOKE SELECT ON prueba.gente FROM anonimo; Query OK, 0 rows affected (0.00 sec)

mysql> DROP USER anonimo; Query OK, 0 rows affected (0.00 sec)

mysql> code

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">**PARA ELIMINAR USUARIO**

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">**se debe eliminar todos lo privilegios**

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">revoke all on *.* from luis@localhost;

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">**Eliminar usuario**

<span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">drop user luis@localhost; <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;"> <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;"> <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;"> <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;"> <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;"> <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;"> <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;"> <span style="color: #12100d; display: block; font-family: Georgia,Verdana,Tahoma,Arial,sans-serif; font-size: 15px; text-align: justify;">

Views
====<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">VIEW is a virtual table, which acts like a table but actually it contains no data. That is based on the result set of a SELECT statement. A VIEW consists rows and columns from one or more than one tables. A VIEW is a query that?s stored as an object. A VIEW is nothing more than a way to select a subset of table?s columns. ====

====<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">When you defined a view then you can reference it like any other table in a database. A VIEW provides as a security mechanism also. VIEWS ensures that users are able to modify and retrieve only that data which seen by them. ====

<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">CREATE VIEW view_name [(column_list)] [WITH ENCRYPTION] AS select_statement [WITH CHECK OPTION]
====<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">View_name specifies the name for the new view. column_list specifies the name of the columns to be used in view. column_list must have the same number of columns that specified in select_statement. If column_list option is not available then view is created with the same columns that specified in select_statement. ====

====<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">AS option specifies the action that is performed by the view. select_statement is used to specify the SELECT statement that defines a view. The optional WITH CHECK OPTION clause applies to the data modification statement like INSERT and UPDATE statements to fulfill the criteria given in the select_statement defining the view. This option also ensures that the data can visible after the modifications are made permanent. ====

====<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">In the following example we have two table Client and Products. And if you want to see only those client records that are active in Products table also means right now they are supplying us the products. For this we are creating the view by the name of Supp_Client. ====

====<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">In the following example we include the WHERE clause with the select statement of view. Then MySQL adds this condition to the VIEW definition when executing the statement for further restricting the result. Example : ====

<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">ALTER VIEW Statement
====<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">By the ALTER VIEW Statement we can change the definition of a view. This statement is useful to modify a view without dropping it. ALTER VIEW statement syntax is similar to CREATE VIEW Statement and effect is same as the CREATE OR REPLACE VIEW. The general syntax of ALTER VIEW Statement is : ====

<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">ALTER VIEW view_name [(column_list)] [WITH ENCRYPTION] AS select_statement [WITH CHECK OPTION]
====<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">In the following example we are altering the view definition that we have created above. In this we add one more column by the name of Prod_Detail of Products table. Example of Altering the View Statement : ====

<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">DROP VIEW Statement
====<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">For dropping a view you can use the DROP VIEW Statement. When view is dropped but it has no effect on the underlying tables. After dropping a view if you issue any query that reference a dropped view then you get an error message. But dropping a table that reference any view does not drop the view automatically you have to dropt the view explicitly. The general syntax of DROP VIEW Statement is : ====

<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">DROP VIEW view_name;
====<span style="color: #12100d; font-family: Arial,Helvetica,sans-serif; font-size: 15px;">In the following example we are dropping the view that we have created above. Example of Dropping the View Statement : ====

=Actividad=

create database mercado;

use mercado;

create table cliente( iden_clie int(9) not null, nomb_clie varchar(40) not null, dire_clie varchar(50) not null, tele_clie bigint(10) not null, primary key (iden_clie) ) type=innodb;

create table producto( codi_prod int(9) not null, iden_clie int(9) not null, nomb_prod varchar(40) not null, valo_prod bigint(10) not null, primary key (codi_prod,iden_clie), foreign key (iden_clie) references cliente.(iden_clie) on delete no action on update no action ) type=innodb;

CREATE VIEW cliente_producto AS SELECT * FROM cliente WHERE iden_clie IN ( SELECT iden_clie FROM producto ) WITH CHECK OPTION;

select * from cliente_producto;

media type="custom" key="22729492" width="418" height="418"

media type="custom" key="21382248" width="418" height="418"

Bueno aquí la cosa parece simple verdad, básicamente usamos transacciones para poder asegurar integridad de una operación, si por ejemplo necesitamos guardar una factura y esta se compone de Cabecera y Detalle no se debería guardar si hubo algún error en el detalle. También podríamos mencionar otros ejemplos, donde se necesitan hacer mas de una operación y de fallar alguna no aplicar nada. Tenemos dos tipos de transacciones en SQL Server, las implícitas y las explicitas. Las primeras son aquellas que no debemos indicarle al SQL que hacemos una transacción pero el lo genera, por ejemplo como el siguiente caso. DELETE FROM CLIENTES WHERE PAIS = 'ARGENTINA' Aquí se ejecutara el delete para todos los clientes que cumplan la condición de Argentina, si hay un error al intentar borrar un cliente se hará un rollback y no se borrara ninguno, esto se debe a que el delete al igual que el insert y update internamente arman una transacción. Las transacciones explicitas son aquellas que nosotros indicamos con la sentencia Begin Transaction / Commit o Rollback Transaction. BEGIN TRANSACTION INSERT INTO EMPLEADOS (ID, NOMBRE) VALUES (1,'CONDUIT')
 * ¿Porque usamos transacciones?**

DELETE FROM AUDITORIA WHERE EMPLEADO = 1 COMMIT TRAN El commit es el que confirmara la transacción y el rollback es el que la deshará, pero aquí hay algunos detalles muy importantes en su comportamiento cuando usamos transacciones anidadas. Primero veamos un ejemplo simple CREATE TABLE #T1 (ID INT, NOMBRE VARCHAR(50)) GO
 * ¿Como funciona el Commit y Rollback?**

CREATE TABLE #T2 (ID INT, FECHA DATETIME NOT NULL) GO

BEGIN TRY

BEGIN TRAN

INSERT INTO #T1 VALUES (1,'CONDUIT') INSERT INTO #T1 VALUES (1,GETDATE)

COMMIT TRAN END TRY

BEGIN CATCH ROLLBACK TRAN SELECT @@ERROR END CATCH

En el ejemplo básicamente hacemos dos insert y si hay algún error entramos en la sección del Catch y lo primero que hacemos es el rollback para luego mostrar el error. Este es un simple ejemplo donde si no hay problemas se harán los dos insert y el commit los confirmara y de haber un error en algún insert se hará Rollback. Hasta aquí vimos dos ejemplos bastantes simples del manejo de transacciones. Ahora bien que sucede si necesitamos manejar transacciones anidadas, por ejemplo ejecutamos un Store que abre una transacción que llama a otro Store que abre otra transacción y así, o bien en el mismo código. Aquí primero debemos comprender como impacta un Rollback y un Commit y es donde mayor confusión quizás hay. El Rollback hará que se deshagan todas las transacciones o sea si armamos una transacción dentro de otra y la segunda hace un rollback hará que también la primera lo haga, en cambio el commit lo hará por cada bloque a menos que apliquemos un commit en el bloque externo lo cual hará que todo se comitee. Para poder evaluar cuantas transacciones tenemos abiertas podemos utilizar la variable @@Trancount Para ser mas ejemplificado con este tema vamos a ver un poco de código, el primer ejemplo muestra como funciona el Rollback
 * Anidar transacciones**

USE TEMPDB go

CREATE TABLE Cabecera (id int, fecha Datetime) go

CREATE TABLE Detalle (CabeceraId int, linea int NOT NULL, Cantidad decimal (8,2) NOT NULL) GO

CREATE TABLE Auditoria (Id int identity, Fecha datetime not null )

-- Ejecute el Script por pasos para ir comprendiendo

-- ======================================= -- Funcionamiento del Rollback -- =======================================

-- Vemos que no hay Transacciones SELECT @@TRANCOUNT

-- Abrimos una transacción BEGIN TRAN -- hacemos los insert INSERT INTO Cabecera VALUES (1,GETDATE)

INSERT INTO Detalle Values (1,1,100)

-- vemos las transacciones abiertas (1) SELECT @@TRANCOUNT

-- Abrimos otra transacción BEGIN TRAN -- Verificamos que Trancount se incremento en 1 SELECT @@TRANCOUNT

-- Hacemos un Rollback ROLLBACK TRAN

-- Verificamos que Trancount quedo en 0 -- Lo cual ha hecho un rollback de todo SELECT @@TRANCOUNT go El siguiente ejemplo muestro como funciona el Commit con el manejo de transacciones

-- ======================================= -- Funcionamiento del Commit -- =======================================

-- Vemos que no hay Transacciones SELECT @@TRANCOUNT

-- Abrimos una transacción BEGIN TRAN -- hacemos los insert INSERT INTO Cabecera VALUES (1,GETDATE)

INSERT INTO Detalle Values (1,1,100)

-- vemos las transacciones abiertas (1) SELECT @@TRANCOUNT

-- Abrimos otra transacción BEGIN TRAN -- Verificamos que Trancount se incremento en 1 SELECT @@TRANCOUNT

-- Hacemos un Rollback INSERT INTO Auditoria (Fecha) VALUES (GETDATE)

COMMIT TRAN -- Verificamos que Trancount decrecio en 1 SELECT @@TRANCOUNT

COMMIT TRAN -- Hacemos el utimo Commit

-- Verificamos que Trancount queda en 0 SELECT @@TRANCOUNT go

Hasta que pudimos observar con ejemplos la diferencia de comportamiento que tenemos entre el Rollback y el Commit como hemos explicado en el inicio del articulo. Ahora bien, en el siguiente ejemplo muestro como manejar transacciones anidadas sin que el rollback se vaya a 0 y que lo haga a un punto que yo determine. -- ======================================= -- Manejo de transacciones Anidadas -- =======================================

-- Vemos que no hay Transacciones SELECT @@TRANCOUNT

-- Abrimos una transacción BEGIN TRAN A -- hacemos los insert INSERT INTO Cabecera VALUES (1,GETDATE)

INSERT INTO Detalle Values (1,1,100)

-- Hacemos un punto de salvacion

SAVE TRAN B

-- vemos las transacciones abiertas (1) SELECT @@TRANCOUNT

-- Abrimos otra transacción BEGIN TRAN C -- Verificamos que Trancount se incremento en 1 SELECT @@TRANCOUNT

-- Hacemos un Rollback INSERT INTO Auditoria (Fecha) VALUES (GETDATE)

ROLLBACK TRAN B -- Verificamos que Trancount es 2 y no 0 -- Esto se da porque el rollback afecta -- el punto de almacenamiento y no la transacción -- en si SELECT @@TRANCOUNT

-- Hacemos los Commit COMMIT TRAN COMMIT TRAN -- Verificamos que Trancount queda en 0 SELECT @@TRANCOUNT go

-- Verificamos los datos y vemos que en Auditoria -- no se guardaron registros porque hubo un rollback -- pero solo de ese punto

SELECT * FROM Cabecera SELECT * FROM Detalle SELECT * FROM Auditoria

Hasta aquí hemos visto que el manejo del Rollback es muy distinto al del Commit Tran, ahora bien, como hacemos para controlar los errores ? la buena practica es que ante un error lo primero que se haga sea un Rollback pero que sucede si hubo un rollback anterior y el TranCount quedo en 0? Lo que deberíamos hacer es en control del error verificar primero la variable Trancount y si es mayor que 0 entonces si hacer el Rollback, aquí vemos un ejemplo.
 * Control de errores y transacciones**

-- ======================================= -- Manejo de Errores & transacciones -- =======================================

SELECT @@TRANCOUNT

-- Abrimos una transacción BEGIN TRY

BEGIN TRAN -- hacemos los insert INSERT INTO Cabecera VALUES (1,GETDATE)

INSERT INTO Detalle Values (1,1,100)

-- Abrimos otra transacción BEGIN TRAN -- Verificamos que Trancount se incremento en 1 SELECT @@TRANCOUNT

-- Generamos un error para ir al bloque CATCH INSERT INTO Auditoria (Fecha) VALUES (NULL)

-- Verificamos que Trancount quedo en 0 -- Lo cual ha hecho un rollback de todo

END TRY

-- Control de errores

BEGIN CATCH IF @@TRANCOUNT > 0 BEGIN ROLLBACK TRAN END

SELECT ERROR_MESSAGE

END CATCH

[]

media type="custom" key="22935190" width="370" height="370"

=DISEÑO EN FLASH=

CSS3

DESCARGAR PORTABLE

http://www.mediafire.com/?twynyzzvntz

|| galeria imagen flash.docx
 * Trabajar con Sonidos (I) ||  ||   || [[image:http://www.google.com/logos/Logo_25wht.gif caption="Google" link="http://www.google.com/"]]
 * Google ||  ||   ||


 * Comenzando ||  ||

Hasta hace poco, los únicos sonidos que oíamos en las páginas web eran los famosos "midis", de escaso tamaño y de escasa calidad. De hecho, eran sólo instrumentos musicales sin voz, de ahí su pequeño tamaño (y calidad). Aún así, siempre existía algún creador de páginas web que se aventuraba a poner algún sonido complejo (.wav o .mp3) en su página web, por desgracia, su carga es tan lenta, que la mayoría de los visitantes se irían de la página sin llegar a escucharla. Hoy, gracias a las conexiones de banda ancha orientadas a contenido multimedia, poner sonido a las páginas web es un poco más fácil, ¿qué aporta FLASH? Flash nos permite insertar cualquier sonido que queramos en nuestras películas (.wav, .aiff, .mp3, etc...) de forma fácil y muy efectiva, ya que es capaz de acelerar la descarga del sonido siempre y cuando se descargue junto con nuestra película. Podemos dar a la película efectos simples (el típico "clic" al pulsar un botón), efectos complejos (música de fondo) e incluso podemos hacer que la animación se desarrolle conjuntamente con una música (si bien esto último necesitaría que toda la película estuviera descargada previamente, para evitar "atascos" durante el desarrollo de la animación). En definitiva, Flash nos lo vuelve a poner fácil. ||
 * ¿Quién sería capaz de ver una película muda? ¿Y una animación espectacular sin sonido?

lucho2.rar
 * Importar Sonidos || [[image:http://www.aulaclic.es/flashcs3/comunes/camera.gif align="absMiddle" caption="external image camera.gif" link="@http://www.aulaclic.es/flashcs3/secuencias/sonidos.htm"]] ||

A esto último se le llama **"Importar"** y se puede hacer con sonidos, gráficos, e incluso con otras películas Flash. Importar por tanto, no es más que decirle a Flash que añada un determinado archivo a nuestra película, para que podamos usarlo cuando queramos. En realidad, lo añade a nuestra Biblioteca, que es el Panel en el que están todos los objetos que participan en la película (este Panel se verá más adelante). Así pues si queremos manejar un sonido en nuestra película, deberemos importarlo previamente. Una vez esté importado, podremos usarlo con total libertad. Para importar un sonido haz clic en el menú Archivo → Importar → Importar a biblioteca. Se abrirá el cuadro de diálogo de Importar a biblioteca. Allí deberás seleccionar en Tipo de archivo Todos los formatos de sonido. Navega por las carpetas hasta encontrar el archivo de audio que quieras incluir en tu película. Seleccionalo haciendo clic sobre él y haz pulsa el botón Aceptar. El sonido estará listo para usarlo donde quieras, podrás encontrarlo en la Biblioteca (menú Ventana → Biblioteca ). ||
 * [[image:http://www.aulaclic.es/flashcs3/comunes/orangeball.gif width="13" height="14" align="absMiddle" caption="external image orangeball.gif"]] Si alguna vez habeis intentado añadir un sonido a vuestra animación Flash probablemente os hayais llevado una gran decepción, no conseguirlo. Esto se debe a que no se tiene en cuenta que para poder emplear un objeto en nuestra película, o bien lo creamos nosotros (como llevamos haciendo hasta ahora) o bien lo conseguimos de cualquier otro modo y lo insertamos en nuestra película.


 * Propiedades de los Sonidos ||  ||

Para que aparezca la posibilidad de trabajar con sonidos, deberemos hacer clic en algún fotograma de nuestra película, tras hacer esto, el Panel Propiedades toma el siguiente aspecto:
 * En Flash CS3, al igual que en Flash 8 todo lo referente a los sonidos lo podemos editar desde el Panel Propiedades . Aquí tenemos todo lo necesario para insertar, modificar y editar el sonido que acabamos de importar. Si no hemos importado ningún sonido, nos daremos cuenta de que no podemos seleccionar nada en dicho panel, basta insertarlo para que esto cambie.

Veamos las partes que tiene este panel. Sonido : En esta pestaña nos aparecerán las canciones que tenemos importadas, deberemos seleccionar la canción que pretendamos añadir a nuestra película (en el siguiente punto veremos cómo insertarlo). || En el punto Editar Sonidos se tratará en más profundidad estos efectos. Sinc : Esta opción nos permite determinar en qué momento comenzará a actuar nuestro sonido, estas son las opciones que tenemos: Evento : Sincroniza nuestro sonido con un evento determinado. Es la opción por defecto y provoca que el sonido se empiece a reproducir al pasar la película por el fotograma en el que está situado. También se puede sincronizar el sonido con botones y los demás tipos de símbolos. > > > Por otra parte, es un efecto muy adecuado para algunas situaciones, por ejemplo, el efecto de que un personaje hable durante una película. En esta situación, es muy recomendable que el sonido y las imágenes estén sincronizadas. Repetir : Determina el número de veces que se reproducirá el sonido según lo que escribas en la caja de texto de la derecha. También puedes seleccionar Reproducir indefinidamente para que el sonido se reproduzca en un bluce hasta llegar al siguiente fotograma clave. No recomendamos insertar sonidos con la opción Flujo y a la vez la de Repetir, ya que al estar sincronizados los sonidos con las imágenes, provocaríamos que las imágenes (y los fotogramas que las contengan) se dupliquen también, aumentando considerablemente el tamaño de la película. ||
 * [[image:http://www.aulaclic.es/flashcs3/comunes/orangeball.gif width="13" height="14" align="absMiddle" caption="external image orangeball.gif"]] Efecto **:** Desde aquí podremos añadir algún efecto a nuestro sonido, como por ejemplo que el sonido pase del canal izquierdo al derecho (esto crea la sensación de que el sonido te envuelve ya que lo oyes por un sitio y luego por otro, aunque queda muy lejos de los verdaderos sonidos envolventes), que el volumen aumente progresivamente etc... Si deseamos añadir complejos efectos sonoros, deberemos tratar adecuadamente el sonido con algún programa creado específicamente para este propósito antes de importarlo.
 * Inicio **:** Su funcionamiento es equivalente al de "Evento", se diferencian en que si está seleccionado Inicio en vez de Evento y se reproduce otra vez el mismo sonido u otro distinto, lo hace "encima" del sonido actual. Puede ser un efecto muy atractivo, o puede provocar que se forme "ruido" en nuestra película.
 * Detener **:** Detiene el sonido seleccionado.
 * Flujo **:** Esta opción sincroniza el sonido con el o los objetos con los que esté asociado, por tanto, si la carga de la película es lenta y las imágenes no fluyen adecuadamente, el sonido se detendrá para sincronizarse con ellas. Este efecto puede dar la sensación de que la película se corta de un modo muy brusco (pensar en que se considera normal que una imagen tarde en cargarse, pero si se detiene un sonido mientras se reproduce, produce una reacción muy negativa en los que pueden estar viendo nuestra película).


 * Insertar un Sonido || [[image:http://www.aulaclic.es/flashcs3/comunes/camera.gif align="absMiddle" caption="external image camera.gif" link="@http://www.aulaclic.es/flashcs3/secuencias/insertar_sonidos.htm"]] ||

Supongamos que queremos insertar un sonido en un fotograma determinado, de modo que cuando la película Flash llegue a este fotograma comience a reproducirse el sonido. Para que un sonido se reproduzca al llegar a un fotograma, deberemos seleccionar el fotograma en el que queremos que empiece a reproducirse el sonido. Una vez allí, abriremos el Panel Propiedades e importaremos el sonido que queramos del modo visto en el punto anterior. Otro modo más rápido aún consistiría en seleccionar dicho sonido en la Biblioteca y arrastrarlo al fotograma en el que queramos que se empiece a reproducir el sonido (al fotograma, no a la línea de tiempo). || Así representa Flash los sonidos insertados en Fotogramas  || Por defecto Flash entiende que quieres reproducir el sonido en su totalidad, sino ¿para qué insertarlo entero?, de modo que Flash reproducirá el sonido todas las veces que le hayas indicado en Repetir y el sonido sonará aunque el fotograma en el que esté no sea el que se está ejecutando en ese instante. Si quisiéramos que el sonido pare cuando entremos en otro fotograma, lo podemos hacer de 2 formas distintas, ambas combinando las opciones que nos ofrece el Panel Propiedades. La primera de ellas es seleccionarlo en la Biblioteca y arrastrarlo directamente sobre el escenario. El sonido se añadirá al fotograma en el que nos encontramos. Otra opción sería la de seleccionar el sonido (ya importado a nuestra biblioteca) desde el panel Propiedades del fotograma seleccionado:
 * Ahora que ya sabemos importar un sonido, qué opciones podemos modificar y para qué sirve cada una. Veamos lo más importante, cómo insertarlos en nuestra película.
 * De este modo insertamos un sonido, pero ¿suena tal y cómo queremos que suene? ... Depende de lo que busquemos.

En la opción Sonido seleccionaríamos el audio que queremos añadir al fotograma. Luego modificaríamos la opción Sinc. del siguiente modo: En esta animación, verás como: Para practicar la inserción de sonidos realiza el [|Ejercicio Insertar sonidos]. ||
 * Si seleccionamos Flujo, el sonido se reproducirá hasta llegar al primer fotograma que no lo contenga.
 * Podemos seleccionar Detener para marcar un fotograma de modo que el sonido se detenga al llegar a él.


 * Editar Sonidos ||  ||


 * [[image:http://www.aulaclic.es/flashcs3/comunes/orangeball.gif width="13" height="14" align="absMiddle" caption="external image orangeball.gif"]] Flash no fue creado como un editor de sonidos, por lo que su potencia en este campo es limitada. Aún así, los efectos que permite aplicar de un modo sencillo suelen ser suficientes para cualquier animación que queramos realizar. Disponemos de estos efectos:

Canal Izquierdo : El sonido tan sólo se escuchará por el altavoz izquierdo. Canal Derecho : El sonido tan sólo se escuchará por el altavoz derecho. Desvanecimiento de izquierda a derecha : El sonido se reproduce inicialmente en el altavoz izquierdo para luego pasar al derecho. Desvanecimiento de derecha a izquierda : El sonido se reproduce inicialmente en el altavoz derecho para luego pasar al izquierdo. Aumento Progresivo : El volumen de nuestro sonido aumenta progresivamente. Desvanecimiento : El volumen de nuestro sonido disminuye progresivamente. Personalizado : Esta opción nos permite "editar" el sonido de un modo rápido y sencillo. Desde este editor podemos decidir qué volumen tendrá nuestro sonido y en qué altavoz. Podemos crear los efectos anteriores ajustándolos a nuestro gusto y podemos crear efectos más complejos a nuestra medida. || Las líneas grises representan el volumen del sonido y haciendo clic en ellas podemos configurar este volumen. En el ejemplo, el canal izquierdo se reproduce normalmente (pues el volumen está al máximo), pero el canal derecho empieza en silencio, para poco a poco alcanzar el volumen normal (este efecto equivaldría a un Aumento Progresivo en el canal derecho). ||
 * [[image:http://www.aulaclic.es/flashcs3/graficos/sonidos_edit.gif width="458" height="296" caption="external image sonidos_edit.gif"]] || Esta es la apariencia del cuadro de diálogo Personalizar Sonido . La parte superior representa el canal izquierdo y la parte inferior el canal derecho. Entre las 2 partes hay una línea de tiempo que nos indica el tiempo de sonido transcurrido en cada punto.


 * ¿Mp3 o Wav? ||  ||

Por tanto, cuando queramos añadir un sonido a nuestra película, deberemos decantarnos por uno de estos 2 formatos. Lo normal es que el sonido que pretendamos insertar ya esté en uno de ellos, pero no debemos olvidar que existen multitud de programas que convierten un sonido con extensión .mp3 a uno .wav y viceversa, por lo que no debe ser inconveniente el formato que tenga el sonido en un principio. La pregunta surge en seguida ¿Cuál es mejor? ... Esta pregunta es más importante de lo que parece, ya que si decidimos que nuestra película tenga sonidos, deberemos asumir una carga muy importante en cuanto a tamaño de la película y en consecuencia en cuanto a tiempo de descarga. Lo habitual es que los sonidos ocupen más de la mitad del espacio total y muchas veces no valdrá la pena insertarlos... Una vez decididos a insertar el sonido, la lógica nos dice que insertemos el sonido que ocupe un espacio menor en el disco duro, ya que este espacio es el que ocupará en nuestra película. Esto es una aproximación, ya que Flash comprime todo aquello que insertamos en nuestras películas. Como ya sabemos, los sonidos .mp3 ocupan un espacio mucho menor que los sonidos .wav (10 veces menos o más), por lo que parece recomendable insertar .mp3 en lugar de .wav, ahora bien ¿Puede Flash comprimir un sonido ya comprimido? Es decir, si un sonido .wav ha sido comprimido y ahora tiene extensión .mp3, ¿podrá Flash volver a comprimirlo? La respuesta es NO. Flash comprime los sonidos que insertamos en nuestras películas, pero si el sonido resulta estar ya comprimido, no podrá volver a comprimirlo (en realidad si que consigue comprimirlo, pero el sonido final es el mismo que el inicial). Ahora que ya sabemos esto, nos falta saber si Flash comprime un archivo .wav más de lo que comprime el formato .mp3, para ver bien este aspecto, hemos preparado varios ejemplos... **Ejemplo:**
 * [[image:http://www.aulaclic.es/flashcs3/comunes/orangeball.gif width="13" height="14" align="absMiddle" caption="external image orangeball.gif"]] Como ya se ha comentado, los sonidos que Flash CS3 puede importar casi cualquier tipo de sonido. Si no sabes las diferencias entre estos tipos de archivos, puedes consultar nuestro tema básico [[image:http://www.aulaclic.es/flashcs3/comunes/ico_menos.gif width="26" height="20" align="absMiddle" caption="external image ico_menos.gif" link="http://www.aulaclic.es/flashcs3/b_6_3_1.htm"]].

Contamos con una película con un único frame que está vacío. Esta película, una vez lista para ser vista (.swf) ocupa 1KB. Tenemos 1 sonido .wav que ocupa 1596 KB Comprimimos dicho sonido con un programa compresor de audio y obtenemos el mismo sonido en formato .mp3, ocupa 145 KB. (La calidad de sonido es prácticamente idéntica). Ahora insertamos el sonido .wav en la película original y la exportamos (esto se trata en el último tema). Insertamos después el sonido .mp3 en la película original. Conclusión: La película con un sonido .wav ocupa casi 5 veces menos que la que tiene el mismo sonido en .mp3, por tanto parece recomendable insertar sonidos .wav (la compresión de audio que logra Flash es muy grande). Como contrapartida, podría apreciarse pérdida de calidad en el sonido que se escucha en la película 1. Esta pérdida será importante según el tipo de sonido que sea. Si es una voz, por ejemplo, deberíamos insertar .mp3 ya que necesariamente deberá escucharse bien, si es música de fondo, es probable que aunque se pierda calidad, el resultado final sea aceptable y sea conveniente quedarnos con la película de menor tamaño. Lo mejor es probar ambas versiones y evaluar el resultado.
 * Resultado:** Una película con sonido (película 1) que ocupa 37KB.
 * Resultado:** Una película con sonido (película 2) que ocupa 145 KB

Podeis ver varias pruebas en estas películas: || Película con sonido (música) en formato **.wav**. Tamaño Total: **37 KB.** Calidad: **Buena** || Película con sonido (música) en formato **.mp3**. Tamaño Total: **145 KB.** Calidad: **Buena** || Película con sonido (voz) en formato **.wav**. Tamaño Total: **9 KB.** Calidad: **Regular** || Película con sonido (voz) en **.mp3**. Tamaño Total: **67KB.** Calidad: **Buena** || Por último, comentar que Flash no puede importar sonidos en formato MIDI (.mid). Aún así, si estamos empeñados en que en nuestra animación el sonido sea un MIDI y no queremos o podemos conseguir un programa que convierta el sonido MIDI a WAV o MP3 existe una forma de hacerlo consistente en el uso combinado de Flash y Javascript. Igualmente, como se comentó en el Tema 1, Flash CS3 permite cargar sonidos de un modo dinámico (sin que ocupen espacio), esto se tratará en el Tema 17 "Action Script". ||
 * //Música de Fondo//** ||
 * [[image:http://www.aulaclic.es/flashcs3/comunes/camera.gif caption="external image camera.gif" link="@http://www.aulaclic.es/flashcs3/secuencias/a_6_3_1_peli.html"]]
 * [[image:http://www.aulaclic.es/flashcs3/comunes/camera.gif caption="external image camera.gif" link="@http://www.aulaclic.es/flashcs3/secuencias/a_6_3_1_peli.html"]]
 * //Sonido "Voz"//** ||
 * //Sonido "Voz"//** ||
 * En el primer caso sería recomendable quedarse con la película más pequeña, ya que ambos sonidos son buenos. En el segundo caso, la segunda película sería más apropiada, ya que aunque tenga mayor tamaño, la calidad del sonido merece la pena.
 * ||


 * Los Objetos. Iniciación ||  ||

Independientemente de si estamos trabajando en una animación, en una página web, en un catálogo para un CDRom o en cualquier otra cosa, tendremos que trabajar con objetos. A grandes rasgos, podremos considerar un objeto todo aquello que aparezca en nuestra película y sea visible, de modo que podamos trabajar con él,un objeto sería, por ejemplo, cualquier imagen que creemos o importemos, un botón, un dibujo creado por nosotros mismos etc... Los objetos así considerados tienen 2 partes fundamentales: Puede existir o no, según nos convenga. Cuando creamos un objeto, el borde se crea siempre y su color será el indicado en el Color de Trazo (dentro del Panel Mezclador de Colores ). Si queremos dibujar creando Bordes deberemos emplear las Herramientas Lápiz, Línea o Pluma y si queremos que nuestro dibujo no tenga borde, bastará con seleccionar el borde y suprimirlo (ver siguiente punto). ||
 * En el tema 4 vimos como crear objetos y añadirlos a nuestra película Flash, en este tema profundizaremos en como trabajar con ellos, para ajustarlos a nuestras necesidades.
 * El Borde:** Consiste en una delgada línea que separa el objeto del exterior del escenario.
 * El Relleno:** El relleno no es más que el propio objeto sin borde. Es, por tanto, la parte interna del objeto. Su existencia también es arbitraria, ya que podemos crear un objeto cuyo color de relleno sea transparente, como ya se vió en el tema de Dibujar, y por tanto, parecerá que dicho objeto no tiene relleno, aunque en realidad sí que exista pero sea de color transparente. Para dibujar Rellenos (sin borde) podemos usar herramientas tales como el Pincel o el Cubo de Pintura.


 * Seleccionar || [[image:http://www.aulaclic.es/flashcs3/comunes/camera.gif align="bottom" caption="external image camera.gif" link="@http://www.aulaclic.es/flashcs3/secuencias/objetos.htm"]] ||

Objeto SIN seleccionar || Objeto con el BORDE seleccionado || Objeto con el RELLENO seleccionado || Este modo de seleccionar objetos permite seleccionar muchos objetos rápidamente, además de permitirnos seleccionar determinadas zonas de los objetos, para cortarlas, pegarlas ... Además de la Herramienta Flecha, también podemos usar la Herramienta Lazo, más útil aún si cabe. Nos permite seleccionar cualquier zona de cualquier forma (la forma la determinamos nosotros) del objeto que sea. Al contrario que la Herramienta Flecha, las áreas seleccionadas no tienen porque ser rectángulares.
 * [[image:http://www.aulaclic.es/flashcs3/comunes/orangeball.gif width="13" height="14" align="absMiddle" caption="external image orangeball.gif"]] Para poder trabajar con objetos, es fundamental saber seleccionar la parte del objeto que queramos modificar (mover, girar, cambiar de color...). Podremos observar que las partes de un objeto seleccionadas toman una apariencia con textura para indicar que están seleccionadas. ||
 * [[image:http://www.aulaclic.es/flashcs3/graficos/selecc_rell_bord1.gif width="121" height="89" caption="external image selecc_rell_bord1.gif"]]
 * [[image:http://www.aulaclic.es/flashcs3/comunes/orangeball.gif width="13" height="14" align="absMiddle" caption="external image orangeball.gif"]] Veamos cómo seleccionar las diferentes partes de un objeto:
 * Seleccionar un Relleno o un Borde**: Basta hacer clic 1 vez en el Relleno o en el Borde que queramos seleccionar.
 * Seleccionar el Relleno y el Borde de un objeto**: Hacer doble clic en el Relleno.
 * Seleccionar todos los bordes (o líneas) de un mismo color que estén en contacto**: Hacer doble clic sobre una de las líneas que tenga el color que pretendamos seleccionar.
 * Seleccionar un Símbolo, un texto, o un grupo**: Clic en el Símbolo, en el texto o en el grupo. Estos tipos de objetos mostrarán un borde de color azul (por defecto) al estar seleccionados.
 * Seleccionar Varios elementos**: Mantendremos pulsada la tecla SHIFT mientras seleccionamos los objetos que queramos.
 * Seleccionar los objetos que se encuentran en una determinada zona**: Para ello usaremos la Herramienta Selección (Flecha) . Haremos clic en una parte del escenario y arrastraremos el cursor hasta delimitar el área que contenga los objetos que queremos seleccionar. Si esta área corta algún objeto, sólo quedará seleccionada la parte del objeto que esté dentro del área que hemos delimitado. Si quisiéramos incluir dicho objeto, bastaría con usar la tecla SHIFT y seleccionar la parte del objeto que falta por seleccionar.
 * Seleccionar a partir de la Línea de Tiempo:** Si seleccionamos un determinado fotograma en la línea de tiempo, se seleccionan automáticamente todos los objetos que estén en dicho fotograma. Esto es útil para modificar de un modo rápido todos los elementos del fotograma.
 * Seleccionar Todo**: La forma más natural de seleccionar todo, consiste en hacer clic en el menú Edición → Seleccionar Todo. ||


 * Colocando Objetos. Panel Alineamiento || [[image:http://www.aulaclic.es/flashcs3/comunes/camera.gif align="absMiddle" caption="external image camera.gif" link="@http://www.aulaclic.es/flashcs3/secuencias/alinear_objetos.htm"]] ||

Para colocarlos de un modo preciso (por no decir exacto), Flash pone a nuestra disposición el Panel Alinear. Este Panel lo podemos encontrar en el Menú Ventana → Alinear. Así funciona: || || Conozcamos un poco mejor el Panel Alinear y sus posibilidades: Para ver ejemplos de uso de estos comandos, podeis ver la animación situada arriba al principio del capítulo. Para practicar la alineación te aconsejamos realizar el [|Ejercicio Alineación de Objetos]. ||
 * [[image:http://www.aulaclic.es/flashcs3/comunes/orangeball.gif width="13" height="14" align="absMiddle" caption="external image orangeball.gif"]] Ahora que ya sabemos seleccionar los objetos o las partes de estos que consideremos oportunas, veamos cómo colocarlos en el Escenario.
 * El Panel Alinear permite colocar los objetos tal y cómo le indiquemos. Antes de ver las posibilidades, debemos hacer hincapié en la opción En Escena . Esta opción nos permite decir a Flash que todas las posiciones que indiquemos para nuestros objetos tomen como referencia el escenario. || [[image:http://www.aulaclic.es/flashcs3/graficos/panel_alinear_enesc2004.gif width="39" height="55" caption="external image panel_alinear_enesc2004.gif"]] ||
 * Si esta opción no está seleccionada, los objetos toman como referencia al conjunto de objetos en el que se encuentran, y se colocan en función de ellos. Lo más habitual es seleccionar En Escenario, para que los objetos se coloquen según los límites de la película, en el centro del fotograma etc...
 * Alineamiento: [[image:http://www.aulaclic.es/flashcs3/graficos/panel_alinear_alin2004.gif width="164" height="43" align="absMiddle" caption="external image panel_alinear_alin2004.gif"]]** Sitúa los objetos en una determinada posición del fotograma (si está seleccionado En Escena). Las distintas opciones afectan a todos los elementos seleccionados y se emplean muy a menudo para situar los objetos en determinados sitios predefinidos. Por ejemplo: Si quisieramos situar un objeto en la esquina inferior izquierda, bastaría pulsar el primer y el sexto botón consecutivamente.
 * Distribuir:** [[image:http://www.aulaclic.es/flashcs3/graficos/panel_alinear_dist2004.gif width="159" height="36" align="absMiddle" caption="external image panel_alinear_dist2004.gif"]] Sitúa los objetos en el escenario en función de unos ejes imaginarios que pasan por cada uno de ellos, de modo que la distribución de los mismos sea uniforme. Por ejemplo, si tenemos 2 cuadrados y pulsamos el primer botón de la izquierda. Cada uno de los 2 cuadrados se situará en un extremo de la película (uno arriba y otro abajo).
 * Coincidir Tamaño:** [[image:http://www.aulaclic.es/flashcs3/graficos/panel_alinear_coinc2004.gif width="90" height="37" align="absMiddle" caption="external image panel_alinear_coinc2004.gif"]] Hace coincidir los tamaños de los objetos. Si está activo "En Escena" estirará los objetos hasta que coincidan con el ancho y el largo de la película. Si no está activo, la referencia será el resto de objetos. Por ejemplo, si tenemos 2 cuadrados distintos y la opción "En Escena" no está activada, al hacer clic en el primer botón de "Coincidir Tamaño", el cuadrado más estrecho pasará a tener la anchura del cuadrado más ancho. Si "En Escena" hubiera estado activo ambos cuadrados hubieran pasado a tener el ancho del fotograma.
 * Espacio:** [[image:http://www.aulaclic.es/flashcs3/graficos/panel_alinear_esp2004.gif width="53" height="37" align="absMiddle" caption="external image panel_alinear_esp2004.gif"]] Espacia los objetos de un modo uniforme.


 * Panel Información || [[image:http://www.aulaclic.es/flashcs3/comunes/camera.gif align="absMiddle" caption="external image camera.gif" link="@http://www.aulaclic.es/flashcs3/secuencias/propiedades_objetos.htm"]] ||

A este Panel se puede acceder desde el Menú Ventana → Información. Las posibilidades de este Panel son limitadas, pero si buscamos exactitud en las medidas o no nos fiamos de las distribuciones de objetos que crea Flash, debemos acudir a él. || || Este indicador puede ser engañoso, el motivo es que indica el color que tiene el objeto por el que en ese momento pasamos el cursor del ratón. Por tanto, podemos tener seleccionado un objeto (haciendo clic en él) y ver en el Panel Información su tamaño y su posición, pero al desplazar el ratón, el valor del color cambiará y ya no indicará el color del objeto seleccionado, sino el del objeto por el que pase el cursor. Tened esto en cuenta para no cometer errores o perder tiempo innecesario.
 * [[image:http://www.aulaclic.es/flashcs3/comunes/orangeball.gif width="13" height="14" align="absMiddle" caption="external image orangeball.gif"]] Además de controlar la posición de los objetos desde el Panel Alineamiento, también podemos hacerlo, de un modo más exacto (más matemático) desde otro panel, el Panel Información.
 * **Medidas del Objeto:** [[image:http://www.aulaclic.es/flashcs3/graficos/panel_info_size.gif width="23" height="24" align="absMiddle" caption="external image panel_info_size.gif"]] Aquí introduciremos un número que represente el **tamaño** de nuestro objeto en la medida seleccionada en las Propiedades del documento . An: hace referencia a la anchura y Al: a la altura.
 * Situación del objeto**: [[image:http://www.aulaclic.es/flashcs3/graficos/panel_info_pos.gif width="21" height="22" align="absMiddle" caption="external image panel_info_pos.gif"]] Desde aquí controlamos la **posición** del objeto en el escenario. La X y la Y representan el eje de coordenadas (La X es el eje Horizontal y la Y el eje vertical). Las medidas también van en función de las medidas elegidas para la película.
 * Color Actual**:[[image:http://www.aulaclic.es/flashcs3/graficos/panel_info_color.gif width="21" height="18" align="absMiddle" caption="external image panel_info_color.gif"]] Indica el color actual en función de la cantidad de Rojo (R), Verde (V), Azul (A) y efecto Alfa (Alfa) que contenga.
 * Posición del Cursor:** [[image:http://www.aulaclic.es/flashcs3/graficos/panel_info_cursor.gif width="21" height="19" align="absMiddle" caption="external image panel_info_cursor.gif"]] Indica la posición del cursor. Es útil por si queremos que suceda algo en la película al pasar el cursor justo por una posición determinada o para situar partes del objeto en lugares específicos. ||


 * Los Grupos || [[image:http://www.aulaclic.es/flashcs3/comunes/camera.gif align="absMiddle" caption="external image camera.gif" link="@http://www.aulaclic.es/flashcs3/secuencias/agrupar_objetos.htm"]] ||

Tras hacer esto observaremos que desaparecen las texturas que indicaban que los objetos estaban seleccionados y observamos que el grupo pasa a ser un "todo", ya que resulta imposible seleccionar a uno de sus miembros sin que se seleccionen a su vez los demás. Además, aparece el rectángulo azul (por defecto) que rodea al grupo, definiéndolo como tal. || Por ejemplo, supongamos que tenemos un dibujo que representa un conjunto de coches. Tras dibujarlos todos, nos damos cuenta de que queremos aumentar el tamaño de los coches. Podemos aumentar el tamaño de los coches de uno en uno, corriendo el riesgo de aumentar unos más que otros y perdiendo las proporciones entre ellos, o podemos formar un grupo con los coches y aumentar el tamaño del grupo, de modo que aumenten todos de tamaño a la vez y en la misma proporción. De igual modo, podemos mover al grupo de posición, hacer que gire... Al crear un grupo, simplemente estamos dando unas propiedades comunes a un conjunto de objetos y, en ningún caso perdemos nuestro objeto. En cualquier momento podemos deshacer el grupo, mediante el Menú Modificar → Desagrupar. Además, Flash nos permite modificar los elementos de un grupo sin tener que desagruparlo. Para ello, seleccionamos el Grupo de elementos y hacemos clic en el Menú Edición → Editar Seleccionado. Podremos editar los objetos que componen el grupo por separado teniendo en cuenta que, como es lógico, los cambios realizados afectarán al grupo además de al elemento en cuestión. ||
 * [[image:http://www.aulaclic.es/flashcs3/comunes/orangeball.gif width="13" height="14" align="absMiddle" caption="external image orangeball.gif"]] Un Grupo no es más que un conjunto de objetos. Si bien no cualquier conjunto de objetos forman un grupo, ya que para crear un grupo, debemos indicarle a Flash que así lo queremos. Para ello, basta seleccionar los objetos que queremos que formen parte de un grupo y después hacer clic en el Menú Modificar → Agrupar.
 * [[image:http://www.aulaclic.es/flashcs3/graficos/planetas2.gif width="176" height="169" align="center" caption="external image planetas2.gif"]] || [[image:http://www.aulaclic.es/flashcs3/graficos/planetas3.gif width="176" height="179" align="center" caption="external image planetas3.gif"]] ||
 * [[image:http://www.aulaclic.es/flashcs3/comunes/orangeball.gif width="13" height="14" align="absMiddle" caption="external image orangeball.gif"]] Crear grupos es muy útil, ya que nos permite, como ya hemos dicho, tratar al conjunto de objetos como un todo y por tanto, podemos aplicar efectos al conjunto, ahorrándonos la labor de hacerlo de objeto en objeto.

REALISACION DE TALLERES AULACLIC

@http://www.aulaclic.es/flashcs3/index.htm