Anda di halaman 1dari 29

Export dan Import data

======================

Format export :
mysqldump -u namauser namadatabase > lokasi file

Format import :
mysql -u namauser namadatabase < lokasi file

Jenis data yang diimport :


1. .sql
2. .txt
3. .csv
4. .xml

A. Import data dengan LOAD DATA INFILE


--> mengimport file text external kedalam sebuah tabel
FORMAT :
LOAD DATA INFILE 'nama_file' INTO TABLE namatabel

Contoh :
1. Buatlah database dengan nama latihan
2. Buatlah tabel provinsi, dengan struktur :
(nama_prov VARCHAR(50),
kode_iso CHAR(2),
ibukota VARCHAR(50),
populasi INT,
luas DEC(8,2),
apbd DEC(8,2));

3. Buatlah sebuah file di notepad/notepad++


4. Lakukan import data dari file txt ke tabel provinsi
LOAD DATA INFILE 'nama_provinsi_a.txt' INTO TABLE provinsi;

5. Lakukan import data dari file txt yang ada di folder lain
LOAD DATA INFILE 'E://nama_provinsi_b.txt' INTO TABLE provinsi;
Jadi kalau kita ingin load data dari folder lain kita harus sebutkan dimana lokasi
file tersebut

B. LOAD DATA INFILE.. FIELDS TERMINATED BY

LOAD DATA INFILE 'nama_file.txt'


INTO TABLE nama_tabel
FIELDS TERMINATED BY ',';

LOAD DATA INFILE 'nama_provinsi_c.txt'


INTO TABLE provinsi
FIELDS TERMINATED BY ',';

C. LOAD DATA INFILE... LINES TERMINATED BY


--> Import file dengan data yang lebuh dari 1 baris

LOAD DATA INFILE 'nama_file.txt'


INTO TABLE nama_tabel
FIELDS TERMINATED BY ','
LINES TERMINATED BY '|';

LOAD DATA INFILE 'nama_provinsi_d.txt'


INTO TABLE provinsi
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '|';

LOAD DATA INFILE 'nama_provinsi_e.txt'


INTO TABLE provinsi
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';

DELETE FIELD :
delete from provinsi where ibukota is NULL ;

D. LOAD DATA INFILE..FIELDS ENCLOSED


--> digunakan jika data diapit oleh karakter tertentu

LOAD DATA INFILE 'nama_provinsi_f.txt'


INTO TABLE provinsi
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';

E. LOAD DATA INFILE... IGNORE LINES


--> Mengabaikan baris
LOAD DATA INFILE 'nama_provinsi_g.txt'
INTO TABLE provinsi
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 2 LINES;

F. LOAD DATA INFILE... LINES STARTING BY


--> Digunakan mengabaikan beberapa karakter dari beberapa baris

LOAD DATA INFILE 'nama_provinsi_h.txt'


INTO TABLE provinsi
FIELDS TERMINATED BY ','
LINES STARTING BY '##'
TERMINATED BY '\r\n'
IGNORE 2 LINES;

G. LOAD DATA INFILE... (col1,col2,col3......)

LOAD DATA INFILE 'nama_provinsi_i.txt'


INTO TABLE provinsi
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 2 LINES(nama_prov,kode_iso,ibukota,apbd);

Latihan :

LOAD DATA INFILE 'E://nama_provinsi_j.txt'


INTO TABLE provinsi
FIELDS TERMINATED BY '-' ENCLOSED BY '"'
LINES STARTING BY '**'
TERMINATED BY '\r\n'
IGNORE 2 LINES (nama_prov,kode_iso,populasi,apbd);

===================================================================================
=========================================================
15 Maret 2023

===================================================================================
==============================================================

1. LOAD DATA tabel_provinsi.csv


LOAD DATA INFILE 'tabel_provinsi_final.csv'
INTO TABLE provinsi
FIELDS TERMINATED BY ';'
IGNORE 1 LINES;

EXPORT DATA

===================================================================================
========================================================
EXPORT DENGAN DATA DENGAN SELECT... INTO OUTFILE
-->Membuat atau menggenerate file teks yang berasal dari tabel MYSQL.

Format dasar :
SELECT nama_kolom1,nama_kolom2,...
INTO OUTFILE 'lokasi_file',[setting...]
FROM nama_tabel;

Keterangan :
- Bisa dipilih kolom mana yang akan diekspor
- Perintah tambahan pada LOAD DATA INFILE juga bisa ditambahkan pada [setting..]

Contoh :

1. Lakukan export data tabel provinsi ke dalam file hasil_provinsi _a.txt


berlokasi di drive d (atau drive lain)

SELECT * INTO OUTFILE 'F:\\hasil_provinsi_a.txt'


FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
FROM provinsi;

Keterangan :

- Query SELECT*INTO OUTFILE akan memilih seluruh kolom di dalam tabel


provinsi. File hasil_provinsi_a.txt nantinya akan berada di folder sesuai dengan
alamat file yang ditulis

- Di baris kedua, terdapat peintah FIELDS TERMINATED BY ',' optionally ENCLOSED BY


'"'
LINES TERMINATED BY '\r\n'. Artinya, kolom tabel akan dipisah dengan
tanda koma, kemudian karakter \r\n dipakai sebagai pemisah antar baris.

- Khusus untuk perintah OPTIONALLY ENCLOSED NY '"', artinya hasil teks untuk data
dengan tipe
String akan diapit dengan tanda kutip dua,sedangkan tipe data number tidak.
Perilaku seperti di dapat dengan tambahan perintah OPTIONALLY.
2. Lakukan export data tabel provinsi kedalam file hasil_provinsi_b.txt
yang berlokasi di drive (atau drive lain)

SELECT nama_prov,kode_iso,populasi
INTO OUTFILE 'F:\\hasil_provinsi_b.txt'
FIELDS TERMINATED BY '##'
LINES TERMINATED BY '\t'
FROM provinsi;

3. Lakukan export data tabel provinsi ke dalam file hasil_provinsi_c.csv yang


berlokasi di drive d (atau drive lain)

SELECT*INTO OUTFILE 'F:\\hasil_provinsi_c.csv'


FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
FROM provinsi;

INDEX
===================================================================================
=============

