Topic: Mysql problema su DELETE užklausa

Naudoju mysql duomenų bazę, turiu tris lenteles 'categories', 'posts', 'cp_link'. 'categories' lentelėje yra kategorijos kurios turi unikalų cat.id.
'posts' lentelėje yra visa reikalinga post'o informacija ir post.id. 'cp_link' turi cat_id post_id laukus ir ši lentelė sujungia categorijas su postais. Lentelė saugo visus postų ir kategorijų unikalius id.
Naudojant:

SELECT * FROM posts INNER JOIN cplink ON posts.id = cplink.post_id WHERE cplink.cat_id =3

Viskas puikiai, gaunami visi postai su 3 kategorija.

Problema: Reikia sugalvoti ištrinimo užklausą kuri pašalina visus 3 kategorijos postus. Naudojant tai meta mysql error'a.

 DELETE * FROM posts INNER JOIN cplink ON posts.id = cplink.post_id WHERE cplink.cat_id =3

Re: Mysql problema su DELETE užklausa

tam naudojami išoriniai raktai(foreign key) ir innodb variklis

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Mysql problema su DELETE užklausa

Problemos sprendimas rastas -

 DELETE posts FROM posts INNER JOIN cplink ON posts.id = cplink.post_id WHERE cplink.cat_id =3
zygis wrote:

tam naudojami išoriniai raktai(foreign key) ir innodb variklis

Pagoogle'inau foreign key tai irgi gali būti alternatyvus problemos sprendimas, galbūt netgi geresnis.

Re: Mysql problema su DELETE užklausa

JustasR wrote:

Problema: Reikia sugalvoti ištrinimo užklausą kuri pašalina visus 3 kategorijos postus. Naudojant tai meta mysql error'a.

 DELETE * FROM posts INNER JOIN cplink ON posts.id = cplink.post_id WHERE cplink.cat_id =3

Neteisinga užklausos sintaksė.

MySQL dokumentacijoje yra labai puikiai aprašyti, kaip trinti duomenis iš kelių, susijusių lentelių, netingėk paskaityt (-;

http://dev.mysql.com/doc/refman/5.0/en/delete.html

Re: Mysql problema su DELETE užklausa

Na foreign key turi ir kitų privalumų, tad pradėjus juos naudoti bus daug naudos.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Mysql problema su DELETE užklausa

zygis wrote:

Na foreign key turi ir kitų privalumų, tad pradėjus juos naudoti bus daug naudos.

Jie taip pat gali sukelti problemu performanco atzvilgiu. Todel viska reiktu naudoti pagal paskirti ir kai to tikrai reikia, o ne bet ka bet kur ir bet kada :)

Re: Mysql problema su DELETE užklausa

Na greitaveika lyginant su MYISAM pasikeičia nelabai žymiai, bent mano turimuose serveriuose, duomenų užimama disko vieta aišku padidėja 2x, tačiau tai kad su tinkamais raktais bus užtikrintas duomenų teisingumas - viską atperka. Negalėsi tarkime sukurti prekės kurios kategorijos id -1 arba 0, jei tokios kategorijos nėra. Visas džiaugsmas apima, kai trini vieną eilutę ir po to lieka tuščia duombazė, t.y. nelieka jokių šiukšlių... Tik va liūdna, kad INNODB nepalaiko FULLTEXT indeksų, nors rimtose sistemose jau senai savo vietą rado specializuoti paieškos varikliai. Tačiau vistiek liūdna.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

8 (edited by zygis 2011-07-26 18:40:39)

Re: Mysql problema su DELETE užklausa

Na va perskaitė šią temą Oracle vyrukai ir suskubo padėti :D http://www.oracle.com/us/corporate/press/439460

InnoDB Full-Text Search: allows users the ability to build full text indices and search for text-based content stored in InnoDB tables, and supports fast and accurate search on document content.
MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer