• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

15 mensagens neste tópico

Olá a todos. :P

Estou a fazer um trabalho em MySQL a nível de software de bases de dados só conhecia antes o Acess.

Eu criei as tabelas no MySql Administrator. Como no Access, depois de criarmos as tabelas com os atributos temos também de fazer as ligações 1-n ou n-n entre as tabelas, acho que no mysql também seria necessário.

Ou não é bem assim? Estou um pouco confusa... :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O MySQL, assim como qualquer base de dados relacional, permite efectuar relações entre tabelas, daí o facto de ser uma BD relacional.

As relações são feitas através de chaves estrangeiras, comumente designadas por FKs (foreign keys).

Devias estudar um pouco de SQL standard, norma 92 ou 99, para compreenderes o que deve ser feito e como se faz.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A teoria de bases de dados relacionais eu sei. Chaves primárias, etc. Já estudei isso há uns anos e agora novamente. Mas o software MySQL é q é novo p mim.  :P

Por isso como no M.Access eu tinha mesmo de ligar as tabelas "à mão" eu perguntei se era necessário fazer o mm no Mysql.

Mas eu vou fazer umas querys p ver se a base de dados está a funcionar bem.

O pior vai ser depois pq vou ter de usar o Lazarus como interface com o utilizador... :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpem lá, mas aproveito e coloco aqui a minha dúvida...

Eu percebo, minimamente de bases de dados relacionais... E como é do senso comum, as 'consultas' do MS Access são as Stored Procedures e Functions do MySQL...

A minha dúvida é a seguinte...

Como é que eu faço para executar uma stored procedure com base nos resultados de outra... Mais explicitamente:

Tenho a SP A e a SP B

Quero fazer isto...

SP A faz "SELECT * FROM tabela1 WHERE tabela1.lingua='pt'; "

SP B faz "SELECT * FROM A WHERE A.ID=3;"

(Onde A representa o resultado/recordset da PRIMEIRA Stored Procedure)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque não fazer directamente "SELECT * FROM tabela1 WHERE tabela1.lingua='pt' AND ID=3;" ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

...

Aquilo foi um exemplo... Logicamente que imagina que eu tenho uma SP A muito mais complexa... e quero que a SP B utilize um dos campos do resultado da A para fazer uma outra consulta (logicamente NÃO semelhante)...

Nao vou tar a reformular o codigo todo, kdo posso muito bem fazer uma Stored Procedure mais simples...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nici, as relações são implicitas no SQL, ten um exemplo bom dado pelo TheDark aqui mesmo acima. Se usares anão ser que cries tabelas do tipo innodb a uncia forma de definires relacionamentos é mesmo implicitamente no SQL.

main infection... o mysql 5 já permite subqueries... agora quanto a procedimentos... em mysql... nem tenho a certeza se se pode definir... podem?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

yeps.. da sim senhor... n sabia.

Leste o manual... ess situaão não parece vir lá discrita, acho que podes perfeitamente chaar um procedimento dentro de outro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpem lá, mas aproveito e coloco aqui a minha dúvida...

Eu percebo, minimamente de bases de dados relacionais... E como é do senso comum, as 'consultas' do MS Access são as Stored Procedures e Functions do MySQL...

A minha dúvida é a seguinte...

Como é que eu faço para executar uma stored procedure com base nos resultados de outra... Mais explicitamente:

Tenho a SP A e a SP B

Quero fazer isto...

SP A faz "SELECT * FROM tabela1 WHERE tabela1.lingua='pt'; "

SP B faz "SELECT * FROM A WHERE A.ID=3;"

(Onde A representa o resultado/recordset da PRIMEIRA Stored Procedure)

Não sei nada quanto às consultas do Access, mas o que tu queres fazer não é possível.

O que tu queres tem de ser feito com uma query sobre tabelas e o que estás a usar são SPs, a forma de funcionar de ambas é totalmente distinto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A teoria de bases de dados relacionais eu sei. Chaves primárias, etc. Já estudei isso há uns anos e agora novamente. Mas o software MySQL é q é novo p mim.  :)

