Pastikan sudah mengunduh dan menginstal MySQL pada perangkat.
Buka CMD, ketik mysql –version untuk memastikan MySQL sudah terinstal dengan benar.
Melalui CMD, ketik mysql -u root -p lalu masukkan password yang sudah dibuat saat instalasi.
Melalui CMD, ketik show databases;.
Melalui CMD, ketik create database uasdatabase;. Jika ingin menghapus database, ketik drop database uasdatabase;.
Instal beberapa package ini untuk menghubungkan R dengan MySQL:
install.packages(c("DBI", "odbc", "RMariaDB", "RMySQL", "RSQLite"))
install.packages("pacman")
Koneksikan menggunakan package yang telah terinstal
#Muat package yang diperlukan
library(pacman)
## Warning: package 'pacman' was built under R version 4.5.2
pacman::p_load(DBI, odbc, RMariaDB, RMySQL, RSQLite)
library(DBI)
library(RMariaDB)
library(RMySQL)
library(RSQLite)
#Hubungkan ke MySQL
car_sales_db=dbConnect(MySQL(),
user='root',
password='123456',
dbname='uasdatabase',
host='localhost')
dbListTables(car_sales_db) #Menampilkan tabel dalam database
## character(0)
Catatan: Ganti ‘password’ sesuai password yang dibuat saat instalasi MySQL.
Penjelasan: Kode ini menghubungkan R dengan MySQL menggunakan dbConnect() dan menyimpan koneksi ke variabel car_sales_db. Setelah itu, dengan menggunakan dbListTables() dapat menampilkan semua tabel yang ada dalam database yang terhubung.
Buat dua tabel dalam database car_sales_db, yaitu tabel Pegawai dan Penjualan:
#Buat Tabel Database
#Penggunaan "CREATE TABLE"
#Tabel Pegawai
dbExecute(car_sales_db, "CREATE TABLE Pegawai(
ID_Pegawai int AUTO_INCREMENT NOT NULL PRIMARY KEY,
Nama_Pegawai varchar(255) NOT NULL)")
## [1] 0
#Tabel Penjualan
dbExecute(car_sales_db, "CREATE TABLE Penjualan(
ID_Pesanan int AUTO_INCREMENT NOT NULL,
Nomor_Pesanan varchar(50) NOT NULL,
ID_Pegawai int NOT NULL,
Merek varchar(100),
Model varchar(100),
Ukuran_Mesin decimal(3,1),
Jenis_bahan_bakar varchar(50),
Tahun_Pembuatan int,
Jarak_Tempuh int,
Harga decimal(10,2) NOT NULL,
PRIMARY KEY (ID_Pesanan),
FOREIGN KEY (ID_Pegawai) REFERENCES Pegawai(ID_Pegawai))")
## [1] 0
Penjelasan: 1) Tabel Pegawai menyimpan data pegawai dengan kolom ID_Pegawai yang menjadi primary key. 2) Tabel Penjualan menyimpan data penjualan mobil dengan ID_Pesanan sebagai primary key dan ID_Pegawai sebagai foreign key yang merujuk pada tabel Pegawai.
Dengan menggunakan INSERT INTO dapat memasukkan data/values ke dalam tabel Pegawai dan Penjualan.
#Masukkan Nilai/Values
#Penggunaan "INSERT INTO"
#Masukkan Values (Tabel Pegawai)
data_pegawai=dbExecute(car_sales_db, "INSERT INTO
Pegawai(ID_Pegawai, Nama_Pegawai)
VALUES
(1, 'Adityawan'),
(2, 'Putri Suryani'),
(3, 'Bhaskara Wicaksono'),
(4, 'Aulia Rahmatika'),
(5, 'Bagas Prasetyo'),
(6, 'Siti Hajar Rahmaniar'),
(7, 'Dwi Anggraeni Lestari'),
(8, 'Dimas Rachmat'),
(9, 'Melani Shofiya'),
(10, 'Irwan Nugroho')")
print(data_pegawai)
## [1] 10
#Masukkan Values (Tabel Penjualan)
data_penjualan=dbExecute(car_sales_db, "INSERT INTO
Penjualan(ID_Pesanan, Nomor_Pesanan, ID_Pegawai, Merek, Model, Ukuran_Mesin, Jenis_Bahan_Bakar, Tahun_Pembuatan, Jarak_Tempuh, Harga)
VALUES
(1, 'ORD1V6C3', 1, 'Ford', null, 1, 'Petrol', 2002, 127300, 3074),
(2, 'ORD2L1X9', 2, 'Porsche', '718 Cayman', 4, 'Petrol', 2016, 57850, 49704),
(3, 'ORD2V2PT', 3, 'Toyota', 'RAV4', 1.8, 'Hybrid', 1988, 210814, 1705),
(4, 'ORDA2UV3', 4, 'VW', 'Polo', 1, 'Petrol', 2006, 127869, 4101),
(5, 'ORDARDNG', 5,'BMW', 'Z4', 2.2, 'Petrol', 2005, 133174, 8511),
(6, 'ORDC1QS0', 6, 'Toyota', 'RAV4', 2.2, 'Petrol', 2007, 79393, 16026),
(7, 'ORDC5VLZ', 7, 'Toyota', 'Yaris', 1.2, 'Petrol', 1992, 245990, 720),
(8, 'ORDDR0QJ', 8, 'Ford', 'Mondeo', 1.6, 'Diesel', 1996, 77584, 5667),
(9, 'ORDE2V33', 9, 'Porsche', 'Cayenne', 2.6, 'Diesel', 2015, 33693, 54037),
(10, 'ORDF6CL3', 10, 'VW', 'Passat', 1.6, 'Diesel', 1994, 179361, 2371),
(11, 'ORDG7PPL', 5, 'BMW', 'M5', 4.4, 'Petrol', 2008, 109941, 31711),
(12, 'ORDK8RRT', 9, 'Porsche', 'Cayenne', 2.6, 'Diesel', 2003, 105361, 15069),
(13, 'ORDLWY2A', 10, 'VW', 'Golf', 1.4, 'Diesel', 2001, 136439, 4049),
(14, 'ORDO363G', 3, 'Toyota', 'RAV4', 2.2, 'Hybrid', 2014, 66511, 33453),
(15, 'ORDOAMX1', 1, 'Ford', 'Focus', 2, 'Petrol', 1999, 135077, 4855),
(16, 'ORDPXPSR', 9, 'Porsche', '911', 3, 'Petrol', 2015, 44761, 77091),
(17, 'ORDR5ZJT', 4, 'VW', 'Passat', 2, 'Diesel', 1997, 50121, 8564),
(18, 'ORDU72NK', 7, 'Toyota', 'RAV4', 2.4, 'Petrol', 2011, 80839, 21637),
(19, 'ORDWS9LQ', 10, 'VW', 'Polo', 1, 'Petrol', 1992, 214329, 777),
(20, 'ORDWC3B9', 2, 'Porsche', '718 Cayman', 2.4, 'Petrol', 1988, 256489, 1183)")
print(data_penjualan)
## [1] 20
Jika ingin melihat tabel dari database car_sales_db:
#Melihat tabel dalam database car_sales_db
tabel=dbListTables(car_sales_db)
tabel
## [1] "pegawai" "penjualan"
Penjelasan: dbListTables(car_sales_db) adalah fungsi dari package DBI yang digunakan untuk mendapatkan daftar semua tabel yang ada dalam database yang terhubung (car_sales_db).
Jika ingin melihat isi tabel Pegawai dari database car_sales_db:
#Melihat isi tabel (tabel Pegawai)
#Penggunaan "SELECT"
tabel_pegawai=dbGetQuery(car_sales_db, "SELECT * FROM Pegawai")
print(tabel_pegawai)
## ID_Pegawai Nama_Pegawai
## 1 1 Adityawan
## 2 2 Putri Suryani
## 3 3 Bhaskara Wicaksono
## 4 4 Aulia Rahmatika
## 5 5 Bagas Prasetyo
## 6 6 Siti Hajar Rahmaniar
## 7 7 Dwi Anggraeni Lestari
## 8 8 Dimas Rachmat
## 9 9 Melani Shofiya
## 10 10 Irwan Nugroho
Penjelasan: dbGetQuery() digunakan untuk menjalankan query SQL di MySQL (dalam hal ini, SELECT * FROM Pegawai) untuk mengambil semua data (* menandakan semua kolom) dari tabel Pegawai.
Jika ingin melihat isi tabel Penjualan dari database car_sales_db:
#Melihat isi tabel (tabel Penjualan)
tabel_penjualan=dbGetQuery(car_sales_db, "SELECT * FROM Penjualan")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 5 imported
## as numeric
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 9 imported
## as numeric
print(tabel_penjualan)
## ID_Pesanan Nomor_Pesanan ID_Pegawai Merek Model Ukuran_Mesin
## 1 1 ORD1V6C3 1 Ford <NA> 1.0
## 2 2 ORD2L1X9 2 Porsche 718 Cayman 4.0
## 3 3 ORD2V2PT 3 Toyota RAV4 1.8
## 4 4 ORDA2UV3 4 VW Polo 1.0
## 5 5 ORDARDNG 5 BMW Z4 2.2
## 6 6 ORDC1QS0 6 Toyota RAV4 2.2
## 7 7 ORDC5VLZ 7 Toyota Yaris 1.2
## 8 8 ORDDR0QJ 8 Ford Mondeo 1.6
## 9 9 ORDE2V33 9 Porsche Cayenne 2.6
## 10 10 ORDF6CL3 10 VW Passat 1.6
## 11 11 ORDG7PPL 5 BMW M5 4.4
## 12 12 ORDK8RRT 9 Porsche Cayenne 2.6
## 13 13 ORDLWY2A 10 VW Golf 1.4
## 14 14 ORDO363G 3 Toyota RAV4 2.2
## 15 15 ORDOAMX1 1 Ford Focus 2.0
## 16 16 ORDPXPSR 9 Porsche 911 3.0
## 17 17 ORDR5ZJT 4 VW Passat 2.0
## 18 18 ORDU72NK 7 Toyota RAV4 2.4
## 19 19 ORDWS9LQ 10 VW Polo 1.0
## 20 20 ORDWC3B9 2 Porsche 718 Cayman 2.4
## Jenis_bahan_bakar Tahun_Pembuatan Jarak_Tempuh Harga
## 1 Petrol 2002 127300 3074
## 2 Petrol 2016 57850 49704
## 3 Hybrid 1988 210814 1705
## 4 Petrol 2006 127869 4101
## 5 Petrol 2005 133174 8511
## 6 Petrol 2007 79393 16026
## 7 Petrol 1992 245990 720
## 8 Diesel 1996 77584 5667
## 9 Diesel 2015 33693 54037
## 10 Diesel 1994 179361 2371
## 11 Petrol 2008 109941 31711
## 12 Diesel 2003 105361 15069
## 13 Diesel 2001 136439 4049
## 14 Hybrid 2014 66511 33453
## 15 Petrol 1999 135077 4855
## 16 Petrol 2015 44761 77091
## 17 Diesel 1997 50121 8564
## 18 Petrol 2011 80839 21637
## 19 Petrol 1992 214329 777
## 20 Petrol 1988 256489 1183
Jika ingin memperbarui data yang sudah ada dalam tabel, dapat menggunakan UPDATE. Contoh memperbarui data model mobil yang sebelumnya null:
#Mengubah/memperbarui data null dalam tabel database
#Penggunaan "UPDATE" dan "WHERE"
update1=dbExecute(car_sales_db, "UPDATE
Penjualan SET Model='Ford'
WHERE ID_Pesanan=1")
print(update1)
## [1] 1
Penjelasan: Perintah ini digunakan untuk mengubah nilai/data null pada model mobil di tabel Penjualan, khususnya untuk ID_Pesanan 1. Dari data null menjadi ada nilainya yaitu model mobil Ford.
Data dalam tabel bisa diurutkan dengan menggunakan ORDER BY. Contoh mengurutkan data berdasarkan harga secara menaik ( ASC ) dan menurun ( DESC ):
#Mengurutkan data
#Penggunaan "ORDER BY", "ASC", dan "DESC"
#Ascending (kecil-besar) kolom harga pada tabel Penjualan
harga_asc=dbGetQuery(car_sales_db,"SELECT * FROM Penjualan
ORDER BY Harga ASC")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 5 imported
## as numeric
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 9 imported
## as numeric
print(harga_asc)
## ID_Pesanan Nomor_Pesanan ID_Pegawai Merek Model Ukuran_Mesin
## 1 7 ORDC5VLZ 7 Toyota Yaris 1.2
## 2 19 ORDWS9LQ 10 VW Polo 1.0
## 3 20 ORDWC3B9 2 Porsche 718 Cayman 2.4
## 4 3 ORD2V2PT 3 Toyota RAV4 1.8
## 5 10 ORDF6CL3 10 VW Passat 1.6
## 6 1 ORD1V6C3 1 Ford Ford 1.0
## 7 13 ORDLWY2A 10 VW Golf 1.4
## 8 4 ORDA2UV3 4 VW Polo 1.0
## 9 15 ORDOAMX1 1 Ford Focus 2.0
## 10 8 ORDDR0QJ 8 Ford Mondeo 1.6
## 11 5 ORDARDNG 5 BMW Z4 2.2
## 12 17 ORDR5ZJT 4 VW Passat 2.0
## 13 12 ORDK8RRT 9 Porsche Cayenne 2.6
## 14 6 ORDC1QS0 6 Toyota RAV4 2.2
## 15 18 ORDU72NK 7 Toyota RAV4 2.4
## 16 11 ORDG7PPL 5 BMW M5 4.4
## 17 14 ORDO363G 3 Toyota RAV4 2.2
## 18 2 ORD2L1X9 2 Porsche 718 Cayman 4.0
## 19 9 ORDE2V33 9 Porsche Cayenne 2.6
## 20 16 ORDPXPSR 9 Porsche 911 3.0
## Jenis_bahan_bakar Tahun_Pembuatan Jarak_Tempuh Harga
## 1 Petrol 1992 245990 720
## 2 Petrol 1992 214329 777
## 3 Petrol 1988 256489 1183
## 4 Hybrid 1988 210814 1705
## 5 Diesel 1994 179361 2371
## 6 Petrol 2002 127300 3074
## 7 Diesel 2001 136439 4049
## 8 Petrol 2006 127869 4101
## 9 Petrol 1999 135077 4855
## 10 Diesel 1996 77584 5667
## 11 Petrol 2005 133174 8511
## 12 Diesel 1997 50121 8564
## 13 Diesel 2003 105361 15069
## 14 Petrol 2007 79393 16026
## 15 Petrol 2011 80839 21637
## 16 Petrol 2008 109941 31711
## 17 Hybrid 2014 66511 33453
## 18 Petrol 2016 57850 49704
## 19 Diesel 2015 33693 54037
## 20 Petrol 2015 44761 77091
#Descending (besar-kecil) kolom harga pada tabel Penjualan
harga_desc=dbGetQuery(car_sales_db,"SELECT * FROM Penjualan
ORDER BY Harga DESC")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 5 imported
## as numeric
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 9 imported
## as numeric
print(harga_desc)
## ID_Pesanan Nomor_Pesanan ID_Pegawai Merek Model Ukuran_Mesin
## 1 16 ORDPXPSR 9 Porsche 911 3.0
## 2 9 ORDE2V33 9 Porsche Cayenne 2.6
## 3 2 ORD2L1X9 2 Porsche 718 Cayman 4.0
## 4 14 ORDO363G 3 Toyota RAV4 2.2
## 5 11 ORDG7PPL 5 BMW M5 4.4
## 6 18 ORDU72NK 7 Toyota RAV4 2.4
## 7 6 ORDC1QS0 6 Toyota RAV4 2.2
## 8 12 ORDK8RRT 9 Porsche Cayenne 2.6
## 9 17 ORDR5ZJT 4 VW Passat 2.0
## 10 5 ORDARDNG 5 BMW Z4 2.2
## 11 8 ORDDR0QJ 8 Ford Mondeo 1.6
## 12 15 ORDOAMX1 1 Ford Focus 2.0
## 13 4 ORDA2UV3 4 VW Polo 1.0
## 14 13 ORDLWY2A 10 VW Golf 1.4
## 15 1 ORD1V6C3 1 Ford Ford 1.0
## 16 10 ORDF6CL3 10 VW Passat 1.6
## 17 3 ORD2V2PT 3 Toyota RAV4 1.8
## 18 20 ORDWC3B9 2 Porsche 718 Cayman 2.4
## 19 19 ORDWS9LQ 10 VW Polo 1.0
## 20 7 ORDC5VLZ 7 Toyota Yaris 1.2
## Jenis_bahan_bakar Tahun_Pembuatan Jarak_Tempuh Harga
## 1 Petrol 2015 44761 77091
## 2 Diesel 2015 33693 54037
## 3 Petrol 2016 57850 49704
## 4 Hybrid 2014 66511 33453
## 5 Petrol 2008 109941 31711
## 6 Petrol 2011 80839 21637
## 7 Petrol 2007 79393 16026
## 8 Diesel 2003 105361 15069
## 9 Diesel 1997 50121 8564
## 10 Petrol 2005 133174 8511
## 11 Diesel 1996 77584 5667
## 12 Petrol 1999 135077 4855
## 13 Petrol 2006 127869 4101
## 14 Diesel 2001 136439 4049
## 15 Petrol 2002 127300 3074
## 16 Diesel 1994 179361 2371
## 17 Hybrid 1988 210814 1705
## 18 Petrol 1988 256489 1183
## 19 Petrol 1992 214329 777
## 20 Petrol 1992 245990 720
Dengan menggunakan ALTER dapat menambah, mengubah nama kolom, ataupun menghapus kolom pada tabel yang sudah ada:
#Menambah/mengubah nama/menghapus field
#Penggunaan "ALTER"
#Menambahkan kolom (tabel Pegawai)
dbExecute(car_sales_db, "ALTER TABLE Pegawai
ADD Jenis_Kelamin varchar(1)")
## [1] 0
dbGetQuery(car_sales_db, "DESCRIBE Pegawai") #Memeriksa struktur tabel setelah perubahan
## Field Type Null Key Default Extra
## 1 ID_Pegawai int NO PRI <NA> auto_increment
## 2 Nama_Pegawai varchar(255) NO <NA>
## 3 Jenis_Kelamin varchar(1) YES <NA>
#Menghapus Kolom (Tabel Pegawai)
dbExecute(car_sales_db, "ALTER TABLE Pegawai
DROP COLUMN Jenis_Kelamin")
## [1] 0
dbGetQuery(car_sales_db, "DESCRIBE Pegawai")
## Field Type Null Key Default Extra
## 1 ID_Pegawai int NO PRI <NA> auto_increment
## 2 Nama_Pegawai varchar(255) NO <NA>
#Mengubah nama field
dbExecute(car_sales_db, "ALTER TABLE Pegawai
CHANGE COLUMN Nama_Pegawai
NamaPegawai varchar(255) NOT NULL")
## [1] 0
Untuk memberi hak askes ke pengguna lain, bisa gunakan GRANT. Untuk mencabut hak akses ke pengguna lain, gunakan REVOKE Contoh memberikan hak akses SELECT pada tabel Pegawai untuk pengguna tertentu:
#Memberi hak SELECT kepada user1 untuk tabel Pegawai
#Penggunaan "GRANT"
#CREATE USER 'user1'@'localhost' IDENTIFIED BY '123'; #Ketik ini di mySQL CMD
#DROP USER 'user1'@'localhost' #Untuk hapus user1 di mySQL CMD
dbExecute(car_sales_db, "GRANT SELECT ON uasdatabase.Pegawai
TO 'user1'@'localhost'")
## [1] 0
#Mencabut hak SELECT dari user1 pada tabel Pegawai
dbExecute(car_sales_db, "REVOKE SELECT ON uasdatabase.Pegawai
FROM 'user1'@'localhost'")
## [1] 0