--> Berguna untuk mempercepat proses pencarian data. Tidak berpengaruh terhadap
tampilan tabel.
--> Biasanya digunakan pada tabel skala besar (terdiri dari 10.000 - 1.000.0000)
baris data.

Cara membuat inndex :


1. CREATE INDEX
2. ALTER TABEL
3. CREATE TABEL (saat membuat tabel)

Buat database baru dbcoba


Buat Tabel mahasiswa dengan struktur :

CREATE TABLE mahasiswa


(nama varchar (50),
asal varchar (50),
kel ENUM('L','P'),
tinggi TINYINT UNSIGNED,
jurusan varchar (20),
nilai_uan DEC(5,2));

IMPORT DATA MAHSISWA :

LOAD DATA INFILE 'datamahasiswa.txt'


INTO TABLE mahasiswa
FIELDS TERMINATED BY ',' ENCLOSED BY '"';

Cara membuat index :


A. CREATE INDEX
Format :
CREATE [jenis_index] ON nama_tabel
(nama_kolom);

Contoh :
Buatlah index pada kolom nama di tabel mahasiswa
--> CREATE INDEX nama ON mahasiswa(nama);

Menampilkan indeks :
SHOW INDEX FROM nama_tabel \G;

B. ALTER TABLE
Format :
ALTER TABLE nama_tabel ADD INDEX nama_index (kolom_index);
--> Penulisan nama_index optional

Contoh :
1. ALTER TABLE mahasiswa ADD INDEX(jurusan);
2. ALTER TABLE mahasiswa ADD INDEX idx_tinggi(tinggi);

C. CREATE TABEL (saat melakukan pembuatan tabel)


Format :
CREATE TABEL namatabel (
......................
.......................
INDEX nama_index(kolom_index)
);

Latihan :
Buatlah tabel mahasiswa2(kolom seperti tabel mahasiswa), tambahkan index di kolom
nama (nama index : idx_nama)

CREATE TABLE mahasiswa2


(nama varchar (50),
asal varchar (50),
kel ENUM('L','P'),
tinggi TINYINT UNSIGNED,
jurusan varchar (20),
nilai_uan DEC(5,2),
INDEX idx_nama(nama));

===================================================================================
================================================================================

29 Maret 2023

===================================================================================
===================================================================================
==

LATIHAN :
1. Buatlah tabel bintang film seperti dibawah ini :
CREATE TABLE bintang_film(
id_artis varchar(7),
nama_artis varchar(50),
hobi varchar(50),
alamat varchar(50),
no_telepon varchar(15),
agency varchar(50));

Kemudian lakukan load data infile data berikut ini :

@nomor artis;namaartis;agency
@++++++++++++++++++++++++++++
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@"RZ_RH03";"Reza Rahadian";"MNC Television"
@"SH_DR01";"Sheila Dara";"Bintang Artis"

LOAD DATA INFILE 'bintang_film_a.txt'


INTO TABLE bintang_film
FIELDS TERMINATED BY ';' ENCLOSED BY '"'
LINES STARTING BY '@'
TERMINATED BY '\r\n'
IGNORE 3 LINES (id_artis,nama_artis,agency);

2. Lakukan Export dta pada database classicmodels kedalam file data_product.csv


yang berlokasi di drive yang anda pilih untuk data productname, productline,
buyprice
dengan productline berjenis classic cars dan diurutkan berdasarkan buyprice
tertinggi

Query Table :

select productname,productline,buyprice
from products
where productline='classic cars'
order by buyprice desc;

Query Export :

SELECT productname,productline,buyprice INTO OUTFILE 'F:\\data_product.csv'


FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
From products
where productline='classic cars'
order by buyprice desc;

INDEX
=====
Keuntungan pemakaian index :
Mempercepat peoses pencarian data. Terutama pada query yang kompleks

Kekurangan Index :
Memperlama proses insert, update dan delete data
Membutuhkan ruang penyimpanan yang lebih besar

3 Cara pembuatan index :


1. CREATE TABLE
2. ALTER TABLE
3. CREATE TABLE

Cara melihat index didalam sebuah tabel

SHOW INDEX FROM namatabel;

Pembuatan index dengan CREATE INDEX :


=====================================

CREATE [jenis_index] INDEX nama_index ON nama_tabel (nama_kolom);

Contoh :
Buatlah index namaproduk untuk productname yang ada di tabel
products pada database classicmodels

CREATE INDEX namaproduk ON products (productname);

SHOW INDEX FROM products \G;

Pembuatan index dengan ALTER TABLE :


================================================
ALTER TABLE nama_tabel ADD INDEX nama_index (kolom index)

Contoh :
Ubahlah tabel products dengan menambahkan index untuk productvendor.

ALTER TABLE products ADD INDEX (productvendor);


--> MySql akan memberikan nama index sesuai dengan nama field yang dijadikan index

ALTER TABLE products ADD INDEX indexvendor(productvendor);


--> Nama index bisa dirubah

Pembuatan index dengan CREATE TABLE :


=====================================

CREATE TABLE namatabel


