Selasa, 23 November 2021

Mysql~7 -TRIGGER

PENGERTIAN TRIGGER



 Dalam DBMS (Database Management System), trigger merupakan kumpulan script yang berhubungan dengan table, view ataupun skema yang dijalankan secara otomatis ketika terdapat event yang dijalankan. Event tersebut meliputi operasi yang biasa dilakukan dalam mengolah database, seperti :

  • DML (Data Manipulation Language) yang meliputi DELETE, INSERT atau UPDATE
  • DDL (Data Definition Language) yang meliputi CREATE, ALTER atau DROP
  • Operasi Database lainnya, seperti SERVERERROR, LOGON, LOGOFF, STARTUP atau SHUTDOWN)

Secara sederhana, perintah untuk membuat trigger adalah sebagai berikut :

CREATE TRIGGER nama_trigger [BEFORE|AFTER]
[INSERT/UPDATE/DELETE]
ON nama_table
FOR EACH ROW
BEGIN
// trigger body
END;

Keterangan dari bentuk perintah umum dalam membuat trigger, yaitu :

  • nama_trigger : nama trigger yang dibuat sesuai dengan karakteristik penamaan dalam MySQL
  • [BEFORE|AFTER] : menunjukkan waktu untuk mengeksekusi trigger secara otomatis, apakah sebelum atau sesudah perubahan pada row data table. Jadi pilihannya adalah AFTER atau BEFORE.
  • [INSERT | UPDATE | DELETE] : digunakan untuk menentukan event yang menyebabkan terjadinya trigger, pilIhan event tersebut terdiri dari INSER, UPDATE dan DELETE.
  • nama_table : menunjukkan table yang akan dilakukan trigger didalamnya
  • trigger_body : menunjukkan statement perintah dalam MySQL yang akan otomatis dijalankan jika event sedang aktif.

Fungsi Trigger

fungsi trigger

Biasanya dalam relasional database, trigger dapat ditemui ketika melakukan perintah eksekusi table. Hal itu menjadi lebih bermanfaat trigger menjaikan penulisan pemrograman yang sederhana dan dapat menjaga informasi agar tetap konsisten dalam database. Selain itu, terdapat beberapa fungsi trigger yang akan dijelaskan dibawah ini.

1. Integritas Data

Dengan adanya trigger, Anda dapat mempertahankan integritas table yang terdapat dalam database. Sebab, Anda dapat melakukan operasi-operasi yang berkaitan dengan pengolahan database, seperti INSERT, UPDATE dan DELETE

2. Mencegah Error

Trigger dalam MySQL dapat mencegah terjadinya error dalam pengoperasian data. Jika terjadi error dalam pendefinisian trigger, error tersebut tidak mengganggu trigger yang sedang berjalan.

3. Membuat Tugas Kerja menjadi Terjadwal

Ketika trigger telah dijalankan, maka Anda dapat menggunakan berbagai bahasa pemrograman tanpa harus bingung bagaimana cara mengaksesnya.

4. Mencegah Proses Transaksi yang Tidak Sah

Dalam praktiknya, biasa trigger digunakan untuk melakukan proses transaksi. Anda dapat menyimpan record transaksi tersebut ke table lain (history) tanpa harus takut jika data tersebut di-update atau delete. Semua perubahan yang terjadi juga dapat diacak berdasarkan waktu pembuatannya.

CONTOH KASUS :

>Membuat table produk , jika dalam gambar dibawah ini sebelum di lakukan rename dengan 
    RENAME table penjualan to produk;

MariaDB [(none)]> use penjualan;
Database changed
MariaDB [penjualan]> create table penjualan(
    -> kd_produk varchar(6) NOT NULL,
    -> nm_produk varchar(100),
    -> harga int(11));
Query OK, 0 rows affected (0.387 sec)


>Membuat table log_harga

    MariaDB [penjualan]> create table log_harga (

    -> log_id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,

    -> kd_produk varchar(8),

    -> harga_lama int(11),

    -> harga_baru int(11),

    -> waktu_perubahan datetime);

Query OK, 0 rows affected (0.168 sec)

>Input data table
    sebelum dilakukan uji coba dalam pembuatan trigger terlebih dahulu dalam melakukan input data guna dapat menampilkan hasil trigger jika dilakukan select 