Por isso como no M.Access eu tinha mesmo de ligar as tabelas "à mão" eu perguntei se era necessário fazer o mm no Mysql.

Mas eu vou fazer umas querys p ver se a base de dados está a funcionar bem.

O pior vai ser depois pq vou ter de usar o Lazarus como interface com o utilizador... ;)

Tens de fazer as relações em SQL puro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei nada quanto às consultas do Access, mas o que tu queres fazer não é possível.

O que tu queres tem de ser feito com uma query sobre tabelas e o que estás a usar são SPs, a forma de funcionar de ambas é totalmente distinto.

Vamos la ver o seguinte... Ao executares uma SP do tipo SELECT * FROM TABELA a SP vai retornar um 'recordset' (conjunto de registos) e ISSO é que me interessa para a segunda SP... ou seja, eu kero executar a SP A dentro da SP B para usar os dados retornados da A na pesquisa da B....

GOT IT?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei nada quanto às consultas do Access, mas o que tu queres fazer não é possível.

O que tu queres tem de ser feito com uma query sobre tabelas e o que estás a usar são SPs, a forma de funcionar de ambas é totalmente distinto.

Vamos la ver o seguinte... Ao executares uma SP do tipo SELECT * FROM TABELA a SP vai retornar um 'recordset' (conjunto de registos) e ISSO é que me interessa para a segunda SP... ou seja, eu kero executar a SP A dentro da SP B para usar os dados retornados da A na pesquisa da B....

GOT IT?

Sim eu percebi, tu é que não percebeste o que te disse: tal não é possível.

Passo a explicar o porquê: quando executas um SP o que o SGBD faz é, grosso modo, uma execução de uma função que, no teu caso específico, retorna um record set. Mas o que o SGBD tem de fazer para o que tu pretendes é o produto carteziano entre os dados das tabelas, e tal só pode ser efectuado ao nível das tabelas com SQL.

Resumindo: os SGBDs não fazem produtos cartezianos entre recordsets apenas entre tabelas.

Podes pensar em passar o recordset como argumento para dentro do SP B, mas isso, excepto em situações muito mas mesmo muito particulares e muito mas mesmo muito bem explicadas, é uma péssima (e digo péssima para ser muito, mas mesmo muito simpático) abordagem pois trabalhar o cursor dentro do SP para usar os seus valores dentro de uma query é totalmente ineficiente e faz transparecer que há algo de muito mal na estratégia usada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem... descobri qualquer coisa... e de facto tens razão não é possível fazer tal coisa nas stored procedures...

Mas é possível usar VIEWS dentro de Stored Procedures, bem como em queries e mesmo até dentro de views...

Vejam AQUI para mais info... =)  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem... descobri qualquer coisa... e de facto tens razão não é possível fazer tal coisa nas stored procedures...

Que tinha razão já eu sabia, mas não é disso que se trata...

Mas é possível usar VIEWS dentro de Stored Procedures, bem como em queries e mesmo até dentro de views...

Vejam AQUI para mais info... =)  :P

:P Estou a ver que estás agora a descobrir o mundo das BDs.

As views são construídas à custa de queries e depois podem ser usadas como se fossem tabelas para pesquisa, ou seja, podes fazer um select sobre uma view, ou, "melhor ainda", podes fazer qualquer combinação de joins entre views e tabelas.

Quanto às SPs, elas grosso modo elas podem ser vistas como funções que retornam, ou não, um tipo de dados. Dentro delas podes fazer milhentas coisas, como por exemplo atribuir o resultado de select a um cursor para ser manipulado, invocar outras SPs, executar qualquer comando SQL standard, controlo transaccional e muito mais. As SPs são uma porta aberta para um conjunto de operações sobre e na BD que de outra forma não seria possível efectuar, pelo menos de forma eficiente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora