Top Banner
10/2/2015 6. Uso de DBMS http://ict.udlap.mx/people/carlos/is341/bases06.html 1/20 6. Uso de DBMS 6.1 Introducción 6.1.1 Definición DBMS Database Management System Colección de datos interrelacionados y un conjunto de programas para acceder a esos datos 6.1.2 Componentes de un DBMS Data definition language (DDL): Define elementos de los datos en la base de datos Data manipulation language (DML): Manipula datos para aplicaciones Data dictionary: Definiciones de todas las variables en la base 6.2 DBMS más populares 6.2.1 Ejemplos Logo Nombre URL Productos Sybase www.sybase.com Adaptive Server Oracle www.oracle.com Oracle8, Oracle8i, Oracle8iEE,
20

Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

Mar 04, 2023

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 1/20

6. Uso de DBMS6.1 Introducción

6.1.1 Definición

DBMS Database Management SystemColección de datos interrelacionados y un conjunto de programas para acceder a esos datos

6.1.2 Componentes de un DBMS

Data definition language (DDL): Define elementos de los datos en la base de datos

Data manipulation language (DML): Manipula datos para aplicaciones

Data dictionary: Definiciones de todas las variables en la base

6.2 DBMS más populares

6.2.1 Ejemplos

Logo Nombre URL Productos

Sybase www.sybase.com AdaptiveServer

Oracle www.oracle.com

Oracle8,Oracle8i,

Oracle8iEE,

Page 2: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 2/20

Oracle9i,Oracle 10g

PostgreSQL www.postgresql.org PostgreSQL

Microsoft www.microsoft.comAccess,MS-SQLServer

MySQL www.mysql.com MySQL

Informix www.informix.com

Illustra,UniversalServer,

DynamicServer

IBM www.ibm.com DB2

Apache http://db.apache.org/derby Derby

SQLite http://www.sqlite.org SQLite

Firebird http://firebird.sourceforge.net Firebird

Page 3: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 3/20

6.2.2 Principales Diferencias entre DBMS

6.2.2.1 Diferencias

Costo”Gratuitos”:MySQL, PostgreSQL, mSQL, Interbase

Comerciales:DB2, Sybase, Informix, Oracle

Otros de dominio público:http://www.faqs.org/faqs/databases/free-databases/

Técnicas

Sub-selectsSelect into tableTransactionsUDF (user defined functions)Foreign keysViewsTipos de DatosManejo de memoria (Virtual Memory, Shared Memory)Manejo de disco (Archivos, Chunks)

6.2.2.2 Costos de Oracle (2000)

Cotizando Oracle

Example 1: You are licensing the Oracle8iEE for a computer which has

2 - 400MHz RISC processors.How many Universal Power Units do you need?