(.........................,
INDEX nama_index(kolom_index)

Contoh :
CREATE TABLE t_mahasiswa
(No_bp varchar(12) not null primary key,
nama varchar(50),
tgl_lahir date,
index indexnama(nama));

Cara menghapus INDEX :


=======================

DROP INDEX nama_index ON namatabel;

Contoh :
Hapuslah index vendorproduk dari tabel products.

DROP INDEX indexvendor ON products;


Jenis-jenis INDEX :
1. REGULER INDEX --> index biasa(regular), memperbolehkan adanya
duplikasi data, sebaiknya index jenis ini diberikan kepada kolom yang
memperbolehkan data yang sama.

2. UNIQUE INDEX --> index yang membatasi duplikasi data. Ketika menggunakan index
UNIQUE pastikan kolom tidak memiliki nilai yang sama.

3. PRIMARY KEY INDEX --> index yang juga berfungsi sebagai PK dari sebuah tabel.

4. FULLTEXT INDEX

5. SPATIAL INDEX --> digunakan untuk nilai spasial

INDEX 1 - 5 diatas menggunakan algoritma BTREE

6. HASH INDEX --> index yang menggunakan algoritma HASH khusus untuk tabel dengan
tipe MEMORY.

CONTOH :
CREATE INDEX nama_index ON namatabel (kolom_index);
CREATE UNIQUE INDEX nama_index ON namatabel (kolom_index);
CREATE FULLTEXT INDEX nama_index ON namatabel (kolom_index);
CREATE SPATIAL INDEX nama_index ON namatabel (kolom_index);
===================================================================================
=================
===================================================================================
=================

PREFIX INDEX :
Cocok untuk kolom dengan karakter yang lebih panjang. Misalnya ada
kolom dengan tipe varchar(200). Tidak efisien menjadikan index untuk semua
nilai kolom. Disiasati dengan menjadikan index untuk beberapa karakter di awal saja
tetapi dengan syarat beberapa karakter tersebut sudah terjamin keunikannya.

Contoh : Lihat nilai customername pada tabels customers. Cukup jadikan 3 karakter
di awal customername untuk menjadi index

CREATE INDEX namacustomer ON customers (customername(3));

MULTI COLUMN INDEX


====================
--> untuk query yang membutuhkan pencarian kedua kolom secara bersamaan.

SELECT*FROM orders
WHERE orderdate = ......... AND status = ...........;

Contoh :
Buatlah kolom orderdate dan status menjadi satu index secara bersamaan.

CREATE INDEX orderdate_dan_status ON orders (orderdate,status);

===================================================================================
========================================================================
05 April 2023

===================================================================================
========================================================================

FULL TEXT INDEX


===============
Hanya cocok untuk kolom dengan tipe CHAR, VARCHAR dan TEXT

Gunanya : membuat index yang berasal dari suku kata yang ada pada sebuah kolom
dan suku kata tersebut sangat sering digunakan.

Contoh : Pada tabel orders, terdapat kolom comments yang sering diakses.
Untuk itu kolom tersebut dapat dijadikan index dengan menerapkan FULLTEXT INDEX.
Tetapi kolom comments
memiliki karakter yang terlalu panjang. Maka dipilih satu kata yaitu 'Customer'
untuk dijadikan Index.

ALTER TABLE orders ADD FULLTEXT comments(comments);

Cara menguji :

SELECT kolom from namatabel


WHERE MATCH(namakolom) AGAINST('karakter');

SELECT ordernumber, comments FROM orders


WHERE MATCH(comments) AGAINST('Customer');

===================================================================================
=============================================================================

VIEW, STORED PROCEDURE, TRIGGER


==> objek yang ada didalam MySQL

VIEW
====

--> Tabel virtual atau tabel logis yang berasal dari query SELECT,
View bisa digunakan untuk membuat 'table baru' yang isinya diambil dari tabel yang
sudah ada saat ini.

Contoh :
Tampilkan productname yang sudah terjual oleh employee yang bernama Leslie
Thompson,
employeename (gabungan firstname dan lastname), customername, shippeddate untuk
shippeddate yang terjadi di
tahun 2003

Query :
SELECT productname, CONCAT(Firstname, ' ', lastname) as FullName, customername,
shippeddate
FROM employees JOIN customers ON employees.employeenumber =
customers.salesrepemployeenumber
JOIN orders ON customers.customernumber = orders.customernumber
JOIN orderdetails ON orders.ordernumber = orderdetails.ordernumber
JOIN products ON orderdetails.productcode = products.productcode
WHERE CONCAT(firstname, ' ', lastname) = 'Leslie Thompson' AND shippeddate LIKE
'%2003%';

Keunggulan View :
1. Menyederhanakan query yang kompleks
2. Menyembunyikan struktur asli tabel
3. Membuat kolom komputasi
4. Menjaga backward compatibality

Cara Membuat view


=================
CREATE VIEW [namadatabase].[namaview]
AS [SELECT statement]

Contoh : buatlah view dataleslie untuk query diatas.

CREATE VIEW classicmodels.dataleslie


AS SELECT productname, CONCAT(Firstname, ' ', lastname)employeename, customername,
shippeddate
FROM employees JOIN customers ON employees.employeenumber =
customers.salesrepemployeenumber
JOIN orders ON customers.customernumber = orders.customernumber
JOIN orderdetails ON orders.ordernumber = orderdetails.ordernumber
JOIN products ON orderdetails.productcode = products.productcode
WHERE CONCAT(firstname, ' ', lastname) = 'Leslie Thompson' AND shippeddate LIKE
'%2003%';

LIHAT TABLE :
SHOW TABLES
SHOW FULL TABLES --> Lihat keterangan tabel

Untuk melihat struktur view :


============================
SHOW CREATE VIEW namaview;

menghapus view :
================
DROP view namaview

===================================================================================
==============================================================================

12 April 2023

===================================================================================
==============================================================================

Update data melalui view


========================
1. Buatlah view officesbaru yang menampilkan informasi officecode dan city.
2. Lakukan insert data baru ke view officesbaru yaitu officecode = 8 dan city =
Indonesia.
3. Lakukan update data dengan mengubah city Indonesia menjadi Padang dan Country
menjadi Indonesia
untuk officecode 8 di tabel offices.
4. Lakukan update data dengan mengubah data di view officebaru. terserah data apa
saja
5. Lihat perubahn data dan lakukan analisis

Buatlah view officesbaru2 yang menyimpan informasi officecode, city dan country
untuk office yang berada di USA.
Lakukan insert data baru ke officesbaru2 : officecode = 9, city ='Bukittinggi' dan
country = Indonesia

create view officesbaru2 as select officecode,city,country


from offices
where country ='USA';

insert into officesbaru2 value(9,'Bukittinggi','Indonesia');

WITH CHECHK OPTION


=================
Digunakan untuk menjaga konsistensi data yang diinsert melalui view dan digunakan
untuk view yang
menggunakan kondisi setelah WHERE

Contoh :
1. Buatlah view officesbaru3 yang menyimpan informasi officecode, city dan country
untuk office yang berada di USA.

create view officesbaru3 as select officecode,city,country


from offices
where country ='USA'
WITH CHECK OPTION;

2. Insert data baru ke officebaru3 officecode = 10, city ='Bandung' dan country
='Indonesia'.

insert into officesbaru3 value(10,'Bandung','Indonesia');

Kasus :
1. Buatlah view dengan nama emoffices yang terdiri dari employeenumber, firstname,
lastname,
officecode, city dan country employee ditempatkan

create view emoffices as select employeenumber, firstname, lastname,


officecode,city,country
FROM employees JOIN offices USING (officecode)
WITH CHECK OPTION;

Pertanyaan :

Apakah bisa melakukan insert data terhadap view diatas ? lakukan analisis dan
berikan alasan Anda
Tidak berhasil, karena tidak bisa insert ke dalam view hasil join dari tabel

Update data dari view tidak bisa ketika jika query terbuat dari :
1. Aggregate
2. Distinct
3. Group By
4. Having
5. Union dan Union All
6. Outer Join
7. SubQuery

===================================================================================
==========================================================

26 April 2023
Tugas Manajemen User

===================================================================================
==========================================================

Tugas 1 :
1. CREATE USER 'user1'@'localhost' IDENTIFIED BY 'tugas1';
GRANT ALL PRIVILEGES ON classicmodels.* TO 'user1'@'localhost';
FLUSH PRIVILEGES;

2. CREATE USER 'user2'@'localhost' IDENTIFIED BY 'tugas1';


GRANT SELECT ON classicmodels.products TO 'user2'@'localhost';
FLUSH PRIVILEGES;

3. CREATE USER 'user3'@'localhost' IDENTIFIED BY 'tugas1';


GRANT SELECT, UPDATE, INSERT ON classicmodels.customers TO 'user3'@'localhost';
GRANT SELECT, UPDATE, INSERT ON classicmodels.products TO 'user3'@'localhost';
FLUSH PRIVILEGES;

Tugas 2 :
1. CREATE USER 'Mary'@'localhost' IDENTIFIED BY 'Mary123';
CREATE USER 'Dave'@'localhost' IDENTIFIED BY 'Dave123';
FLUSH PRIVILEGES;

2. GRANT SELECT, UPDATE ON classicmodels.products TO 'Dave'@'localhost';


FLUSH PRIVILEGES;

3.GRANT SELECT, INSERT, UPDATE, DELETE ON classicmodels.employees TO


'Mary'@'localhost';
FLUSH PRIVILEGES;

4. GRANT SELECT(status, comments, customernumber) ON classicmodels.orders TO


'Dave'@'localhost';
FLUSH PRIVILEGES;

5. CREATE TABLE mahasiswa (


nobp VARCHAR(50),
nama VARCHAR(50),
alamat VARCHAR(100),
tgl_lahir DATE);

7. GRANT SELECT(city, phone, state), UPDATE(city, phone, state)


ON classicmodels.offices TO 'Mary'@'localhost';
FLUSH PRIVILEGES;

8. REVOKE ALL PRIVILEGES ON classicmodels.products FROM 'Dave'@'localhost';


REVOKE ALL PRIVILEGES ON classicmodels.employees FROM 'Mary'@'localhost';
FLUSH PRIVILEGES;
===================================================================================
===================================================================================
===============

03 Mei 2023

===================================================================================
===================================================================================
===============

Pemberian Hak Akses :


=====================

GRANT Terbagi 3 :
1. GRANT ALL --> Mengizinkan user untuk menjalankan semua Query

GRANT jenis_hak_akses(kolom)
ON [nama_database.nama_tabel]
TO 'namauser@host' [identified by 'password']
[WITH GRANT OPTION]

Jenis" hak akses :


1. Hak akses global
GRANT ALL PRIVILEGES ON *.* TO 'nama_user'@'localhost';
WITH GRANT OPTION;
==> Memberikan semua hak akses termasuk memberikan grant kepada user lain.

Cabut hak akses :

REVOKE jenis_hak_akses(kolom) ON [namadatabase.namatabel]


FROM 'namauser@host'
[IDENTIFIED BY 'password'];

2. Hak akses ke database tertentu


SELECT, UPDATE, DELETE

Contoh : berikan hak akses database classicmodels pada user


1. Berikan hak akses database classicmodels pada tabel customers pada user alfa

CREATE USER alfa@localhost;


GRANT ALL ON classicmodels.customers TO alfa@localhost;

2. berikan hak akses SELECT pada tabel offices di classicmodels kepada user alfa

GRANT SELECT ON classicmodels.offices TO alfa@localhost;

3. user alfa naik pangkat, sehingga memperoleh izin untuk mengubah data
yang ada pada tabel offices. Berikan hak akses baru pada user alfa!.

GRANT UPDATE, DELETE ON classicmodels.offices TO alfa@localhost;

4. User alfa kemudian diberikan PRIVILEGES untuk mengakses (SELECT) tabel


employees tapi hanya untuk kolom employeenumber, lastname dan firstname dan UPDATE
lastname. Berikan
hak akses ini untuk user alfa dalam satu query
GRANT SELECT (employeenumber,lastname, firstname), UPDATE(lastname) ON
classicmodels.employees TO alfa;

ROLES
==> Object pada MySQL yang berisi kumpulan hak akses dan diberi nama.

Langkah - Langkah :
1. Buat Role baru
2. Berikan hak akses pada role tersebut
3. Berikan role kepada user

Contoh :
Pada database classicmodels dibuat 3 macam role untuk melekukan akses ke database.
1. crm_dev ==> User developer
2. crm_read ==> User yang hanya bisa membaca (read)
3. crm_write ==> User yang dapat menulis (write)

Untuk membuat role baru :


CREATE ROLE namarole;
CREATE ROLE crm_dev, crm_read, crm_write;

Berikan hak akses kepada masing" ROLE :

GRANT ALL ON classicmodels.* TO crm_dev;


GRANT SELECT ON classicmodels.* TO crm_read;
GRANT INSERT, UPDATE, DELETE ON classicmodels.* TO crm_write;

Memberikan ROLE kepada USER :

Misalkan diperlukan :
Satu user sebagai developer
CREATE USER user_dev1@localhost identified by '12345';
GRANT crm_dev TO user_dev1;

Satu user memiliki hak akses select


CREATE USER user_read1@localhost identified by '12345';

Dua user memiliki hak akses select, insert, update, delete


CREATE USER user_write1@localhost identified by '12345';
CREATE USER user_write2@localhost identified by '12345';

GRANT nama_role TO namauser@lokasihost;

GRANT crm_dev TO user_dev1@localhost;


GRANT crm_read TO user_read1@localhost;
GRANT crm_read TO user_write1@localhost, user_write2@localhost;
GRANT crm_write TO user_write1@localhost, user_write2@localhost;

GRANT role1laporan4 TO laporan4_2@localhost;

Memakai Role :
SET ROLE crm_dev; --> User dev1
===================================================================================
==============================================================================

24 Mei 2023

===================================================================================
===============================================================================

TRANSACTION
===========

--> Salah satu fitur penting yang pada MySQL yang dapat mengeksekusi beberapa
perintah (Query)
sebagai satu kesatuan atau secara bersamaan.

Tanpa transaksi :

Queri 1; --> langsung dieksekusi

Dengan transaksi :

BEGIN
Query 1;
Query 2;
........

Query n;
COMMIT / ROLLBACK;

COMMIT --> Perintah eksekusi


ROLLBACK --> Perintah dibatalkan

- Fungsi lain mencegah user lain dalam mengubah data yang belum selesai di proses

Prinsip Kerja Transaction


=========================

AUTOCOMMIT MODE --> Mode untuk mengatur apakah perintah query langsung diproses
atau tidak.
Secara default perintah ini aktif sehingga setiap perintah query yang diketik pada
MySQL akan langsung
dieksekusi/diproses saat itu juga.

Transaction akan menonaktifkan autocommit mode ini sementara waktu. Caranya :

BEGIN; atau START TRANSACTION;


SET AUTOCOMMIT = 0; atau SET AUTOCOMMIT = OFF;

Untuk mengaktifkan kembali autocommit mode


SET AUTOCOMMIT = 1; atau SET AUTOCOMMIT = ON;

Cara menjalankan transaksi :

START TRANSACTION / BEGIN;


SET AUTOCOMMIT = 0;
Query1...
Query2...

ROLLBACK/COMMIT;

Beberapa perintah yang tidak dapat di rollback :


1. Alter table
2. Create index/table/database
3. Drop index/table/database
4. Lock/Unlock table
5. Start transaction

Kasus :
Buatlah sebuah table tabungan disebuah database db_bank, terdiri dari field :

CREATE TABLE tabungan(


no INT PRIMARY KEY AUTO_INCREMENT,
nama_nasabah VARCHAR(25),
proses ENUM('D','K'),
jumlah INT DEFAULT 0);

INSERT INTO tabungan(no,nama_nasabah,proses,tabungan)


VALUES
(1,'Rudi Permana','K',100000),
(2,'Sandri Fatmala','D','50000);

Tambahkan data berikut ke tabel tabungan :


no nama_nasabah proses jumlah
1 Rudi Permana K 100000
2 Sandri Fatmala D 50000

Buatlah user baru dengan nama Nobita dengan password nobita123

CREATE USER 'Nobita2'@'localhost' IDENTIFIED BY 'nobita123';

Berikan hak akses penuh pada nobita terhadap database db_bank

GRANT ALL PRIVILEGES ON db_bank.* TO Nobita@localhost;


FLUSH PRIVILEGES;

Buatlah transaction berikut untuk user nobita :


- Lakukan insert data yang baru pada tabel tabungan yaitu data Susi Susanti, proses

debit jumlah 125000

INSERT INTO tabungan (nama_nasabah,jumlah) VALUES ('Susi Susanti',125000);

- Selanjutnya lakukan update terhadap data tersebut. Set jumlah menjadi 150000 pada
nama Rudi Permana

UPDATE tabungan
SET jumlah = 150000
WHERE nama_nasabah = 'Rudi Permana';

Cek perubahan yang terjadi pada tabel tabungan

Batalkan transaksi
ROLLBACK;

Tampilkan lagi tabel tabungan setelah pembatalan transaksi

SAVEPOINT
=========
--> Fitur penanda dalam transaction, biasanya digunakan pada saat ROLLBACK untuk
membatalkan perintah (Query) di SAVEPOINT tertentu

START TRANSACTION / BEGIN;


SET AUTOCOMMIT = 0;

query1...;

SAVEPOINT nama_savepoint;

Query2....;

SAVEPOINT nama_savepoint;

ROLLBACK TO SAVEPOINT nama_savepoint;

Cara Menghapus SAVEPOINT :


RELEASE SAVEPOINT nama_savepoint;

Latihan :
Buatlah transaction berikut user Nobita :
- SAVEPOINT 1 : Lakukan insert data yang baru pada tabel tabungan yaitu data
Jessica Mila,
proses kredit sejumlah 150000

INSERT INTO tabungan(nama_nasabah,jumlah) VALUES ('Jessica Mila',150000);


SAVEPOINT savepoint1;

- SAVEPOINT 2 :
* Lakukan insert data yang baru pada tabel tabungan yaitu data Enzy Storia, Proses
debit sejumlah
200000
* Lakukan update terhadap data tersebut. Set jumlah menjadi 200000 pada nama
Jessica Mila

INSERT INTO tabungan (nama_nasabah,jumlah) VALUES ('Enzy Storia','200000');


UPDATE tabungan set jumlah = 200000 where nama_nasabah = 'Jessica Mila';
SAVEPOINT savepoint2;

- SAVEPOINT3 :
* Lakukan insert data yang baru pada tabel tabungan yaitu data Yuki Kato, proses
debit sejumlah 250000
INSERT INTO tabungan (nama_nasabah,jumlah) VALUES ('Yuki Kato',250000);
SAVEPOINT savepoint3;

Lakukan ROLLBACK pada SAVEPOINT2, tampilkan tabel perubahan yang terjadi

ROLLBACK TO savepoint2;
LAKUKAN PENGHAPUSAN SAVEPOINT1

RELEASE SAVEPOINT savepoint1;

Lakukan commit :
commit;

Lakukan rollback pada savepoint1, dan analisis yang terjadi !


Setelah dihapus savepoint1 maka tidak bisa di ROLLBACK pada savepoint1 tersebut.
Akan tetapi data tersimpan pada saat kita ROLLBACK di savepoint2. Dan saat kita
commit maka data
yang tersimpan adalah data pada savepoint2. Atau dengan kata lain hanya savepoint
yang terhapus data tidak

update tabungan set no = 4 where nama_nasabah ='Enzy Storia';

===================================================================================
===================================================================================
======

31 Mei 2023

===================================================================================
===================================================================================
======

Latihan SavePoint :
a. Lakukan update terhadap data pada tabel tabungan yaitu pada data no 1 ganti nama
menjadi Randi Permata,
lalu save point pertama

UPDATE tabungan
SET nama_nasabah = 'Randi Permata'
WHERE nama_nasabah = 'Rudi Permana';
SAVEPOINT savepoint1;

b. Lakukan insert data baru pada tabel tabungan yaitu Siti Rukmana dengan
proses adalah K sebanyak 150.000 lalu savepoint kedua

INSERT INTO tabungan(nama_nasabah,proses,jumlah) VALUES ('Siti


Rukmana','K',150000);
SAVEPOINT savepoint2;

c. Lakukan pembatalan query pada save point pertana, lihat apa perubahan yang
terjadi dan
jelaskan dan jelaskan pada laporan anda

ROLLBACK TO savepoint1;

d. Lakukan commit terhadap transaksi

COMMIT;

LOCK TABLE
==========
1) LOCK TABLE READ
--> User lain dan pembuat lock hanya bisa melakukan pembacaan data (SELECT)

LOCK TABLE namatabel READ;

2) LOCK TABLE WRITE


--> User lain tidak bisa melakukan SELECT maupun INSERT. Tetapi user yg pembuat
lock
bisa baca dan rubah data

LOCK TABLE namatabel WRITE;

3) Multiple LOCK TABLE

