Intro
Setelah melakukan Connecting r dan MySQL menggunakan beberapa paket dibawah
#install.packages("DBI",
# "odbc",
# "RMariaDB",
# "RMySQL",
# "RSQLite"
# )
Pastikan phpmyadmin sedang running melalui admin untuk dapat di connect kan ke localhost.
# install.packages("pacman")
# pacman::p_load(DBI, # DBI package helps connecting R to DBMS
# odbc, # Connect to ODBC Compatible Databases
# RMariaDB, # Database Interface and 'MariaDB' Driver
# RMySQL, # Database Interface and 'RMySQL' Driver
# RSQLite # Database Interface and 'RSQLite' Driver
# )
## package 'odbc' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\user\AppData\Local\Temp\RtmpaeQdjG\downloaded_packages
Lalu, kita gunakan coding dibawah untuk mengconnectkan R ke MySQL.
Note : Sebelum itu pastikan kita sudah membuka software XAMPP, lalu klik start pada Apache dan MySQL. Selanjutnya, kita klik admin untuk dapat mengakses database kita di PHPMyAdmin.
MySQL <- dbConnect(MySQL(),
user='root',
password='',
dbname='week4',
host='localhost')
dbListTables(MySQL) # a list of the tables in our connection
Filling the Database
Setelah membuat database nya, kita akan mengisi danb membuat tabel di dalam Database tersebut dengan data-data yang kita punya
Create A Blank Database
Pertama, kita membuat database baru kosong yang kan kita isi.
fac_db <- dbConnect(MySQL(),
user='root',
password='',
dbname='danpert4',
host='localhost')
Setelah database factory_db sukses di buat, kita akan mengisinya dengan tabel-tabel yang di butuhkan.
Cara membuat Tabel di dalam Database fac_db
dbExecute(fac_db, "CREATE TABLE Persons(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255))")
Insert Value
kSetelah Tabel berhasil di buat, tentunya kita harus mengisinya dengan data-data yang kita kehendaki
dbExecute(fac_db, "INSERT INTO
Persons(PersonID, LastName, FirstName, Address, City)
VALUES(20214920007, 'Arya', 'Diyas', 'Jl. Raya Binong', 'Tangerang')")
Truncate Table
Truncate digunakan untuk menghapus seluruh tabel, tapi tidak tabelnya. Bisa dibilang mirip fungsi clear data atau membuat Tabel tersebut tetep ada tapi blank, tidak memiliki isi.
Disini kita akan menghapus nama-nama di tabel persons tapi tidak dengan tabel Personsnya.
dbExecute(fac_db, "TRUNCATE TABLE Persons")
Menghapus Tabel
Bebrbeda dengan truncate yang hanya menghapus isinya, fungsi drop benar-benar menghapus semua data termasuk tabel-tabelnya juga sekalian.
dbExecute(fac_db, "DROP TABLE Persons")
0 menunjukkan tabel berhasil terhapus
Write Table
Kita bisa membuat table baru beserta isinya langsunfg. Atau bisa dibilang melakukan import dari file ke database MySQL. Import sangat efektif apalagi daripada meng input manual dalam jumlah besar.
Orders <-read.csv("Orders.csv")
dbWriteTable(fac_db, "Orders", Orders, append=T)
Altering The Table
Data yang sudah ada dalam Table pastinya akan mengalami perubahan, tidak selalu sama. Dalam SQL tentunya proses meng edit sudah tersupport. Bisa untuk menambahan atau menghapus atau mengedit kolom dalam tabel tersebut.
Adding Columns
Bisa saja di butuhkan tambahan Data, pada kali ini kita akan menambahkan kolom baru yaitu email dalam tabel orders yang telah ada.
dbExecute(fac_db, "ALTER TABLE Orders
ADD Email varchar(255)")
Deleting Columns
Selain bisa menambahkan kolom, kita juga bisa menghapus kolom apabila tidak terpakai.
dbSendQuery(fac_db, "ALTER TABLE Orders
DROP COLUMN Email")
Altering or Modifying Column
Type data tentunya bisa di edit apabila diinkan berbentuk tanggal atau angka atau decimal dsb.
Dalam ini, kita mebubah coumn Orderdate menjadi type data Date
dbSendQuery(fac_db," ALTER TABLE Orders
MODIFY COLUMN OrderDate date")
Constraints
Constraints bisa dibilang aturan yang ditetapkan dalam data di tabel-tabel yang kita punya. Supaya data lebih teratur dan tidak perlu dirapihkan terlalu banyak. Contohnya untuk data tanggal lebih akurat menggunakan format date daripada integer tentunya. Apabila ada perbedaan maka data tidak valid.
Constraints bisa di terapkan di column ataupun tablenya. Di Column bisa membatasi seperti tidak boleh kosong dan lain-lain.
- NOT NULL : memastikan kolom tidak boleh memuat nilai null.
- UNIQUE : memastikan values kolom tidak ada yang memiliki nilai yang sama.
- PRIMARY KEY : gabungan dari NOT NULL dan UNIQUE. Artinya secara unik mengidentifikasikan setiap baris dalam tabel.
- FOREIGN KEY : secara unik mengidentifikasikan baris/catatan di tabel lain.
- CHECK : memastikan semua value pada kolom sudah sesuai dengan kondisi tertentu.
- DEFAULT : menentukan nilai defalut ketika terdapat nilai yang tidak sesuai.
- INDEX : digunakan untuk membuat atau mengambil data dari database secara cepat.
Not Null
dbSendQuery(fac_db,"CREATE TABLE Person_NotNull (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int)")
Pada coding diatas, diharuskan bahwa kolom ID, LastName, dan FirstName tidak akan diperbolehkan memiliki nilai Null ketika “Persons_NotNull” tabel dibuat.
Unique
Memastikan Value dalam column tersebut beda antara satu dengan lainnya, tdk boleh ada yang sama.
dbSendQuery(fac_db,"CREATE TABLE Persons_Unique (ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int)")
Coding diatas menjelaskan bahwa kolom ID harus memiliki nilai yang unik atau tidak memiliki kesamaan nilai pada saat tabel Persons dibuat.
Atau jika kita ingin membuat UNIQUE Constraint pada saat tabel sudah dibuat. Maka, kita dapat gunakan codingan dibawah ini.
dbSendQuery(fac_db,"ALTER TABLE Persons_Unique
ADD UNIQUE (ID)")
Jika kita menginginkan banyak kolom UNIQUE Constraint, maka kita dapat gunakan formula seperti dibawah ini.
dbSendQuery(fac_db,"ALTER TABLE Persons_Unique
ADD CONSTRAINT UNIQUE (ID,LastName)")
Atau jika kita ingin menghapus UNIQUE Constraint yang sebelumnya sudah kita setting, maka dapat kita gunakan code dibawah ini.
dbSendQuery(fac_db,"ALTER TABLE Persons_Unique
DROP INDEX ID")
Primary Key
Jika kita menggunakan PRIMARY KEY pada suatu kolom, maka kolom tersebut tidak boleh memiliki nilai NULL dan harus unik. Suatu tabel diperbolehkan memiliki satu Primary Key saja, dan di tabel, primary key dapat dimuat satu atau lebih kolom. Primary Key adalah Unique value yang membedakan data dengan yang lainnya. data yang dijadikan primary key tidak boleh sama dan tidak boleh kosong. Contohnya seperti Customer ID atau NIK dalam data pemerintahan
dbSendQuery(fac_db,"CREATE TABLE Persons_PK (ID int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int)")
Untuk menentukan PRIMARY KEY Constraint dengan banyak kolom ketika tabel dibuat, kita dapat gunakan formula dibawah ini.
dbSendQuery(fac_db,"CREATE TABLE Persons_PK (ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT Persons_PK PRIMARY KEY (ID,LastName))")
Namun, ketika tabel sudah dibuat dan kita ingin membuat PRIMARY KEY Constraint untuk kolom ID maka, kita gunakan code dibawah ini.
dbSendQuery(fac_db, "ALTER TABLE Persons_PK
ADD PRIMARY KEY (ID)")
Foreign Key
FOREIGN KEY digunakan untuk membuat hubungan antar dua tabel.FOREIGN KEY adalah bidang (atau kumpulan bidang) dalam satu tabel yang merujuk ke PRIMARY KEY di tabel lain. Tabel yang berisi primary key disebut tabel anak, dan tabel yang berisi foreign key disebut tabel referensi atau tabel induk. Jadi Foreign Key digunakan untuk menghubungankan 2 tabel, biasanya merupakan column yang sama dari satu tabel dan tabel lainnya.
Perhatikan dua tabel berikut:
* “Persons” table:
| PersonID |
LastName |
FirstName |
Age |
| 1 |
Xi |
Bakti |
28 |
| 2 |
Li |
Chong |
23 |
| 3 |
Gou |
Mei |
20 |
* “Orders” table:
| OrderID |
OrderNumber |
PersonID |
| 1 |
77895 |
3 |
| 2 |
44678 |
3 |
Perhatikan bahwa kolom “PersonID” di tabel “Orders” menunjuk ke kolom “PersonID” di tabel “Persons”.
- Kolom “PersonID” di tabel “Persons” adalah PRIMARY KEY di tabel “Orang”.
- Kolom “PersonID” di tabel “Orders” adalah FOREIGN KEY di tabel “Pesanan”.
- Batasan FOREIGN KEY digunakan untuk mencegah tindakan yang akan menghancurkan link antar tabel.
- Batasan FOREIGN KEY juga mencegah data yang tidak valid dimasukkan ke dalam kolom kunci asing, karena itu harus menjadi salah satu nilai yang terkandung dalam tabel yang ditunjuknya.
- Untuk mengizinkan penamaan batasan FOREIGN KEY, dan untuk mendefinisikan batasan FOREIGN KEY pada beberapa kolom, gunakan sintaks SQL berikut:
dbSendQuery(fac_db,
"CREATE TABLE Orders (OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
CONSTRAINT FOREIGN KEY (PersonID))")
Untuk mengizinkan penamaan batasan FOREIGN KEY, dan untuk mendefinisikan batasan FOREIGN KEY pada beberapa kolom, gunakan sintaks SQL berikut:
dbSendQuery(fac_db,
"CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons_pk (PersonID))")
Untuk mengizinkan penamaan batasan FOREIGN KEY, dan untuk mendefinisikan batasan FOREIGN KEY pada beberapa kolom, gunakan sintaks SQL berikut:
dbSendQuery(fac_db,"ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)")
Check
CHECK digunakan untuk membatasi value yang dapat ditempatkan ke kolom. Jika kita mennggunakan Check pada suatu kolom, maka nilai tertentu saja yang diizinkan untuk kolom tersebut. Misal, kita gunakan CHECK (Age>=18) maka, pada kolom age yang akan muncul untuk seseorang yang berusia 18 tahun keatas.
dbSendQuery(fac_db,
"CREATE TABLE Persons (ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18))")
Nah, jika kita ingin menggunakan Check untuk beberapa kolom maka, kita gunakan formula dibawah ini.
dbSendQuery(fac_db,
"CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes'))")
Jika tabel sudah dibuat dan kita ingin menambahkan Check maka gunakan code dibawah ini.
dbSendQuery(fac_db, "ALTER TABLE Persons
ADD CHECK (Age>=18)")
Code ini digunakan untuk table yang sudah dibuat dan menggunakan banyak kolom.
dbSendQuery(fac_db, "ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge
CHECK (Age>=18 AND City='Sandnes')")
Default
DEFAULT Constraint digunakan untuk memberikan defalut value untuk kolom. Misal kita set untuk City Sandness itu defalut, jadi setiap City yang memiliki value Sandness akan bernilai defalut. Atau langsung terisi.
dbSendQuery(fac_db,
"CREATE TABLE Persons_default (ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255) DEFAULT 'Sandnes')")
Jika kita ingin menambahkan DEFAULT Constraint pada saat tabel sudah dibuat maka, kita gunakan code dibawah ini.
dbSendQuery(fac_db,"ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes'")
Index
INDEX digunakan untuk mencari suatu value dalam tabel. Indeks ini digunakan untuk mengambil data dari database secara efisien. Pengguna tidak dapat melihat indeksnya, mereka hanya bisa menggunakannya untuk mempercepat pencarian.
dbSendQuery(fac_db, "CREATE INDEX idx_pname
ON Persons (LastName, FirstName)")
Auto Increment
AUTO-INCREMENT memungkinkan nilai atau value unik akan dihasilkan secara otomatis ketika nilai value baru ditambahkan dalam tabel. Biasanya Auto-Increment digunakan pada primary key. Penomorannya pun terisi otomatis jadi tidak perlu di isi. Biasanya untuk ID
dbSendQuery(fac_db,
"CREATE TABLE Persons_ai (
Personid int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (Personid))")
Thats For All Have a Nice Day :)))