Pengenalan kepada MariaDB dan MySQL Pencetus

Pengenalan kepada MariaDB dan MySQL Pencetus

Objektif

Memahami dan belajar menggunakan pencetus MariaDB dan MySQL.

Keperluan

  • Tiada keperluan tertentu diperlukan

Konvensyen

  • # - Memerlukan arahan Linux yang diberikan dengan keistimewaan akar sama ada
    secara langsung sebagai pengguna akar atau dengan menggunakan sudo perintah
  • $ - Memandangkan perintah Linux dilaksanakan sebagai pengguna yang tidak berkepala biasa

Pengenalan

MySQL/MariaDB pencetus program tersimpan yang dikaitkan dengan jadual dalam pangkalan data, dan digunakan untuk melakukan beberapa tindakan secara automatik apabila Masukkan, Padam atau Kemas kini Acara dilakukan di atas meja. Pencetus boleh ditetapkan untuk melakukan tindakan sama ada sebelum atau selepas peristiwa ia dikaitkan dengan. Dalam tutorial ini, kita akan melihat cara membuat dan menguruskan pencetus.

Pangkalan data ujian

Demi tutorial ini, kami akan membuat pangkalan data dengan hanya satu dan jadual yang sangat mudah, dengan senarai buku dan genre masing -masing. Mari Teruskan:

MariaDB [(Tiada)]> Buat Book_test Pangkalan Data; Mariadb [(Tiada)]> Buat Book_test Jadual.buku ( -> id smallint (1) unsigned not null auto_increment, -> name varchar (25) not null, -> genre varchar (25) not null, -> primer kekunci (id)); 
Salinan

Kami mencipta jadual remeh kami, sekarang kami harus mengasingkannya dengan beberapa buku. Berikut adalah beberapa kegemaran saya:

MariaDB [(Tiada)]> Gunakan Book_test; MariaDB [book_test]> masukkan ke dalam buku (nama, genre) nilai -> ('1984', 'dystopian'), -> ('The Lord of the Rings', 'Fantasy'), -> ('Pada Genealogi Moral ',' falsafah '); 
Salinan

Itu cukup untuk contoh kami. Berikut adalah perwakilan visual jadual kami:

+----+---------------------------+------------+ | id | Nama | Genre | +----+---------------------------+------------+| 1 | 1984 | Dystopian | | 2 | Tuan Cincin | Fantasy | | 3 | Pada Genealogi Moral | Falsafah | +----+---------------------------+------------+ 
Salinan

Sekarang kami menyediakan jadual ujian kami, kami dapat melihat cara membuat dan mengaitkan a Pencetus kepadanya.

Buat pencetus

Seperti yang dikatakan sebelum ini, dengan mencipta pencetus, kita boleh membiarkan pangkalan data kami secara automatik melakukan tindakan tertentu setiap kali peristiwa yang ditentukan, yang boleh menjadi antara Masukkan, Kemas kini atau Padam, dilakukan di atas meja. Katakanlah, sebagai contoh, untuk alasan yang aneh, kami tidak mahu membenarkan lebih daripada satu buku falsafah dalam koleksi kami, bagaimana kami dapat menguatkuasakan peraturan ini? Walaupun sekatan dapat dilaksanakan pada tahap yang lebih tinggi, kami dapat menetapkannya secara langsung dalam pangkalan data, menggunakan pencetus. Sintaks untuk membuatnya sangat mudah:

Buat Trigger Trigger_name # Berikan nama kepada pencetus sebelum | Selepas # ditetapkan apabila pencetus harus dilaksanakan Insert | Padam | UPDATE # Tetapkan pernyataan yang dikaitkan dengan pencetus pada table_name # Tetapkan jadual yang dikaitkan dengan pencetus untuk setiap baris trigger_stmt # mengisytiharkan badan pencetus 
Salinan

Berikutan sintaks di atas, kita boleh mencipta pencetus kita:

MariaDB [book_test]> Delimiter $ Mariadb [book_test]> Buat Trigger No_more_philosophy Sebelum Masukkan pada Book_test.buku -> untuk setiap baris bermula -> jika baru.genre = "falsafah" dan (pilih kiraan (*) dari book_test.buku di mana genre = "falsafah")> 0 kemudian -> isyarat sqlstate '45000' set message_text = 'hanya satu buku falsafah dibenarkan!'; -> akhir jika; -> end $ Mariadb [book_test]> Delimiter; 
Salinan

Perkara pertama yang telah kami lakukan dalam baris 1, adalah untuk mengarahkan pangkalan data untuk menggunakan $ watak sebagai pembatas pernyataan dan bukannya lalai ;. Ini kerana pembatas titik koma akan digunakan di dalam badan pencetus.