(1 computer x 2 processors * 400MHz * 1.5 (RISC Factor) = 1,200 Universal Power Unitsfor each program that you license for this computer.Example 2: You are licensing Oracle8iEE for your entire environment -4 Intel computers each with a 550MHz Intel processor;1 computer with 8 - 400MHz RISC processors. How many Universal Power Units do you need?

4 computers x 1 processor x 550MHz x 1.0 (Intel Factor)=2,200 UPU 1 computer x 8 processors x 400MHz x 1.5 (RISC Factor)=4,800 UPU Total: 7,000 UPU

Example 3: You have a mainframe computer that has 200 MIPS and are licensingOracle8iEE. How many Universal Power Units do you need?

1 computer x 200 MIPS x 24 (Mainframe Factor) = 4,800 UPUs are required

Pricing

Case 1

For Oracle 8i (you can get 5%-10% off the list price, but that about it) take the UPU andmuiltiply by: Perpetual $15.00 4 Year(lease) 9.00 2 year (lease) 5.25

Example:2 Sun ULTRA10 with 450mhz2*450*1.5=1350 upu 1350upu*$15= $20,500 usd

And do not forget about 15% or so per year for support.

Support (each year) $ 3,075usd

Case 2

Page 4: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 4/20

Now if you have more than 2 cpu's (they force you) or want Oracle 8iEE (all the goodstuff) Perpetual $100.00 4 Year(lease) 60.00 2 year (lease) 35.00

1350upu* $100= $ 135,000 usdfor 8iEE

And do not forget about 15% or so per year for support.

Support (each year) $ 20,250usd

Más cotizaciones de Oracle aquí

6.2.2.3 Escogiendo la combinación perfecta

Consideraciones al elegir un DBMS

Número de usuariosNúmero de transaccionesCantidad de datos para almacenarConsistencia en la informaciónPresupuestoExperiencia propia o externa*

*SQL Server, Informix, Oracle

SQL server is OK for very small installations. Do not try to run a majororganization on this product. If horsepower (CPU number crunching forexample) is required, move on to the real relation databases.

Oracle is popular, expensive, global in its reach, and can do most any thingyou need, (for a small fee). It tends to be more labour intensive thenINFORMIX, and from my experience crashes far too often for my taste. You willhardly ever find an Oracle DBA alone. Be careful, because Oracle has the bestmarketing going right now, not necessarily the best product. Sort of like MS.

Informix is fast, scalable ,affordable,stable if you have good code and doesnot require a herd of DBA's to keep the database operational. Set it up on goodhardware and leave it alone. Case in point: Walmart runs every store and theirCorp offices on INFORMIX databases. There are several thousand serversinvolved, all managed by less then 10 fulltime DBA's. Take a look at thenumber of DBA's in an average Oracle shop and please note they are all verybusy, all the time.

Best thing to do is get some loaner boxes and try them both.

One Consultant/DBA's opinion

6.3 Arquitectura de un manejador de bases de datos (DBMS)Nota: Las partes utilizadas para ejemplificar la arquitectura se refieren a Oracle

Page 5: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 5/20

Una base de datos en ejecución consta de 3 cosas:

ArchivosControl (ctl): almacenan información acerca de la estructura de archivos de la base.Rollback (rbs): cuando se modifica el valor de alguna tupla en una transacción, los valores nuevosy anteriores se almacenan en un archivo, de modo que si ocurre algún error, se puede regresar(rollback) a un estado anterior.Redo (rdo): bitácora de toda transacción, en muchos dbms incluye todo tipo de consultaincluyendo aquellas que no modifican los datos.Datos (dbf): el tipo más común, almacena la información que es accesada en la base de datos.Indices (dbf) (dbi): archivos hermanos de los datos para acceso rápido.Temp (tmp): localidades en disco dedicadas a operaciones de ordenamiento o alguna actividadparticular que requiera espacio temporal adicional.

MemoriaShared Global Area (SGA): es el área más grande de memoria y quizás el más importante

Shared Pool: es una caché que mejora el rendimiento ya que almacena parte del diccionariode datos y el parsing de algunas consultas en SQLRedo Log Buffer: contiene un registro de todas las transacciones dentro de la base, lascuales se almacenan en el respectivo archivo de Redo y en caso de siniestro se vuelven aejecutar aquellos cambios que aún no se hayan reflejado en el archivo de datos (commit).Large Pool: espacio adicional, generalmente usado en casos de multithreading y esclavos deI/O.Java Pool: usado principalmente para almacenar objetos Java

Program Global Area (PGA): información del estado de cursores/apuntadoresUser Global Area(UGA): información de sesión, espacio de stack

ProcesosThreadingSystem Monitor: despierta periódicamente y realiza algunas actividades entre las que seencuentran la recuperación de errores, recuperación de espacio libre en tablespaces y ensegmentos temporales.Process Monitor: limpia aquellos procesos que el usuario termina de manera anormal, verificandoconsistencias, liberación de recursos, bloqueos.Database Writer: escribe bloques de datos modificados del buffer al disco, aquellas transaccionesque llegan a un estado de commit.Log Writer: escribe todo lo que se encuentra en el redo log buffer hacia el redo fileCheckpoint: sincroniza todo lo que se tenga en memoria, con sus correspondientes archivos endisco

Page 6: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 6/20

Instancia de una bd en Oracle

Page 7: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 7/20

Rotación de segmentos de rollback

Page 8: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 8/20

Rotación de bitácoras de Redo

Page 9: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 9/20

Ejemplo del esquema de una base de datos en Oracle

Utilización del Shared Pool

Page 10: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 10/20

Ejemplo del control de transacción

6.4 Tipos de instancias de un DBMSOnline Transaction Processing (OLTP): compra/venta, telemarketing

Segmentos cortos de rollbackShared Pool muy largoRedo log suficienteIndices en discos separadosSegmentos temporales pequeños

Decision Support Systems (DSS): datawarehouse

Segmentos largos de rollbackShared Pool relativamente cortoRedo log suficienteIndices apropiadosSegmentos largos de temporalParallel Query en la medida de lo posible (si está disponible)

Por otro lado un dbms puede ser implantado de 2 formas:

Cliente-ServidorThree tier

Page 11: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 11/20

Implantación Cliente-Servidor de un DBMS

Page 12: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 12/20

Implantación 3 Tier de un DBMS

Finalmente, también se puede considerar la opción de crear clusters de máquinas o discos para poder brindardisponibilidad y escalabilidad. Existen 2 tipos de clusters:

SharedNothing:

explota mejor hardware económicocasi ilimitada escalabilidadtrabaja bien en ambientes r-wlos datos están particionados a través del cluster

ShareNothing Cluster

Page 13: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 13/20

SharedDisk:

adaptabilidad para el balance de cargasgran disponibilidadse desempeña mejor en ambientes de solo rlos datos no necesitan particionarse

DiskShared Cluster

6.5 Administración de un DBMS real

6.5.1 MySQL

MySQL (pronunciado mai-es-quiu-el), es una manejador de bases de datos relacional bastante robusto, decódigo abierto bajo la licencia GPL el cual se ha convertido en el más popular hoy en día.

Su origen se debió a la búsqueda por parte de los fundadores de crear un manejador de bases de datos quefuera "rápido", todavía más rapido que mSQL. Así surgió MySQL, primero como un producto de la empresa ydespúes como software de dominio público.

El nombre de My se debe probablemente a que la hija del cofundador Monty Widenius recibía esesobrenombre, aunque a ciencia cierta nunca se ha revelado el origen. Por otro lado en el año 2002 MySQLtuvo un logo más original que el simple nombre, incluyendo un delfín, el cual a través de una encuesta en lapágina web recibió su nombre: "Sakila", de origen africano.

6.5.1.1 Por qué usar MySQL ?

Es importante resaltar que no se trata de una herramienta de juguete o aprendizaje, MySQL es un manejadorque puede competir competir con sus famosas contrapartes comerciales: Oracle, DB2, Informix, Sybase.

Básicamente los motivos por los cuales se podría optar por usar MySQL en lugar de otro manejador serían:

Es gratisEs extensibleEs robustoEs rápido

Page 14: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 14/20

No requiere de una gran número de recursos para funcionar (obviamente para aplicaciones a granescala es mejor contar con una buena infraestructura)Es fácil de administrar

6.5.1.2 Instalación Básica

MySQL posee varias versiones 3, 4 y 5 siendo la 3 la más estable y la 5 la más experimental

Los cambios en la versión 4 permiten tener mayor funcionalidad, teniendo por ejemplo queries anidados ybúsquedas a texto completo.

MySQL posee 4 tipos de tablas (y en consecuencia de índices):

Index VersiónMyISAM Standard, MaxHeap Standard, MaxBerkeleyDB MaxInnodb Max

Tabla 3.1 Indexamiento en MySQL

MyISAM se basa en un indexamiento por bloques, Heap es una tabla que existe solo en memoria, mientrasque BDB e InnoDB utilizan B-Trees.

Se puede observar que existen 2 variantes del software, la Standard y la Max; la diferencia radica en elsoporte de transacciones que es posible en la versión Max gracias a los módulos de Berkeley DB e InnoDBincorporados en ella.

Es importante resaltar que aunque esta funcionalidad esta disponible no es la configuración por default, salvoque se indique lo contrario, siempre tipo de indexamiento por defecto será MyISAM.

El equipo MySQL recomienda bajar los binarios compilados por ellos para evitar cualquier tipo de problema,de manera que en la sección de "Database Server" se puede bajar el binario de la versión deseada.

Una vez descargado el software se procede a desempaquetarlo (.tgz, zip) o bien ejecutar el .execorrespondiente.

Dichos directorios contenidos en un directorio que por lo general lleva el mismo nombre 'mysql' contiene unaestructura de la siguiente manera:

bin: programas ejecutables, mysql, mysqld, mysqldump, myisamchk, mysqlbinlog.include, lib, libexec: librerías y encabezados para programar en C/C++mysql-test, sql-bench: pruebas y benchmarksvar ó data: estructura de todas las bases y datos de las tablas tipo MyISAM y Berkeley DB.man: páginas de manualshare: información en distintos idiomassupport-files: archivos de configuración y scripts de arranque automático

Antes de poder ejecutar el demonio (o guardián) del manejador, es conveniente realizar una configuración,para ello se tiene que editar alguno de los archivos .cnf, los cuales se encuentran ubicados en el directorioraíz de mysql o bien en el directorio support-files. El archivo elegido dependera de la configuración de lamáquina (small, medium, large, huge), cada archivo provee información acerca de la memoria apropiada

Page 15: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 15/20

para cada configuración. La tabla 3.2 muestra un ejemplo de configuración para una arquitectura media.

Parte de la tarea de configuración es habilitar el soporte de InnoDB, configurando cada una de las variablesde acuerdo a lo propuesto en 3.2, desde luego los aspectos más importantes serán los buffers

# Example mysql config file for medium systems.## This is for a system with little memory (32M - 64M) where MySQL plays# a important part and systems up to 128M very MySQL is used together with# other programs (like a web server)## You can copy this file to# /etc/mf.cnf to set global options,# mysql-data-dir/my.cnf to set server-specific options (in this# installation this directory is /centia01/develop/database/mysql/var) or# ~/.my.cnf to set user-specific options.## One can in this file use all long options that the program supports.# If you want to know which options a program support, run the program# with --help option.# The following options will be passed to all MySQL clients[client]#password = your_passwordport = 3306socket = /tmp/mysql.sock# Here follows entries for some specific programs# The MySQL server[mysqld]port = 3306socket = /tmp/mysql.sockskip-lockingset-variable = key_buffer=64Mset-variable = max_allowed_packet=256Mset-variable = table_cache=64set-variable = sort_buffer=512Kset-variable = net_buffer_length=8Kset-variable = myisam_sort_buffer_size=16Mset-variable = max_connections=500set-variable = interactive_timeout=604800set-variable = wait_timeout=604800log-binserver-id = 1set-variable=default_table_type=innodb# Point the following paths to different dedicated diskstmpdir = /var/tmp/ #log-update = /centia01/final/database/mysql/var/log-catarina# Uncomment the following if you are using BDB tablesset-variable = bdb_cache_size=4Mset-variable = bdb_max_lock=10000# Uncomment the following if you are using Innobase tablesinnodb_data_file_path = ibdata1:30G:autoextendinnodb_data_home_dir = /database/mysql/innodbinnodb_log_group_home_dir = /database/mysql/innodbinnodb_log_arch_dir = /database/mysql/innodbset-variable = innodb_mirrored_log_groups=1set-variable = innodb_log_files_in_group=3set-variable = innodb_log_file_size=5Mset-variable = innodb_log_buffer_size=16Minnodb_flush_log_at_trx_commit=1innodb_log_archive=0set-variable = innodb_buffer_pool_size=256Mset-variable = innodb_additional_mem_pool_size=256Mset-variable = innodb_file_io_threads=4set-variable = innodb_lock_wait_timeout=50#set-variable = innodb_force_recovery=3[mysqldump]quickset-variable = max_allowed_packet=256M[mysql]prompt=(\u) [\d]>\_no-auto-rehash# Remove the next comment character if you are not familiar with SQL#safe-updates[isamchk]set-variable = key_buffer=20Mset-variable = sort_buffer=20Mset-variable = read_buffer=2Mset-variable = write_buffer=2M[myisamchk]set-variable = key_buffer=20Mset-variable = sort_buffer=20Mset-variable = read_buffer=2Mset-variable = write_buffer=2M[mysqlhotcopy]

Page 16: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 16/20

interactive-timeout

Tabla 3.2 Archivo de Configuración my.cnf, my.ini

6.5.1.3 Arranque y Terminación

Arranque del manejador

Una vez configurado se puede iniciar el demonio del dbms a través del comando "mysqld" o alguna de susvariantes "safe_mysqld", "mysqld-max"

Esto se puede hacer desde cualquier terminal y se pueden pasar como parametros algunas de las mismasvariables disponibles para configuración (en caso de necesitar alguna opción particular)

Terminación del manejador

Se puede hacer de 2 maneras

a) Usando el comando "mysqladmin shutdown"b) Matando el proceso asociado