MariaDB [penjualan]> insert into produk values ('ATK001','PENSIL','12000');
Query OK, 1 row affected (0.124 sec)

MariaDB [penjualan]> INSERT INTO produk values ('ATK002','PENGHAPUS','8000');
Query OK, 1 row affected (0.083 sec)

MariaDB [penjualan]> SELECT * FROM PRODUK;
---------------------------------------------
| kd_produk | nm_produk      | harga   |
---------------------------------------------
| ATK001     | PENSIL           | 12000  |
| ATK002     | PENGHAPUS |  8000   |
---------------------------------------------
2 rows in set (0.041 sec)


>Membuat Trigger
    Delimiter $$
    CREATE trigger before_produk_update
        BEFORE UPDATE ON produk
        FOR EACH ROW
    BEGIN
        INSERT into_harga
        SET kd_produk = OLD.kd_produk,
        harga_baru = NEW.harga,
        harga_lama = OLD.harga,
        waktu_perubahan = NOW();
    END $$

    
hasil contoh jika trigger dengan nama yang kita buat telah tersedia.
jika kita ingin melihat trigger yang telah kita buat dalam PHPmyAdmin berikut gambarannya :


>Uji Coba Trigger 
1. Masukkan beberapa record ke tabel produk, 
    contoh 
    INSERT INTO produk VALUES ('ATK001','PENSIL',12000); 
    INSERT INTO produk VALUES ('ATK002','PENGHAPUS',8000);
XAMPP nya :
MariaDB [penjualan]> insert into produk values ('ATK001','PENSIL','12000');
Query OK, 1 row affected (0.124 sec)

MariaDB [penjualan]> INSERT INTO produk values ('ATK002','PENGHAPUS','8000');
Query OK, 1 row affected (0.083 sec)

MariaDB [penjualan]> SELECT * FROM PRODUK;
---------------------------------------------
| kd_produk | nm_produk      | harga   |
---------------------------------------------
| ATK001     | PENSIL           | 12000  |
| ATK002     | PENGHAPUS |  8000   |
---------------------------------------------
2 rows in set (0.041 sec)


2. Update harga produk, 
    contoh 
    update produk set harga=10000 WHERE kd_produk='ATK001' 
    Membuktikan Trigger Trigger akan berhasil jika di dalam tabel tujuan trigger, yang dalam contoh ini adalah tabel log_harga secara otomatis akan terdapat record baru, cara cek? select * from log_harga;




- Pada tabel log_harga tambahkan field:
    > nm_produk_baru dengan tipe data varchar (100) 
    > nm_produk_lama dengan tipe data varchar (100) 


- Uji cobakan triger yang dibuat dengan update: 
    > update produk set nm_produk=PENGGARIS WHERE kd_produk='ATK001'

penjelasan mengapa eror, karena pada field produk tidak terdapatnya field yang bernama penggaris sedangkan dalam field log_harga hanya di sebutkan kode produk namun tidak disebutkan nama produknya.

sekian penjelasan tentang trigger kali ini. mohon maaf terdapat beberapa gambaran yang tidak serupa dikarenakan terdapat gangguan laptop yang sempet ngeblank pada akhirnya beberapa script lupa untuk di ambil tangkapan gambarnya. terima kasih wassalam.

Rabu, 03 November 2021

UTS Basis Data Semester 3

 Nama : Afni Eka Rahmawati

NIM    : 203100077

Prodi   : Sistem Informasi


Langkah awal, masukkan data berikut ke tabel detil_pesan.


detil_pesan

id_pesan  id_produk  jumlah  harga 

1 MIE001  3 jumlah x dengan harga di ID PRODUK

2 ATK001 4 jumlah x dengan harga di ID PRODUK

3 ATK002 5 jumlah x dengan harga di ID PRODUK

4 ATK002  6 jumlah x dengan harga di ID PRODUK




SOAL!


Petunjuk: setiap soal discreenshootkan syntak dan hasil querynya.


1. Lakukan INNER JOIN dari semua tabel yang bisa dilakukkan inner join! (tidak ada ketentuan minimal, semakin banyak tentu semakin baik jika benar)


  • select pesan.id_pesan,pesan.tgl_pesan,faktur.id_faktur,faktur.tgl_faktur,pelanggan.id_pelanggan,pelanggan.nm_pelanggan,
    • pelanggan.alamat,pelanggan.telepon,pelanggan.email,detail_pesan.id_produk,detail_pesan.jumlah,detail_pesan.harga-> from pesan -> inner join faktur on pesan.id_pesan=faktur.id_pesan -> inner join pelanggan on pesan.id_pelanggan=pelanggan.id_pelanggan -> inner join detail_pesan on pesan.id_pesan=detail_pesan.id_pesan;

  • select produk.id_produk,produk.nm_produk,produk.satuan,produk.harga,produk.stock,detail_pesan.id_pesan,detail_pesan.jumlah,detail_pesan.harga
    • -> from produk
    • -> inner join detail_pesan on produk.id_produk=detail_pesan.id_produk;

2. Lakukan LEFT JOIN untuk menampilkan id_pelanggan, nm_pelanggan, id_pesan, tgl_pesan



MariaDB [sistem_pemesanan]> select pelanggan.id_pelanggan,pelanggan.nm_pelanggan,pesan.id_pesan,pesan.tgl_pesan
    -> from pelanggan
    -> left join pesan on pelanggan.id_pelanggan=pesan.id_pelanggan;
+--------------+--------------+----------+------------+
| id_pelanggan | nm_pelanggan | id_pesan | tgl_pesan  |
+--------------+--------------+----------+------------+
| UAA00        | Abiyasa      |        1 | 2020-10-28 |
| UAA02        | Baladewa     |        2 | 2020-10-29 |
| UAA03        | Cakil        |        3 | 2020-10-30 |
| UAA04        | Dasamuka     |        4 | 2020-10-31 |
| UAA05        | Ekalawya     |        5 | 2020-10-31 |
+--------------+--------------+----------+------------+
5 rows in set (0.076 sec)


3. Tampilkan semua field dari penggabungan 3 tabel yang dimungkinkan karena adanya relasi tabel! (tidak ada ketentuan minimal, semakin banyak tentu semakin baik jika benar)

MariaDB [sistem_pemesanan]> select pelanggan.id_pelanggan,pelanggan.nm_pelanggan,pesan.id_pesan,pesan.tgl_pesan

    -> from pelanggan

    -> left join pesan on pelanggan.id_pelanggan=pesan.id_pelanggan;

+--------------+--------------+----------+------------+

| id_pelanggan | nm_pelanggan | id_pesan | tgl_pesan  |

+--------------+--------------+----------+------------+

| UAA00        | Abiyasa      |        1 | 2020-10-28 |

| UAA02        | Baladewa     |        2 | 2020-10-29 |

| UAA03        | Cakil        |        3 | 2020-10-30 |

| UAA04        | Dasamuka     |        4 | 2020-10-31 |

| UAA05        | Ekalawya     |        5 | 2020-10-31 |

+--------------+--------------+----------+------------+

5 rows in set (0.076 sec)


MariaDB [sistem_pemesanan]> select pelanggan.id_pelanggan,pelanggan.nm_pelanggan,pelanggan.alamat,pelanggan.telepon,pelanggan.email,pesan.id_pesan,pesan.tgl_pesan,detil_pesan.id_produk,detil_pesan.jumlah,detil_pesan.harga

    -> from pelanggan,pesan,detil_pesan

    -> where pelanggan.id_pelanggan=pesan.id_pelanggan and pesan.id_pesan=detil_pesan.id_pesan;

+--------------+--------------+-----------+-------------+------------------------+----------+------------+-----------+--------+-------+

| id_pelanggan | nm_pelanggan | alamat    | telepon     | email                  | id_pesan | tgl_pesan  | id_produk | jumlah | harga |

+--------------+--------------+-----------+-------------+------------------------+----------+------------+-----------+--------+-------+

| UAA00        | Abiyasa      | Ngastino  | 08111222333 | abiyasa@almaata.ac.id  |        1 | 2020-10-28 | MIE00     |      3 |  6000 |

| UAA02        | Baladewa     | Madura    | 08222333444 | baladewa@almaata.ac.id |        2 | 2020-10-29 | ATK01     |      4 | 20000 |