LOCK TABLE nama_tabel1 level_akses1, nama_table2 level_akses2;

Jikalau di unlock maka keduanya akan di lock

LATIHAN LOCK TABLE


==================

a. Buatlah tabel messages dengan field id dan message

CREATE TABLE messages(


id varchar(20),
message text);

b. Lakukan lock table read pada tabel tersebut lalu uji dengan memasukkan sebuah
data.

LOCK TABLE messages READ;

INSERT INTO messages (id,message) VALUES ('2211','Berhasil');


Lihat perubahan yang terjadi dan jelaskan pada laporan anda

Tidak bisa melakukan insert data karena tabel di lock. Hanya bisa membaca data

c. Kemudian lakukan unlock table

UNLOCK TABLE;

d. Lakukan lock tabel WRITE pada tabel tersebut lalu uji dengan meangakses tabel
tersebut
dengan user lain (jendela cmd yang lain). Lihat perubahan yang terjadi dan jelaskan
pada laporan anda

Setelah INSERT dan SELECT data bisa dilakukan pada user yang memberikan lock tetapi
untuk user lain
TIDAK bisa INSERT maupun SELECT

e. Kemudian lakukan UNCLOCK TABLE


UNLOCK TABLE;

Setelah di UNLOCK baru user lain bisa akses data pada table tersebut