Kami kemudian mencipta pencetus menggunakan Buat pencetus pernyataan dalam baris 2, diikuti oleh nama Kami mahu menyerahkannya: "No_more_philosophy" dalam kes ini. Selepas itu, kami menyatakan bahawa pencetus harus dilaksanakan Sebelumnya The Masukkan penyata. Sejurus selepas itu, kami mengaitkan pencetus dengan jadual "Buku".

Badan pencetus bermula dengan Untuk setiap baris Dalam Baris 3: Kami menggunakan Mulakan Untuk menandakan permulaan pernyataan kompaun kami, yang harus dilaksanakan apabila pencetus dipanggil, dan kami menandakan berakhirnya dengan Akhir, Sama seperti kita lakukan dengan prosedur lain.

Sebaik sahaja pencetus dikaitkan dengan jadual ia akan dijalankan sebelum setiap penyisipan baris dilakukan.

Apabila pencetus dilakukan, dua pseudorecords dihuni: TUA dan BARU: Nilai yang diberikan kepada mereka berbeza -beza bergantung pada jenis acara. Untuk Masukkan pernyataan, sejak baris baru, TUA pseudorecord tidak akan mengandungi nilai, sementara BARU akan mengandungi nilai baris baru yang harus dimasukkan. Sebaliknya akan berlaku untuk a Padam pernyataan: lama akan mengandungi nilai lama, dan baru akan kosong. Akhirnya untuk Kemas kini pernyataan, kedua -duanya akan dihuni, sejak lama akan mengandungi nilai lama baris, sementara baru akan mengandungi yang baru.

Pencetus kami dalam baris 4 akan memeriksa nilai genre lajur untuk baris baru (dikenal pasti oleh BARU): Jika ia ditetapkan untuk "falsafah", ia akan menanyakan buku dengan genre 'falsafah', dan periksa sama ada sekurang -kurangnya satu sudah ada. Sekiranya berlaku, ia akan menimbulkan pengecualian dengan mesej 'Hanya satu buku falsafah yang dibenarkan!'.

Sebagai perkara terakhir dalam baris 8, kami menetapkan pembatas kembali ke ;.

Pencetus kita dalam tindakan

Mari kita periksa pencetus kami dalam tindakan: Kami akan cuba memasukkan buku baru dengan genre "falsafah" dan melihat apa yang berlaku:

Mariadb [book_test]> masukkan ke dalam buku (nama, genre) nilai ('Republik', 'Falsafah'); Ralat 1644 (45000): Hanya satu buku falsafah yang dibenarkan! 
Salinan

Seperti yang anda lihat, pencetus bekerja, dan pelayan membalas dengan mesej ralat yang kami tetapkan ketika kami cuba menambah buku falsafah lain ke koleksi kami.



Mengurus pencetus

Untuk memeriksa pencetus dalam pangkalan data, yang perlu kita lakukan ialah menjalankan Tunjukkan pencetus Perintah:

Mariadb [book_test]> menunjukkan pencetus \ g; ******************************* 1. baris ***************************** pencetus: no_more_philosophy event: sisipkan jadual: pernyataan buku: mulakan jika baru.genre = "falsafah" dan (pilih kiraan (*) dari book_test.buku di mana genre = "falsafah")> 0 maka isyarat sqlstate '45000' set message_text = 'hanya satu buku falsafah dibenarkan!'; Akhir jika; Masa Akhir: Sebelum Dibuat: NULL SQL_MODE: NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITURI 
Salinan

Menjatuhkan pencetus itu sama mudahnya: yang perlu kita lakukan adalah merujuk pencetus dengan namanya. Sebagai contoh, jika kita ingin mengeluarkan pencetus "no_more_philosophy", kita harus menjalankan:

Mariadb [book_test]> drop trigger no_more_philosophy;

Jika kita tahu menanyakan pangkalan data untuk pencetus sedia ada, kita menerima set kosong:

Mariadb [book_test]> menunjukkan pencetus; Set kosong (0.01 saat) 

Kesimpulan

Dalam tutorial ini kita belajar apa yang dicetuskan, dan sintaks yang harus digunakan untuk mencipta satu. Kami juga mencipta jadual remeh, dan mengaitkan pencetus dengannya, melihat bagaimana ia dapat digunakan untuk memastikan peraturan tertentu. Akhirnya kita melihat bagaimana kita dapat memeriksa pencetus yang ada dalam pangkalan data, dan bagaimana kita dapat memadamkannya. Walaupun ini cukup untuk memulakan anda, anda boleh menyemak dokumentasi MariaDB/MySQL rasmi untuk pengetahuan yang lebih mendalam.

Tutorial Linux Berkaitan:

  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Pasang mysql di Ubuntu 20.04 LTS Linux
  • Menguasai Gelung Skrip Bash
  • Cara Memasang MySQL di Almalinux
  • Ubuntu 20.04 WordPress dengan pemasangan Apache
  • Pemasangan WordPress OpenLiteSpeed
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Pemasangan ampache raspberry pi
  • Ubuntu 20.04: WordPress dengan pemasangan nginx