| UAA03        | Cakil        | Goa       | 08333444555 | cakil@almaata.ac.id    |        3 | 2020-10-30 | ATK01     |      5 | 37500 |

| UAA04        | Dasamuka     | Ngalengka | 08444555666 | Dasamuka@almaata.ac.id |        4 | 2020-10-31 | ATK02     |      6 | 45000 |

+--------------+--------------+-----------+-------------+------------------------+----------+------------+-----------+--------+-------+

4 rows in set (0.109 sec)




4. Salinlah syntak berikut "SELECT pesan.id_pesan, pesan.tgl_pesan, SUM(detil_pesan.jumlah) as jumlah FROM pesan, detil_pesan WHERE pesan.id_pesan=detil_pesan.id_pesan GROUP BY id_pesan;" hasilnya apa dan jelaskan!

MariaDB [sistem_pemesanan]> select pesan.id_pesan,pesan.tgl_pesan,SUM(detil_pesan.jumlah) as jumlah from pesan,detil_pesan where pesan.id_pesan=detil_pesan.id_pesan group by id_pesan;

+----------+------------+--------+

| id_pesan | tgl_pesan  | jumlah |

+----------+------------+--------+

|        1 | 2020-10-28 |      3 |

|        2 | 2020-10-29 |      4 |

|        3 | 2020-10-30 |      5 |

|        4 | 2020-10-31 |      6 |

+----------+------------+--------+

4 rows in set (0.151 sec)



5. Salinlah syntak berikut "SELECT id_pelanggan, nm_pelanggan FROM pelanggan WHERE id_pelanggan IN (SELECT id_pelanggan FROM pesan);" hasilnya apa dan jelaskan perhatikan dengan melihat tabel pelanggan.

MariaDB [sistem_pemesanan]> desc pelanggan;

+--------------+-------------+------+-----+---------+-------+

| Field        | Type        | Null | Key | Default | Extra |

+--------------+-------------+------+-----+---------+-------+

| id_pelanggan | varchar(5)  | NO   | PRI | NULL    |       |

| nm_pelanggan | varchar(40) | NO   |     | NULL    |       |

| alamat       | text        | NO   |     | NULL    |       |

| telepon      | varchar(20) | NO   |     | NULL    |       |

| email        | varchar(50) | NO   |     | NULL    |       |

+--------------+-------------+------+-----+---------+-------+

5 rows in set (0.225 sec)


MariaDB [sistem_pemesanan]> select id_pelanggan,nm_pelanggan from pelanggan where id_pelanggan in (select id_pelanggan from pesan);

+--------------+--------------+

| id_pelanggan | nm_pelanggan |

+--------------+--------------+

| UAA00        | Abiyasa      |

| UAA02        | Baladewa     |

| UAA03        | Cakil        |

| UAA04        | Dasamuka     |

| UAA05        | Ekalawya     |

+--------------+--------------+

5 rows in set (0.151 sec)



sekian jawaban uts saya, saya ucapkan terimakasih


Kamis, 21 Oktober 2021

MySql~6 -Data Manupalation Language "JOIN"

DATA MANIPULATION LANGUAGE "JOIN"

Pengertian JOIN dalam DML

Join adalah cara untuk menghubungkan data yang diambil dari tabel-tabel melalui sebuah kolom yang menghubungkan mereka.

    • Pembuatan sistem/aplikasi, jarang sekali tidak ada join antar tabel.
    • pasti akan ada di mana kita mengakses data di tabel A membutuhkan di tabel B.
Join penting karena dengan join bisa mengambil data dari beberapa tabel melalui query. Sedangkan query adalah kemampuan untuk menampilkan data dari database untuk diolah leibih lanjut  yang biasanya diambil dari tabel-tabel dalam database. jika kita melihat jenis pada join tersebut ada beberapa yang akan menjadi pembahasan dan menjadi pokok dalam sebuah penyelesaian kasus. 

INNER - JOIN
Inner join mungkin tipe join yang paling banyak dipakai. Inner join mengembalikan baris-baris dari dua tabel atau lebih yang memenuhi syarat.
contoh sintax dari inner join adalah sebagai berikut:
  • SELECT tablel.*, tabel2.* FROM tabel INNER JOIN tabel ON tabel1.PK = tabel2.FK;