LATIHAN KASUS :
==============

a. Buatlah seorang user bernama umar, berikan hak akses terhadap tabel tabungan

CREATE USER umar@localhost;


GRANT ALL PRIVILEGES ON db_bank.tabungan TO umar@localhost;
FLUSH PRIVILEGES;

b. Lakukan lock table read pada table tabungan pada super admin (root)

LOCK TABLE tabungan READ;

c. Masuk sebagai user umar pada cmd dan kemudian lakukan insert data oada tabel
tabungan.
Lihat apa yang terjadi dan jelaskan pada laporan anda.

user UMAR hanya bisa baca table tabungan tetapi tidak bisa insert data.
Karena pada user ROOT kita mengunci table read

d. Lakukan UNLCOK TABLE dan perhatikan kembali perubahan pada jendela cmd user
Umar, analisis dan
jelaskan pada laporan

user UMAR langsung menginsert data yang dimasukkan tadi

e. Lakukan lock table read pada table tabungan pada user ROOT

LOCK TABLE tabungan read;

f. Pada cmd user UMAR lakukan select pada tabel tabungan, lihat perubahan yang
terjadi. Tuliskan dan anlisis
jelaskan pada laporan Anda

user UMAR bisa melakukan select (baca data) pada tabel tabungan

g. Coba lakukan lock tabel tabungan dari user umar, bisakah dilakukan ? Berikam
penjelasan anda pada laporan

Tidak Bisa. Karena user UMAR bukan super admin, dia hanya bisa insert, update dan
delete. Tetapi
tidak bisa untuk buat user baru, lock table dan juga beri hak akses pada sebuah
user

===================================================================================
==========================================================================

07 Juni 2023

===================================================================================
=============================================================================

Stored Procedure dan Stored Function


====================================

--> Memberikan fitur untuk menulis kode program menggunakan bahasa SQL.
Perbedaan procedure dan function :
1. Procedure --> Tidak harus mengembalikan nilai
Function --> harus mengembalikan nilai

2. Procedure --> CALL


Function --> SELECT / WHERE

3. Procedure --> INPUT/OUTPUT parameter


Function --> INPUT parameter

Kelebihan penggunaan stored procedure dan stored function :


1. Membuat programming di SQL menjadi lebih efisien.
2. Mengurangi beban kerja web server
3. Akan lebih berguna ketika dikombinasikan dengan trigger

Kekurangan :
1. Rumit
2. Terbatas
3. Butuh resource besar

===================================================================================
========================================

Variable pada MySQL


Variable --> tempat penyimpanan nilai sementara.

@nama = 'Rival';

SET @nama = 'Rival';

Tampilkan Variabel :
SELECT @nama;

variabel juga dapat menyimpan jumlah data dalam suatu data


Contoh :
select count (*) from products;
select count(*) INTO @jml_data from products;

STORED PROCEDURE
================
Format :

DELIMITER //
CREATE PROCEDURE nama_procedure(parameter1, parameter2,...)

BEGIN
.....
.....
.....
END
DELIMITER

Untuk menjalankan procedure :


CALL nama_procedure (argumen1, argument2,....);

DELIMITER :
==========
--> Perintah untuk mengubah tanda akhir dari Query. ##, //, dll
Contoh :

1. Buat procedure dengan salam dengan isi Selamat Pagi Jurusan TI

DELIMITER //
DROP PROCEDURE IF EXIST salam
CREATE PROCEDURE salam()
BEGIN
SELECT 'Selamat Pagi Jurusan TI';
END //
DELIMITER ;

pemanggilannya :
CALL salam();

Cara melihat procedure :


========================
SHOW PROCEDURE STATUS WHERE db = 'namadatabase' \G;
SHOW PROCEDURE STATUS WHERE db = 'classicmodels' \G;

Lihat isi pembuatan Procedure :


===============================
SHOW CREATE PROCEDURE salam \G;

2. Buatlah procedure untuk menampilkan productname yang dibeli oleh customer


dengan customername Mini Caravy

DELIMITER $$
CREATE OR REPLACE PROCEDURE mini_caravy()
BEGIN
SELECT productname, customername
FROM customers JOIN orders USING (customernumber)
JOIN orderdetails USING(ordernumber)
JOIN products USING(productcode)
WHERE customername = 'Mini Caravy';
END $$
DELIMITER ;

Panggil procedure :
==================
CALL mini_caravy();

Procedure dengan Variabel :


===========================

Contoh :

DROP PROCEDURE IF EXISTS salam;


DELIMITER //
CREATE PROCEDURE salam()
BEGIN
DECLARE sapa varchar(30) DEFAULT 'Selamat Pagi Jurusan TI';
SET sapa = 'Selamat Pagi Prodi TRPL';
SELECT sapa;
END //
DELIMITER ;
CALL salam();
2. Buatlah procedure yang berfungsi untuk menampilkan jumlah employee yang ada
di setiap offices. Tampilkan hanya untuk offices yang memiliki employee lebih dari
3 orang.
Jumlah employee akan disimpan kedalam variabel tertentu

DELIMITER $$
CREATE OR REPLACE PROCEDUREjml_emp()
BEGIN
DECLARE jml_emp INT;
SET jml_emp = 3;

SELECT officeCode, COUNT(*) AS jumlah_employee


FROM employees
GROUP BY officeCode
HAVING COUNT(*) > jml_emp;

END $$

DELIMITER ;
CALL jml_emp();

3. Buatlah procedure untuk melakukan pengecekan terhadap buyprice


product dengan productname The Titanic.
Keterangan dimuat dalam sebuah variabel
Jika buyprice paling banyak 30 maka keterangannya 'Product Murah'
buyprice diatas 30 hingga 60 maka keterangannya 'Product Biasa'
buyprice diatas 60 keterangannya 'Product Mahal'

DELIMITER $$
CREATE OR REPLACE PROCEDURE keterangan_buyprice()
BEGIN
DECLARE keterangan VARCHAR(30);
SELECT
CASE
WHEN buyprice <= 30 THEN 'Product Murah'
WHEN buyprice <= 60 THEN 'Product Biasa'
ELSE 'Product Mahal'
END AS keterangan2
INTO keterangan
FROM products
WHERE productname = 'The Titanic';
SELECT keterangan;
END $$
DELIMITER ;
CALL keterangan_buyprice();

===================================================================================
======================================

14 Juni 2023

===================================================================================
========================================

//Query 2
DELIMITER $$
CREATE OR REPLACE PROCEDURE belititanic()
BEGIN
DECLARE keterangan VARCHAR(30);
DECLARE hargabeli INT;
SELECT buyprice INTO hargabeli FROM products WHERE productname ='The Titanic';
IF hargabeli <=30 THEN SET keterangan = 'Product Murah';
ELSEIF hargabeli <=60 THEN SET keterangan = 'Product Biasa';
ELSE SET keterangan = 'Product Mahal';
END IF;
SELECT keterangan;
END$$

DELIMITER ;
CALL belititanic();

Stored Procedure Parameter


==========================

Parameter
=========

--> Sebutan untuk nilai input kedalam sebuah procedure. Sebuah procedure bisa
memiliki beberapa parameter atau tidak sama sekali.

FORMAT :

CREATE OR REPLACE PROCEDURE nama_procedure(parameter1, parameter2)


BEGIN
.....
.....
END//

Cara menuliskan parameter :


==========================

[IN|OUT|INOUT] nama_parameter tipe_parameter(ukuran)

Contoh : IN nama varchar(30), OUT hasil_jumlah INT, INOUT hasil INT

3 Mode parameter :
IN --> Parameter default. Fungsinya untuk menampung nilai masukan (input)
OUT --> Fungsinya untuk menampung nilai output. Bisa dipanggil di luar procedure
INOUT --> Fungsinya untuk menampung nilai output dan input

http://notepad.pw/sbdprocedure

SOAL
====

Contoh :
1. Dengan parameter IN

DELIMITER //
CREATE OR REPLACE PROCEDURE salam_in (IN nama VARCHAR(30))
BEGIN
DECLARE salam VARCHAR(50);
SET salam = CONCAT('Selamat Pagi ', nama);
SELECT salam;
END //

DELIMITER ;

CALL salam_in('Firman');

2. Dengan parameter IN dan OUT

delimiter //
CREATE OR REPLACE PROCEDURE salam_inout (IN nama VARCHAR(30), OUT hasil
varchar(50))
BEGIN
SELECT CONCAT('Selamat Pagi ', nama) INTO hasil;
END //
DELIMITER ;

CALL salam_inout('Padang', @hasil_salam);

SELECT @hasil_salam;

3. Dengan parameter INOUT

DELIMITER //
CREATE OR REPLACE PROCEDURE tambuah_ciek(INOUT hasil INT)
BEGIN
SET hasil = hasil + 1;
END //
DELIMITER ;

SET @angka = 2;

CALL tambuah_ciek(@angka);

SELECT @angka;

SOAL:
1. Buatlah procedure yang digunakan untuk menambahkan data offices dengan parameter
kota dan kode_kantor.

DELIMITER //
CREATE OR REPLACE PROCEDURE tambah_data_office (
IN p_kota VARCHAR(50),
IN p_kode_kantor VARCHAR(10))
BEGIN
INSERT INTO classicmodels.offices (city, officeCode)
VALUES (p_kota, p_kode_kantor);
END //
DELIMITER ;
CALL classicmodels.tambah_data_office('Jakarta', '8');

CALL namaprocedure('Solok', 12);


2. Buatlah procedure level_customers dengan parameter input customernumber dan
parameter
output adalah customer_level, dengan ketentuan jika kreditlimit diatas 50000 maka
level customer
adalah platinum, selain itu non platinum. Saat pemanggilan lakukan pengecekan untuk
customer dengan kode 103.

DELIMITER $$
CREATE OR REPLACE PROCEDURE level_customer(
IN customernumber INT,
OUT customer_level VARCHAR(30))
BEGIN
DECLARE max_kreditlimit DECIMAL(10, 2);
SET max_kreditlimit = 50000;
SELECT
CASE
WHEN creditLimit > max_kreditlimit THEN 'Platinum'
ELSE 'Non Platinum'
END AS keterangan
INTO customer_level
FROM customers
WHERE customerNumber = customernumber
LIMIT 1;
END $$
DELIMITER ;
CALL level_customer(103, @customer_level);
SELECT @customer_level AS customer_level;

3. Buatlah procedure customers_show untuk menampilkan nama lengkap customer,


alamat, nomor telepon, city dan state.

DELIMITER $$
CREATE OR REPLACE PROCEDURE customers_show()
BEGIN
SELECT CONCAT(contactFirstName, ' ', contactLastName) AS FullName, addressLine1
AS alamat, phone AS nomor_telepon, city, state
FROM classicmodels.customers;
END $$
DELIMITER ;
CALL customers_show();

4. Buatlah procedure product_count untuk menampilkan banyaknya product berdasarkan


jenisnya(product_line) dari
table products. Tampilkan hanya untuk product yang jumlahnya diatas 10.
Jumlah product diatur dalam sebuah variabel.

DELIMITER $$
CREATE OR REPLACE PROCEDURE product_count()
BEGIN
SELECT productLine, COUNT(*) AS product_count
FROM classicmodels.products
GROUP BY productLine
HAVING COUNT(*) > 10;
END $$
DELIMITER ;
CALL product_count();
===================================================================================
===================================================================================
==================

21 Juni 2023

===================================================================================
===================================================================================
====================

--> Harus mengembalikan sebuah nilai, menggunakan RETURN

Format :
========

CREATE FUNCTION namafunction(parameter1....) RETURNS returntype


BEGIN
....
RETURN return_value
END//

Contoh :

DELIMITER $$
CREATE OR REPLACE FUNCTION hello(s char(20)) RETURNS char(50)
BEGIN
RETURN concat('Hello', s);
END $$
DELIMITER ;

Pemanggilannya :

SELECT hello(' Indonesia');

2. Buatlah fungsi sederhana yang menambahkan dua buah angka yang diinputkan ke
dalam
dua buah parameter, lalu mengembalikan hasil dari penambahan tersebut.

DELIMITER $$
CREATE OR REPLACE FUNCTION tambah(angka1 int(10), angka2 int(10)) RETURNS int(11)
BEGIN
RETURN concat(angka1 + angka2);
END $$
DELIMITER ;

SELECT tambah(2,3);

QUERY 2 :
=========
DELIMITER $$
CREATE OR REPLACE FUNCTION tambah(angka1 int, angka2 int) RETURNS int
BEGIN
DECLARE hasil int;
SET hasil = angka1 + angka2;
RETURN hasil;
END $$
DELIMITER ;

SELECT tambah(2,3);

3. Buatlah fungsi yang menghitung total jumlah order berdasarkan status yang
diinputkan user.
Parameter input adalah status, return jumlah order. Lakukan pengecekan untuk order
dengan status Cancelled

DELIMITER $$
CREATE OR REPLACE FUNCTION jml_order(keterangan varchar(50)) RETURNS int
BEGIN
DECLARE total int;
SELECT SUM(quantityordered) INTO total
FROM orderdetails JOIN orders USING(ordernumber)
WHERE status = keterangan;

RETURN total;
END $$
DELIMITER ;

SELECT jml_order('cancelled');
SELECT jml_order('shipped');

4. Waktu tunggu adalah selisih hari dari requireddate dengan shippeddate. Buatlah
fungsi status pengiriman dengan parameter input nomor order dan mengembalikan
status kirim
dengan ketentuan :
Jika waktu tunggu = 0, status kirim tepat waktu(on time)
Jika waktu tunggu 1-5, status kirim terlambat
Jika waktu tunggu > 5, status kirim sangat terlambat
selain itu : produk tidak diketahui keberadaannya
Lakukan pengujian untuk ordernumber 10160, 10388, 10104, 10425

DELIMITER $$
CREATE OR REPLACE FUNCTION status_pengiriman(nomor int) RETURNS varchar(50)
BEGIN
DECLARE tunggu int;
DECLARE status varchar(50);
SELECT datediff(requireddate,Shippeddate) INTO tunggu
FROM orders
WHERE ordernumber = nomor;

IF tunggu = 0 THEN set status = 'Tepat waktu';


ELSEIF tunggu >=1 AND tunggu <=5 THEN SET status = 'Terlambat';
ELSEIF tunggu >5 THEN SET status = 'Sangat terlambat';
ELSE set status = 'produk tidak diketahui keberadaannya';
END IF;
RETURN status;
END $$
DELIMITER ;

SELECT status_pengiriman(10160);
5. Buatlah fungsi lama pengiriman dengan parameter input nomor customer dan
mengembalikan
lama kirim, dengan ketentuan :
Jika negara customers Singapore, lama pengirimannya 3 hari
Jika negara customers USA, lama pengirimannya 5 hari
Jika negara customers UK, lama pengirimannya 10 hari
Selain itu lama pengirimannya 20 hari
Lakukan pengujian untuk customernumber 129,489,409

DELIMITER $$
CREATE OR REPLACE FUNCTION lama_pengiriman(nomor int) RETURNS int
BEGIN
DECLARE lama int;
DECLARE negara varchar(50);
SELECT country INTO negara
FROM customers
WHERE customernumber = nomor;

IF negara = 'Singapore' THEN SET lama = 3;


ELSEIF negara = 'USA' THEN SET lama = 5;
ELSEIF negara = 'UK' THEN SET lama = 10;
ELSE set negara = 20;
END IF;
RETURN lama;
END $$
DELIMITER ;

SELECT lama_pengiriman(129);

Anda mungkin juga menyukai