6.5.1.4 Creación de bases y cuentas de usuario

La tabla 3.3 muestra la manera en que cualquier usuario puede conectarse a la base llamada 'mysql' con elusuario 'root', para ello es indispensable contar con el password correspondiente; como se presentará másadelante la cuenta del super usuario 'root' se administra de manera similar que los demás usuario.

[digital@pcproal digital]$ mysql -u root -p mysqlEnter password: ****Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1 to server version: 4.1.0-alpha-log

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

(root) [mysql]>

Tabla 3.3 Conexión con el dbms

La tabla 3.4 muestra las tablas correspondientes a la base principal y que administra todos los usuarios,máquinas y bases permitidas en el manejador, recordando que se trata de un esquema relacional en el cualpor ejemplo los usuarios se encuentran vinculados son bases de datos, de manera que no pueden existirproblemas de seguridad al haber algun usuario malintencionado que pretenda modificar una base a la cual notenga acceso.

Page 17: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 17/20

(root) [mysql]> show databases;+------------+| Database |+------------+| mysql |+------------+1 rows in set (0.12 sec)

(root) [mysql]> show tables;+-----------------+| Tables_in_mysql |+-----------------+| columns_priv || db || func || help_category || help_relation || help_topic || host || tables_priv || user |+-----------------+9 rows in set (0.10 sec)

Tabla 3.4 Tablas de administración del dbms

Para cada tabla se puede emplear el comando 'desc' o 'describe' para analizar la estructura de cada tabla yapreciar la relación que tiene con las demás.

Para dar de un alta un usuario, ejemplo de la tabla 3.5, se debe crear el usuario dentro de la tabla 'user',crear la base de datos y posteriormente asociar dicho usuario con la base en la tabla 'bd', todo lo anteriorutilizando instrucciones de SQL tradicionales.

(root) [mysql]> desc user;+-----------------------+-----------------------------------+-------------------+------+-----+---------+-------+| Field | Type | Collation | Null | Key | Default | Extra |+-----------------------+-----------------------------------+-------------------+------+-----+---------+-------+| Host | varchar(60) binary | binary | | PRI | | || User | varchar(16) binary | binary | | PRI | | || Password | varchar(45) binary | binary | | | | || Select_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Insert_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Update_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Delete_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Create_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Drop_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Reload_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Shutdown_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Process_priv | enum('N','Y') | latin1_swedish_ci | | | N | || File_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Grant_priv | enum('N','Y') | latin1_swedish_ci | | | N | || References_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Index_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Alter_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Show_db_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Super_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Create_tmp_table_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Lock_tables_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Execute_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Repl_slave_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Repl_client_priv | enum('N','Y') | latin1_swedish_ci | | | N | || ssl_type | enum('','ANY','X509','SPECIFIED') | latin1_swedish_ci | | | | || ssl_cipher | blob | binary | | | | || x509_issuer | blob | binary | | | | || x509_subject | blob | binary | | | | || max_questions | int(11) unsigned | binary | | | 0 | || max_updates | int(11) unsigned | binary | | | 0 | || max_connections | int(11) unsigned | binary | | | 0 | |+-----------------------+-----------------------------------+-------------------+------+-----+---------+-------+31 rows in set (0.00 sec)

(root) [mysql]> desc db;+-----------------------+-----------------+-------------------+------+-----+---------+-------+| Field | Type | Collation | Null | Key | Default | Extra |+-----------------------+-----------------+-------------------+------+-----+---------+-------+| Host | char(60) binary | binary | | PRI | | || Db | char(64) binary | binary | | PRI | | || User | char(16) binary | binary | | PRI | | |

Page 18: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 18/20

| Select_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Insert_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Update_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Delete_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Create_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Drop_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Grant_priv | enum('N','Y') | latin1_swedish_ci | | | N | || References_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Index_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Alter_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Create_tmp_table_priv | enum('N','Y') | latin1_swedish_ci | | | N | || Lock_tables_priv | enum('N','Y') | latin1_swedish_ci | | | N | |+-----------------------+-----------------+-------------------+------+-----+---------+-------+(root) [mysql]> insert into user (host,user,password) values ('%','carlos',password('lolo'));Query OK, 1 row affected (0.07 sec)

(root) [mysql]> select * from user where user='carlos';+------+--------+-----------------------------------------------+-------------+-------------+-------------+-------------+| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv |+------+--------+-----------------------------------------------+-------------+-------------+-------------+-------------+| % | carlos | *87f0212af7420ce3e0b2b8992eb42dda4be54c9125b3 | N | N | N | N |+------+--------+-----------------------------------------------+-------------+-------------+-------------+-------------+1 row in set (0.00 sec)

(root) [mysql]> create database prueba;Query OK, 1 row affected (0.00 sec)

(root) [mysql]> insert into db values ('%','prueba','carlos','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');Query OK, 1 row affected (0.00 sec)

(root) [mysql]> select * from db where user='carlos';+------+--------+--------+-------------+-------------+-------------+-------------+| Host | Db | User | Select_priv | Insert_priv | Update_priv | Delete_priv |+------+--------+--------+-------------+-------------+-------------+-------------+| % | prueba | carlos | Y | Y | Y | Y |+------+--------+--------+-------------+-------------+-------------+-------------+1 row in set (0.09 sec)

(root) [mysql]> flush privileges;Query OK, 0 rows affected (0.07 sec)

Tabla 3.5 Creación de una cuenta de usuario

6.5.1.5 Utilización de la base de datos

SQL

MySQL cumple con el estándar SQL92. Es importante resaltar que aunque no implementa todas las funcionesque otros manejadores poseen, es posible realizar cualquier consulta usando los distintos tipos de joins oinclusive a través de tablas temporales.

Page 19: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 19/20

[digital@pcproal digital]$ mysql -u carlos -p pruebaEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 3 to server version: 4.1.0-alpha-log

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

(carlos) [prueba]> show tables;Empty set (0.00 sec)

(carlos) [prueba]> create table auser (id int primary key, last_name char(255),first_name char(255));Query OK, 0 rows affected (0.07 sec)

(carlos) [prueba]> show tables;+------------------+| Tables_in_prueba |+------------------+| auser |+------------------+1 row in set (0.00 sec)

(carlos) [prueba]> insert into auser values (1,'proal','carlos');Query OK, 1 row affected (0.00 sec)

(carlos) [prueba]> select * from auser;+----+-----------+------------+| id | last_name | first_name |+----+-----------+------------+| 1 | proal | carlos |+----+-----------+------------+1 row in set (0.08 sec)

Tabla 3.6 Ejemplos de SQL

Creación de índices

La sintáxis de creación de índices no está considerada como un estándar, así que varía en cada dbms, ej.

create index index_name on table_name (atrib_1,..atrib_n);

En el caso partícular de MySQL toda llave primaria está asociada a un índice, así que no se requiere crear uníndice adicional para dicho propósito.

Por otro lado si se crea un índice X que contiene a los atributos (a,b,c) ya no es necesario crear un índicepara el caso de hacer una consulta que sólo involucre a (a) o (a,b) ya que se empleará el mismo índice X;para saber con certeza qué índices de están empleando en una consulta se puede recurrir a la expresión de'explain'.

(carlos) [prueba]> create index iname on auser(last_name,first_name);Query OK, 1 row affected (0.15 sec)Records: 1 Duplicates: 0 Warnings: 0

(carlos) [prueba]> show index from auser;+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+| auser | 0 | PRIMARY | 1 | id | A | 1 | NULL | NULL | | BTREE | || auser | 1 | iname | 1 | last_name | A | 1 | NULL | NULL | YES | BTREE | || auser | 1 | iname | 2 | first_name | A | 1 | NULL | NULL | YES | BTREE | |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+3 rows in set (0.00 sec)

(carlos) [prueba]> explain select * from auser where last_name='aguilar';+----+-------------+-------+------+---------------+-------+---------+-------+------+--------------------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+------+---------------+-------+---------+-------+------+--------------------------+| 1 | SIMPLE | auser | ref | iname | iname | 256 | const | 1 | Using where; Using index |+----+-------------+-------+------+---------------+-------+---------+-------+------+--------------------------+1 row in set (0.08 sec)

Page 20: Sub-selects Select into table Transactions UDF (user defined functions) Foreign keys Views Tipos de Datos

10/2/2015 6. Uso de DBMS

http://ict.udlap.mx/people/carlos/is341/bases06.html 20/20

Tabla 3.7 Empleo de índices

Mantenimiento y monitoreo de la base

Actividad ComandoRevisar el estado de las tablas show table status;Los procesos que están ejecutándose show processlist;Variables con las que se está ejecutando lainstancia show variables;

Estado actual de innodb; show innodbstatus;

Respaldos

La manera usual de hacer un respaldo es usando el comando mysqldump, que posee muchas opciones quepermiten duplicar todas las base, una base en particular, una tabla, solo los datos, solo la estructura, etc.

Para obtener un respaldo completo de una base

[digital@pcproal digital]$ mysqldump --opt -u carlos -p prueba > prueba.bak

Para restaurar un respaldo completo de una base

[digital@pcproal digital]$ mysql -u carlos -p prueba < prueba.bak

Otra manera de hacer respaldos es através del comando "select into" y restaurar los datos con "mysqlimport"o "load data infile".