LEFT OUTER - JOIN
Left outer join (sering disingkat left join) akan mengembalikan seluruh baris dari tabel diseblah kiri yang dikenai kondisi ON dan hanya baris dari tabel disebelah kanan yang memenuhi kondisi join.
contoh sintax dari left outer - join adalah sebagai berikut:
  • SELECT tabel1.*, tabel2.* FROM table1 LEFT JOIN tabel2 ON tabel1.PK = tabel2.FK;
RIGHT OUTER - JOIN
Right outer join (sering disingkat right join) akan mengembalikan semua baris dari tabel sebeleah kanan yang dikenai kondisi ON dengan data dari tabel sebelah kiri yang memenuhi kondisi join. Teknik ini merupakan kebalikan dari left outer join.
contoh sintax dari right join adalah sebagai berikut:
  • SELECT tabel1.*, tabel2.* FROM tabel1 RIGHT JOIN tabel2 ON tabel1.PK = tabel2.FK;
FULL OUTER - JOIN
Full outer join (sering disingkat full join) akan mengembalikan seluruh baris dari kedua tabel yang dikenai ON termasuk data-data yang bernilai NULL.
contoh sintax dari full join adalah sebagai berikut:
  • SELECT columns FROM tableA FULL JOIN tableB ON A.columnName = B.columnName;


Menggabungkan 3 Tabel
Untuk menggabungkan tiga tabel atau lebih, pada dasarnya sama dengan penggabungan 2 (dua) tabel menggunakan WHERE.

Contoh where 2 tabel
  • SELECT tabel1.*, tabel2.* FROM tabel1, tabel2 WHERE tabel1.PK = tabel2.FK;
Contoh where 3 tabel
  • SELECT tabel1.*, tabel2.*,  tabel3.* FROM tabel1, tabel2, tabel3 WHERE tabel1.PK = tabel2.FK AND tabel2.PK = tabel3.FK;


Pengelompokkan hasil Query
Hasil query terkadang perlu dikelompokkan berdasarkan kriteria atau kondisi tertentu. Misalnya kita akan menampilkan jumlah barang yang dibeli untuk masing-masing transaksi (pemesanan).

sebagai contoh kasus berikut kasus data base yang dapat kita praktikan adalah sebagai berikut :
1. langkah pertma adalah kita diharuskan melakukan input data jika kita telah membuat data base nya serta tabelnya . ada beberapa yang table yang akan kita lakukan input yaitu :

a.  Input data pelanggan 



b. Input data pesan

c. Input data produk


d. Input data faktur



Jika dari data table yang telah di input kan, maka nantinya akan di gunakan sebagai contoh kasus yaitu dengan mencari JOIN dan  INNER JOIN, OUTER JOIN serta Penggabungan tabel.

1. JOIIN
        a. Penggabungan tabel pelanggan dengan pesan menggunakan Where

        b. Penggabungan tabel pelanggan dengan pesan menggunakan Inner Join


        c. Penggabungan tabel pesan dengan faktur menggunakan Where


        d. Penggabungan tabel pesan dengan faktur menggunakan Inner Join



2. OUTER JOIN
        a. Penggabungan tabel pelanggan dengan pesan menggunakan LEFT JOIN


        b. Penggabungan tabel pelanggan dengan pesan menggunakan RIGHT JOIN


3. Penggabungan 3 Tabel 



mungkin sekian sekilas materi DML JOIN, mohon maaf jika terdapat salah kata dan saya ucapkan terimakasih




 


Kamis, 07 Oktober 2021

MySql~4 - Data Manipulation Language (DML)

 Data Manipulation Language (DML)

• DML atau Data Manipulation Language DML merupakan metode query dasar yang dapat digunakan apabila DDL telah terjadi sehingga fungsi dari query DML ini untuk melakukan pemanipulasian database yang telah dibuat. DML terdiri dari 

  • SELECT
SELECT digunakan untuk melihat data yang ada di tabel. Perintah SELECT ini banyak jenis pengkondisiannya.  Select * from pelanggan maka yang akan tampil nantinya adalah semua data
Select nama, alamat from pelanggan maka yang tampil adalah data yang disebut setelah select dan pengkondisian lainnya akan lebih detail pada praktikum
  • INSERT

