Ficha de trabalho nº1 Curso Tecnológico de Informática Módulo 9: Linguagens de programação para a web Bases de Programação 12º Ano Abril de 2011 Objectivo: Introdução às ferramentas programação para a Web Instalação de ferramentas necessárias à programação com PHP Software a instalar – Xampp (1.7.4) Instale o software Xampp - este contém (Apache, Mysql, PHP) (root- password : aluno) Inicialização do Apache e MySQL Faça o Apache Start , e o MySQL Start No Navegador Web escreva localhost – seleccione o separador mysqlAdmin e crie um novo utilizador com o nome aluno e password aluno, atribua todos os privilégios como se fosse root. Introdução ao sistema de bases de dados MySQL A administração do MySQL inclui várias tarefas: Criação e remoção de bases de dados; Criação e remoção de utilizadores; Definição de privilégios dos utilizadores relativamente às bases de dados. 1 Posicione-se na linha de comandos, botão iniciar menu executar digite command.com Para aceder à base de dados mysql poderemos usar p comando: mysql -u aluno -p Depois da inserção da password (aluno) teremos acesso à shell mysql: mysql> Para familiarizar-se com os comandos do mysql realize as seguintes experiências. Poderemos consultar as bases de dados existentes: mysql> SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | test | +----------+ 2 rows in set (0.01 sec) Em seguida, deveremos seleccionar a base de dados mysql e poderemos listar as tabelas que essa base possui: mysql> use mysql; Database changed mysql> SHOW TABLES; +-----------------+ | Tables_in_mysql | +-----------------+ | columns_priv | | db | | func | | host | | tables_priv | | user | +-----------------+ 6 rows in set (0.00 sec) Poderemos fazer a consulta dos utilizadores do SGBD fazendo algo como: mysql> select Host, User, Password from user; +-----------+--------+-------------------------------------------+ | Host | User | Password | +-----------+--------+-------------------------------------------+ | localhost | root | *67E60794AEBE1627808E96533CF0C146EA62F7D1 | | localhost | | | | % | | | +-----------+--------+-------------------------------------------+ 3 rows in set (0.00 sec) Verificamos que existem 3 utilizadores: 1. utilizador root (do MySQL, não do sistema), que apenas se poderá apenas ligar da própria máquina (localhost) e terá de se autenticar usando uma password; 2. um utilizador anónimo, que se poderá apenas ligar da própria máquina (localhost) e que não precisa de password 3. um utilizador anónimo que poderá ligar-se de qualquer máquina e não precisa de password 2 Note-se que os dois utilizadores anónimos não são o mesmo utilizador (a chave desta relação é [Host,User]) e poderão ter privilégios diferentes de acesso ao SGBD. Se agora consultarmos a tabela db da base de dados mysql, já obtemos: mysql> select Host, Db, User from db; +------+------+------+ | Host | Db | User | +------+------+------+ | % | test | | +------+------+------+ 1 row in set (0.00 sec) Outros comandos genéricos úteis a nível de administração: SHOW STATUS; - estado do servidor MySQL SHOW VARIABLES; - configuração do servidor MySQL e variáveis ambiente SELECT version(); - consulta da versão do servidor MySQL SELECT user(); - consulta do nome de utilizador que está a ser empregue no acesso ao servidor. 3 Alguns comandos do mysql 1.1.Entar no mysql em modo root com todos os previlégios mysql -u root –p (no nosso caso substituir root por aluno) 1.2.Sair no mysql Quit; 1.3. Mostrar as base de dados existentes mysql> SHOW DATABASES; 1.4.Criar uma base de dados (ppbd) mysql> CREATE DATABASE ppbd; de seguida para puder usar a base de dados criada deve usar o comando: use ppbd; Acabamos de criar uma nova base de dados (ppbd) o que pode ser verificado por: mysql> SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | ppbd | | test | +----------+ 3 rows in set (0.00 sec) Para remover a base de dados poderemos fazer: 1.5.Remover uma base de dados mysql> DROP DATABASE ppbd; 1.6.Criar Utilizadores & Privilégios Depois de criada uma base de dados ppbd poderemos agora criar um utilizador para a gestão completa desta base de dados. Este procedimento pode ser realizado de duas formas: mysql> GRANT ALL PRIVILEGES ON ppbd.* TO 'aaa'@'localhost' IDENTIFIED by 'aaapass' WITH GRANT OPTION; Com este comando acabamos de criar um novo utilizador com o nome aaa e com password aaapass e fornecemos todos os privilégios sobre a base de dados ppbd. Em seguida teremos de requisitar ao servidor MySQL que releia a tabela de privilégios através do comando: mysql> FLUSH PRIVILEGES; Podemos agora verificar que existe um novo utilizador na base de dados: mysql> select Host,User,Password from user; +-----------+----------+-------------------------------------------+ | Host | User | Password | +-----------+----------+-------------------------------------------+ | localhost | root | *67E60794AEBE1627808E96533CF0C146EA62F7D1 | | localhost | ppbdroot | *7DA31D5EFE0D49F7F40B0791AFC315F82058AB6C | | localhost | | | | % | | | +-----------+----------+-------------------------------------------+ 4 4 rows in set (0.01 sec) E podermos também consultar a tabela de privilégios para confirmar que o utilizador aaa possui todos os privilégios sobre a base de dados ppbd: mysql> select * from db; +-----------+------+----------+-------------+-------------+-------------+------------+-------------+-----------+------------+ | Host | Db | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | +-----------+------+----------+-------------+-------------+-------------+------------+-------------+-----------+------------+ | % | test | | Y | Y | Y | Y | Y | Y | N | | localhost | ppbd | ppbdroot | Y | Y | Y | Y | Y | Y | Y | +-----------+------+----------+-------------+-------------+-------------+------------+-------------+-----------+------------+ 2 rows in set (0.00 sec) Note-se que o utilizador ppbdroot possui todos os privilégios relativos à base de dados ppbd, ao contrário do utilizador anónimo não possui todos os privilégios relativos à base de dados test. Note-se também que ninguém possui privilégios sobre a base de dados mysql o que implica que só o root é que poderá, nestas circunstâncias, criar novos utilizadores e atribuir globalmente privilégios. Depois destas operações o utilizador aaa poderá realizar todas as operações sobre a base de dados ppbd. 1.7.Remover Utilizadores & Privilégios Retira os privilégios na base de dados mysql da tabela user ao utilizador aaa mysql> revoke ALL on mysql.user From 'aaa'@'localhost' 1.8.Alterar a password do uilizador mysql> upadate user Set password= Pawword (‘New_password’) WHERE user=’user_name’; Para que as alterações tenham efeito deve: mysql> FLUSH PRIVILEGES; 1.9. Mostrar as tabelas mysql> show tables; 1.10.Apagar tabelas mysql> Drop Table nome_tabela; 1.11.Mostra os dados inseridos nas tabelas mysql> Select * from nome_tabela; 1.12.Apagar um registo de uma tabela mysql> Delete From tabela [where condição]; 5 Exercicio 1. 2. 3. 4. 5. Entrar no mysql como root (aluno). Criar um utilizador com o seu nome e atribua todos os privilégios. Sai do root e volte a entrar com o utilizador criado anteriormente. Crie uma base de dados com o nome Vendas Use a base de dados vendas para inserir as seguintes tabelas: Clientes(CodCli,Nome, Morada ); Fornecedores(CodForn, Nome, Morada ); Artigos (CodArt,Artigo, P_Unit,CodForn, CodForn ); Encoms (NEnc,Data, CodCli, CodArt, Quant) ; Dicas: Create Table Clientes (CodCli Varchar (5) Primary Key, Nome Varchar (20), Morada Varchar (25) ); Para ver o resultado digite: Mysql> describe clientes; Create Table Fornecedores (CodForn Varchar (5), Nome Varchar (20), Morada Varchar (25) ); Primary Key(CodForn)); Create Table Artigos (CodArt Varchar (5) Primary Key, Artigo Varchar (20), P_Unit Float (10, 2), CodForn Varchar (5) References Fornecedores(CodForn) ); Create Table Encoms (NEnc Int Auto_Increment, Data Date, CodCli Varchar (5) References Clientes(CodCli), CodArt Varchar (5) References Artigos(CodArt), Quant Integer) , Primary Key (NEnc)); 6 6. Inserir dados nas tabelas: use vendas Insert into Clientes Values ("C111", "Antunes", "Aveiro"), ("C122", "Belmiro", "Braga"), ("C133", "Ludmila", "Lisboa"), ("C144", "Pereira", "Porto"); Insert Fornecedores Values ("F101", "Coimbrox", "Coimbra"), ("F102", "Lisbonix", "Lisboa"), ("F103", "Portulux", "Porto"); Insert Artigos Values ("A01", "Alicate X", "F101", 2.15), ("A07", "Alicate K", "F102", 2.75), ("M10", "Martelo T", "F103", 2.50), ("M14", "Martelo K", "F101", 3.50), ("S33", "Serra RRR", "F102", 5.00); Insert Encoms Values (1, "2011-12-02", "C111", "A01", 10), (2, "2011-12-02", "C122", "A07", 20), (3, "2011-12-03", "C133", "M10", 15), (4, "2011-12-03", "C144", "M14", 10), (5, "2011-12-04", "C133", "S33", 30), (6, "2011-12-04", "C144", "A07", 10); 1. Indique o comando para visualizar os dados introduzidos na tabela clientes. 7 Resumo de comandos Criar tabelas create database vendas; // cria a base de dados use vendas; // activa a base de dados show tables; // lista as tabelas da base de dados activada describe clientes; // apresenta a estrutura da tabela “clientes” create table artigos (codart varchar(5) Primary key, artigo varchar(20), p_unit Float(10,2), codforn varchar(5) References fornecedores(codforn)); Cria a tabela artigos cuja chave primária é codart e ainda inclui o campo artigo, p_unit e chave externa é o codforn da tabel fornecedores ou create table encoms (nenc Int Auto_Increment, data Date, codcli varchar(5) References clientes(codcli), codart varchar(5) References artigos(codart), Quant Integer, Primary key (nenc)); Inserir dados numa tabela Insert into fornecedores (codforn, nome, morada) values ("F101","Empresa XX","R. das Flores, nº 33"), ("F102","Sociedade das Boas", "Av. Francisco 3, 22"); Insere vários dados na tabela fornecedores Ou Insert into encoms(nenc,data,codcli,codart,quant) values (1,"2008-01-01","C10","A01",5), (2,"2008-01-02","C10","A07",12), (3,"2008-04-02","C11","A07",21), (4,"2008-04-02","C22","A03",22); Selecionar (visualizar) dados de uma tabela select * from artigos; Listar os artigos do fornecedor F102: select * from artigos where codforn="F102"; Listar os artigos cujo preço unitário é superior a 2 €: select * from artigos where p_unit>2; Listar as encomendas efectuadas pelo cliente C10: Select * from encoms where codcli="C10"; Listar apenas os códigos e as designações de todos os artigos: select codart, artigo from artigos; Listar o preço dos Alicates: select * from artigos where artigo like "%Alicate%"; Listar os artigos por ordem decrescente de preço: select * from artigos order by p_unit desc; Listar todos os artigos já encomendados: select distinct e.codart,a.artigo from encoms e,artigos a where e.codart=a.codart; Eliminar uma tabela Eliminar tabela: DROP Table nome_da_tabela; Alterar campos de uma tabela Alterar uma tabela: ALTER Table nome_da_tabela <tipo_de_alteração>; Adicionar novo campo: ALTER Table artigos Add Quant Int; Modificar tipo de campo: ALTER Table artigos Modify Quant Float; Eliminar campo: ALTER Table artigos Drop Quant; 8 Apagar um registo numa tabela: DELETE FROM tabela [WHERE condição]; mysql> delete from artigos where codart=“S33”; muito cuidado com este comando Alterar um registo numa tabela: UPDATE tabela SET Nome_Campo1=<Expressão1>, SET Nome_Campo2 =<Expressão2>… [WHERE condição]; Mysql> update artigos > set p_unit=5.50 > where codart=“S33”; Consultas SELECT <lista de campos> FROM <lista de tabelas> [WHERE <critérios de selecção>] Quatro variantes de consultas SQL com comando SELECT: 9 Fotocopiei livro(150-167) 10