MySQL/MariaDB notikumi

Pārskats

Notikumi ir datubāzes objekti, kas satur SQL vaicājumus, kuri tiek izpildīti vēlāk — vai nu regulāri, vai vienu reizi. Būtībā tas ir kā crontab, kas tiek izpildīts tieši datubāzes serverī. Tas ir noderīgi, piemēram, vecāku datu arhivēšanai vai žurnālu dzēšanai.

Notikumu privilēģija

Pirms jauna notikuma pievienošanas ir jāpārbauda, vai datubāzes lietotājam ir Event privilēģija. Ja Event privilēģija ir piešķirta, phpMyAdmin parādīsies izvēlnes vienums Events. Ja izvēlnes vienuma nav, lietotājam nav Event privilēģiju.

Notikuma pievienošana

Vienkāršākais veids, kā pievienot notikumus, ir izmantot lietotni phpMyAdmin. Cilnē Events izvēlies saiti “Add Event”. Atvērtajā logā tev jāaizpilda:

Iepriekšējā piemērā ir pievienots periodisks notikums (Event type: RECURRING), kas tiek palaists reizi nedēļā. Ja izvēlies tipu ONE TIME, tad vaicājums tiks izpildīts tikai vienu reizi norādītajā Start laikā.

Pēc izvēles vari iestatīt laika intervālu, kurā notikums tiks izpildīts. Lai to izdarītu, aizpildi gan Start, gan End laiku.

Atzīmējot izvēles rūtiņu “On completion preserve”, pēc notikuma uzdevumu izpildes vaicājums paliek saglabāts, lai to nākotnē varētu rediģēt un izmantot atkārtoti.

Ieteikums

Pirms notikuma pievienošanas notestē vaicājumu, lai pārliecinātos, ka tas ir pareizs un izdara tieši to, kas nepieciešams!

Notikuma atspējošana.

Ja vairs nevēlies, lai periodisks vaicājums tiktu izpildīts, vari mainīt tā statusu uz DISABLED vai dzēst visu notikumu.

Dzēšanas vaicājuma izveide

Lai izveidotu pareizu dzēšanas vaicājumu, tev jāanalizē tabulas struktūra, lai saprastu, kā tiek glabāts ievietošanas laiks. Parasti tiek izmantoti UNIX TIMESTAMP vai DATETIME tipa lauki. Iepriekšējais piemērs darbojas rindu dzēšanai ar DATETIME tipu. Ja vēlies dzēst rindas ar UNIX TIMESTAMP tipu, vienkāršākais veids ir reizināt sekundes ar vēlamo dzēšanas dienu skaitu un atņemt to no UNIX timestamp vērtības.

Piemēram, rindas, kas ir 30 dienas vecas vai vecākas, var dzēst šādi:

SELECT * FROM `errors` WHERE `unix_t` < UNIX_TIMESTAMP() - (60 * 60 * 24 * 30);

Pirms DELETE vaicājuma izpildes vienmēr ir ieteicams vispirms izmantot SELECT vaicājumu, lai redzētu, kuras rindas atlasa WHERE nosacījums. Ja tiek atlasītas pareizās rindas, tad aizstāj SELECT ar DELETE.

Papildu informāciju vari atrast oficiālajā MariaDB dokumentācijā.

Updated on 19. Apr 2024
Was this article helpful?

Related Articles