INSERT digunakan untuk memasukkan atau input data ke tabel. Ketika menggunakan INSERT kita harus tahu field yang ada di dalam tabel, sehingga data tidak inkonsisten. Default insert adalah 

    • INSERT INTO nama_tabel VALUES (‘nilai1’,’nilai2’,...); • Atau 
    • INSERT INTO nama_tabel(field1,field2,...) VALUES (‘nilai1’,’nilai2’,...); • Atau
    • INSERT INTO nama_tabel SET field1=’nilai1’, field2=’nilai2’,...; 
  • UPDATE
    UPDATE digunakan untuk mengubah data yang sudah ada di dalam tabel. Default update adalah UPDATE nama_tabel SET field1=‘nilaibaru’ [WHERE kondisi]; 
Pada perintah untuk update di atas : 
    • UPDATE merupakan perintah dasar untuk mengubah record tabel. 
    • nama_tabel merupakan nama tabel yang akan diubah recordnya. 
    • Perintah SET diikuti dengan field-field yang akan diubah yang mana diikuti juga dengan perubahan isi dari masing-masing field. Untuk mengubah nilai dari beberapa field sekaligus, gunakan koma (,) untuk memisahkan masing- masing field. 
    • Perintah WHERE diikuti oleh kondisi tertentu yang menentukan record mana yang akan diedit (diubah). Perintah WHERE ini boleh ada boleh juga tidak. Jika WHERE tidak ditambahkan pada perintah update maka semua record dalam tabel bersangkutan akan berubah
  • DELETE.

    DELETE digunakan untuk menghapus data yang sudah ada di dalam tabel. Default delete adalah  DELETE FROM nama_tabel [WHERE kondisi]; 

Pada perintah untuk delete di atas : 

    • DELETE FROM merupakan perintah dasar untuk menghapus suatu record dari tabel. 
    • nama_tabel merupakan nama tabel yang akan dihapus recordnya. 
    • Perintah WHERE diikuti oleh kondisi tertentu yang menentukan record mana yang akan dihapus (didelete). Perintah WHERE ini boleh ada boleh juga tidak. Namun demikian, jika WHERE tidak ditambahkan pada perintah delete maka semua record dalam tabel bersangkutan akan terhapus. Jadi jangan lupa menambahkan WHERE jika kita tidak bermaksud mengosongkan tabel
Contoh Praktikum 4 :
-Untuk mengawali kita hanya perlu membuka XAMPP lalu mengetikan (mysql -u root -p)
lalu menampilkan data base serta menggunakan salah satu database tersebut contohnya (mysql> use Kasir) setelah menggunakannya kita hanya perlu menampilkan tabel nya dengan (mysql> show tables;)


-menampilkan deskripsi pelanggan (mysql> desc pelanggan;)
-Latihan :

  1. 1. Tuliskan atau berikan screenshootnya yang telah Anda lakukan pada insert sesuai materi dan latihan DML!



  1. 2. Apa hasilnya ketika Anda menuliskan syntak SQL berikut "select * from pelanggan;" tunjukkan screenshootnya!

  1. 3.Bagaimana syntak SQL menampilkan record dari field (nama dan pekerjaan) pada tabel pelanggan, buktikan hasil screenshootnya!

  1. 4. Tuliskan "DELETE from pelanggan WHERE id_pelanggan = 1;" apa hasilnya cek terlebih dahulu dengan select dan berikan screenshootnya!

  1. 4. Tuliskan "DELETE from pelanggan WHERE nama = "Fulanah";" apa perbedaan dengan no 4!

  1. 6. Tuliskan "UPDATE Pelanggan SET nama = Aku Cakep WHERE id_pelanggan = 3;" apa hasilnya cek terlebih dahulu dengan select dan berikan screenshootnya!


Sekian penjelasan pada pertemuan ke 4 saya ucapkan Terimakasih







Mysql~9 - Views

Apa Itu View dalam MySQL  View  adalah perintah query yang disimpan pada database dengan suatu nama tertentu, sehingga bisa digunakan setiap...