Jose M. Fernández Sobre o autor: [escreva um ou dois parágrafos aqui sobre a biografia] Conteúdo: Introdução Principais Características Instalação Primeiros Passos, Administração (Segurança) Conclusões |
MySQL
|
Tables |
---|
db |
host |
user |
Field | Type | Null | Key | Default | Extra |
Host | char(60) | PRI | |||
Db | char(32) | PRI | |||
User | char(16) | PRI | |||
Select_priv | char(1) | N | |||
Insert_priv | char(1) | N | |||
Update_priv | char(1) | N | |||
Delete_priv | char(1) | N | |||
Create_priv | char(1) | N | |||
Drop_priv | char(1) | N |
Field | Type | Null | Key | Default | Extra |
Host | char(60) | PRI | |||
Db | char(32) | PRI | |||
Select_priv | char(1) | N | |||
Insert_priv | char(1) | N | |||
Update_priv | char(1) | N | |||
Delete_priv | char(1) | N | |||
Create_priv | char(1) | N | |||
Drop_priv | char(1) | N |
Field | Type | Null | Key | Default | Extra |
Host | char(60) | PRI | |||
User | char(16) | PRI | |||
Password | char(16) | ||||
Select_priv | char(1) | N | |||
Insert_priv | char(1) | N | |||
Update_priv | char(1) | N | |||
Delete_priv | char(1) | N | |||
Create_priv | char(1) | N | |||
Drop_priv | char(1) | N | |||
Reload_priv | char(1) | N | |||
Shutdown_priv | char(1) | N | |||
Process_priv | char(1) | N | |||
File_priv | char(1) | N |
Podemos decidir se autorizamos ou não selecionar (SELECT) , inserir (INSERT), atualizar (UPDATE), e apagar (DELETE) linhas de uma tabela.
Podemos permitir ou não, criar o inibir (CREATE, DROP) tabelas ou banco de dados.
Podemos permitir, ou não, usar os comandos de administração do gerenciador de banco de dados como shutdown, reload, process, etc.
Podemos sempre comprovar nossos previlégios com o script mysqlaccess.
Um HOST deve ser um host local, um número IP, ou uma expressão SQL . Se na tabela db a coluna hosta está vazia, significa cualquier host na tabela de host. Se na tabela host ou user a coluna host está vazia, significa que qualquer HOST pode criar uma conexão TCP com vosso servidor.
Db é o nome de um banco de dados.
Uma coluna USER vazia, significa qualquer nome de usuário.
A forma mais rápida de iniciar o servidor é executando :
mysql.server startPodemos realizar o mesmo executando o script safe_mysql como indicado no guia de instalação, ainda que no final, de uma forma ou de outra, será executado o arquivo mysqld.
É necessária, como podemos supor, iniciar o servidor para realizar qualquer operação com o banco de dados, e uma vez realizado, podemos executar vários comandos para comprovar que a partida do servidor esteje correto como, por exemplo, mysqladmin cujo formato completo será :
mysqladmin [OPÇÕES] comando comandoonde OPÇÕES puede ser :
onde Comando pode ser um ou mais de :
assim que, executando :
mysqladmin create novobancodedadoscriaremos um novo banco de dados cujo nome será nuevabasededatos
poderemos ver os processos que estão sendo executado no servidor com :
mysqladmin processlistOutro comando importante é mysqlshow que nos permite ver os bancos de dados que
existem, por exemplo, se executamos o comando :
nos mostrará o resulrtado :
+-----------+ | Databases | +-----------+ | mysql | | personas | | test | +-----------+
Como indicamos na introdução, este servidor de banco de dados é considerado como o mais rápido entre os de sua categoria tanto para grandes volumes de dados como pequenos, mas como também indicamos o princípio é o banco de dados de não implementar certos aspectos das especificações SQL estes aspectos, que a meu entender, são importantes por um lado os Triggers e por outro lado a Lógica Transacional.
Os triggers não são nada mais que uma porção de código armazenado que se "dispara" ou se executa quando realizamos uma operação (atualização, deleção, etc.) com o banco de dados. Naturalmente comprovar a própria existencia de disparador e executá-lo, se existe, consome recursos e tempo e é como seu próprio manual informa, a única razão porque os triggers não estão suportados.
Um aspecto muito importante em qualquer banco de dados relacional é a consistencia das diferentes tabelas que o compõem, para conseguir isto de uma forma menos fácil é utilizando a "Lógica Transacional", será o próprio gerenciador de banco de dados que proporcionará mecanismos de bloqueio de arquivos e consolidação ou retrocesso nas operações com as tabelas. Pois bem MySQL não suporta as transações em função da velocidade (ou pelo menos assim indicam em seus comentários), só podem nos ajudar com os comandos LOCK tables /UNLOCK tables que permite bloquear tabelas impidindo que outros usuários possam acessá-las, mas sem a possibilidade de desfazer as operações realizadas com os dados.
Tendo em conta estas restrições na utilização do servidor, veremos como implementamos alguns comandos SQL, não com o objetivo de analisar os comandos, e sim ver como estes comandos são implementadosneste Gerenciador de banco de dados.
Uma vez que tenhamos o servidor já iniciado, nada nos falta do que enviar-lhe instruções para realizar as operações que desejarmos. Como exemplo veremos a criação de um banco de dados "pessoas", que é constituido por tres tabelas, "clientes", "estados" e "municípios". É um exemplo muito simples e sem nenhuma utilidade, mas nos ajudará em um exemplo real de como podemos manipular banco de dados. Em primeiro lugar, diremos que estas operações poderão serem realizadas de várias maneiras: uma delas será através de uma API em C, C++, Java ou por meio de um ODBC sem estarmos trabalhando no Windows95 (com perdão), ou também poderíamos realizá-los com o shell da própria instalação. Esta última maneira nos parece mais apropriada para nosso artigo já que não temos que descrever as particularidades das distintas linguagens de programação.
O Shell do MySQL podemos iniciar, executando:
mysql nomebancodedadose aparecerá o prompt do shell, que poderemos enviar comandos ao servidor.
Assim mesmo podemos executar o shell no modo batch o retardado executando :
mysql -e (comando SQL ) nomebancodedadoscom o que conseguiremos enviar o comando SQL ao servidor.
Para nosso exemplo criamos um banco de dados llamado "pessoas"com o comando.
mysqladmin create pessoasExecutaremos o shell com o comando.
mysql pessoasja podemos enviar desde o shell comandos ao próprio servidor, como por exemplo, que nos ensine as tabelas do banco de dados com o que temos iniciado no shell:
e o sistema responderá com:
+-------------+ | Tables | +-------------+ | clientes | | municipios | | provincias | +-------------+
Todos os comandos que enviamos ao servidor a partir do shell, sempre acabam em /g, que é a forma de indicar o fim de um comando e o envio dele ao servidor para que o execute.
Naturalmente, antes que o sistema nos devolva esta informação, temos que ter criado as tabelas com os correspondentes comandos CREATE, os quais teríam o seguinte aspecto:
CREATE TABLE clientes
CREATE TABLE provincias
CREATE TABLE municipios (Cod_provincia INT(2) NOT NULL, Cod_municipio INT(3) NOT NULL, Descripcion_m CHAR(30) NOT NULL, PRIMARY KEY(Cod_provincia,Cod_municipio)) /g
Continuando, podemos executar:
> show colums from clientes from pessoas /gobteremos respectivamente :
Database: pessoas Table: clientes Rows: 4 +--------------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+----------+------+-----+---------+-------+ | NIF | char(9) | |PRI | | | | Nombre | char(15) | YES | | | | | Apellidos | char(35) | | | | | | Direccion | char(50) | | | | | | Poblacion | int(5) | | | 0 | | | Provincia | int(2) | | | 0 | | | Telefono | int(9) | YES | | | | | Fecha_Alta | date | YES | | | | +--------------+----------+------+-----+---------+-------+
Database: personas Table: provincias Rows: 3 +-----------------+----------+------+-----+---------+-------+ | Field | Type | Null | Key| Default | Extra | +-----------------+----------+------+-----+---------+-------+ | Cod_provincia | int(2) | | PRI | 0 | | | Descripcion_p | char(30) | | | | | +-----------------+----------+------+-----+---------+-------+
Database: personas Table: municipios Rows: 9 +------------------+----------+------+-----+---------+-------+ | Field | Type | Null | Key| Default | Extra | +------------------+----------+------+-----+---------+-------+ | Cod_provincia | int(2) | | PRI | 0 | | | Cod_municipio | int(3) | | PRI | 0 | | | Descripcion_m | char(30) | | | | | +------------------+----------+------+-----+---------+-------+
O próximo passo, será introduzir dados em cada uma das tabelas, vamos utilizar o comando INSERT puro do SQL, sem que haja nenhuma intervenção de qualquer linguagem de programação ou rotinas da API :
Para inserir um registro na tabela clientes, municipios e estados, realizaremos respectivamente:
E finalmente, terminaremos nosso intinerário pelos comandos SQL, realizando seleções nas fileiras que introduzimos nas tabelas criadas anteriormente dentro do banco de dados que criamos para o exemplo deste artigo. Selecionaremos os registros da tabela "cliente" variando a condição de seleção e uma primeira seleção da tabela municípios :
> SELECT ALL Cod_provincia, Cod_municipio, Descripcion_m from municipios where Cod_provincia = 28 /gCod_provincia Cod_municipio Descripcion_m 28 1 Fuenlabrada 28 2 Pozuelo 28 3 Madrid> SELECT ALL NIF,Nombre,Apellidos,Direccion from clientes where Poblacion = 28001
NIF Nombre Apellidos direccion 23198623N JUAN ANDRES RUIZ MORALES C/ CATEDRAL 12 2B 5316828K PEDRO ROMERO DIAZ C/ HOLA 9 52312844J LUIS ALBERTO LISTO JIMENEZ C/ ROSA DE LOS VIENTOS 129 3I
Como comentava no início do artigo, o objetivo que seguia era simplemente mostrar o funcionamento e ver as características fundamentais de uma implementação concreta de um servidor de banco de dados SQL, mas não somente queria indicar uma série de receitas e comandos para poder utilizá-lo, sem que pretendessemos realizar um estudo das possibilidades e carencias que poderiam ter este software, sobretudo porque conhecendo a fundo um produto, podemos obter o máximo rendimento dele, utilizando-o naqueles aspectos em que estão mais potenciados. este é o caso deste gerenciador de banco de dados, já que considero que a não implementação dos triggers e a lógica transacional deixa muito complicado o manuseio dos dados (Inserção, modificações e deleção de registros) a partir de aplicações multiusuários e utilizando grandes movimentos em tabelas relacionadas entre sí. Ainda penso que, para aplicações onde pretendemos realizar consultas muito rápidas a banco de dados muito grandes, seria recomendável este servidor (tendo sempre como referencia a versão semi-free deste servidor).
Informo que para concluir, que a base desre artigo foi obtido na própria documentação MySQL, que a considero bastante completa, de alguns artigos de revistas especializadas, assim como de um amarelado manual "auto didata" da IBM sobre SQL.
JOSEFDEZ@latinmail.com
Esta website é mantida por Miguel Angel Sepulveda © Jose M. Fernández 1998 LinuxFocus 1998 |