Jump to content

MySQL - Ajuda


Nici

Recommended Posts

Olá a todos. 😛

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... 😁

Link to comment
Share on other 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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other 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... 😁

Link to comment
Share on other 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)

Link to comment
Share on other 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...

Link to comment
Share on other 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?

Link to comment
Share on other 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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other 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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other 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?

Link to comment
Share on other 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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other 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... =)  😛

😛 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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.