0% found this document useful (0 votes)
19 views36 pages

Query Database Ramdzy

The document outlines SQL commands for creating and managing a database named 'ramdzy', including the creation of tables, altering table structures, inserting, updating, and deleting records. It demonstrates various SQL operations such as selecting data with conditions, using aggregate functions, and implementing constraints. Additionally, it covers advanced SQL features like auto-increment, string functions, and date/time functions.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views36 pages

Query Database Ramdzy

The document outlines SQL commands for creating and managing a database named 'ramdzy', including the creation of tables, altering table structures, inserting, updating, and deleting records. It demonstrates various SQL operations such as selecting data with conditions, using aggregate functions, and implementing constraints. Additionally, it covers advanced SQL features like auto-increment, string functions, and date/time functions.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 36

/*BISMILLAH ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/

create database ramdzy;

USE RAMDZY;

CREATE TABLE barang (

id INT,

nama VARCHAR(100),

harga INT,

jumlah INT

);

/*STRUKTUR TABLE---------------------------------------------------------------------------------*/

DESC barang;

/*MENGUBAH STRUKTUR TABLE------------------------------------------------------------------------*/

ALTER TABLE barang

ADD COLUMN deskripsi TEXT;

ALTER TABLE barang

MODIFY nama VARCHAR(200) FIRST;

ALTER TABLE barang

MODIFY id INT NOT NULL,

MODIFY nama VARCHAR(200) NOT NULL;

/*SHOW CREATE TABLE-----------------------------------------------------------------------------*/

SHOW CREATE TABLE barang;

/*DEFAULT VALUE----------------------------------------------------------------------------*/
/*

id INT,

nama VARCHAR(100),

harga INT NOT NULL DEFAULT 0 ,

jumlah INT NOT NULL DEFAULT 0 (DEFAULT 'EKO')

*/

ALTER TABLE barang

MODIFY harga INT NOT NULL DEFAULT 0,

MODIFY jumlah INT NOT NULL DEFAULT 0;

/*TIME STAMP WAKTU DIBUAT-----------------------------------------------------------------------*/

ALTER TABLE BARANG

ADD waktu_dibuat TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

/*

id INT,

nama VARCHAR(100),

harga INT NOT NULL DEFAULT 0,

jumlah INT NOT NULL DEFAULT 0,

waktu_dibuat TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; cuurent_timestamp : ketika


tdk memasukan data maka akan di set waktu saat ini

*/

/*TRUNCATE (MENGHAPUS ALL ISI TABEL TANPA MENGHAPUS STRUKTURNYA)------------------------------


-----------*/

/*truncate nama_tabel*/

TRUNCATE barang;

/*DROP TABLE (MENGHAPUS TABLE PERMANEN)*/

DROP TABLE barang;

/*NEW TABLE------------------------------------------------------------------------------------------------*/
CREATE TABLE products (

id VARCHAR(10) NOT NULL,

name VARCHAR(100) NOT NULL,

descriptions TEXT,

price INT UNSIGNED NOT NULL,

quantity INT UNSIGNED NOT NULL DEFAULT 0,

created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

) ENGINE = InnoDB;

SELECT *FROM PRODUCTS;

/*UNSIGNED ARTINYA GABOLEH NEGATIF---*/

/*INSERT TABEL---------------------------------------------------------------------------------------------*/

use ramdzy;

INSERT INTO products(id, name, descriptions, price, quantity)

VALUES ('P001', 'Mie Ayam Original', '', 15000, 100),

('P002', 'Mie Ayam Original', 'Mie ayam Bakso + Bakso', 20000, 100),

('P003', 'Mie Ayam Ceker', '', 20000, 100),

('P004', 'Mie Ayam Spesial', '', 25000, 100),

('P005', 'Mie Ayam Yamin', '', 15000, 100);

/*SELECT MENGAMBIL KOLOM DATA YANG DIINGINKAN------------------------------------------------------------


-------- */

SELECT id, name, price, quantity FROM products;

/*PRIMARY KEY BISA MULTIPLE COLUMN (1 TABEL BISA 2 PRIMARY KEY*/

ALTER TABLE products

ADD PRIMARY KEY (id);


desc products;

/* WHERE CLAUSE*/

SELECT * FROM PRODUCTS WHERE QUANTITY = 100;

SELECT * FROM PRODUCTS WHERE PRICE = 15000;

/* UPDATE(HARUS HATI HATI, JIKA WHERENYA SALAH DIKIT MAKA DATANYA AKAN KE UPDATE
SEMUA) */

ALTER TABLE PRODUCTS

ADD COLUMN CATEGORY ENUM('MAKANAN', 'MINUMAN','LAIN-LAIN')

AFTER NAME; /* DI LETAKKAN SETELAH KOLOM NAME*/

SELECT * FROM PRODUCTS;

SELECT * FROM PRODUCTS WHERE ID = 'P001';

UPDATE PRODUCTS

SET CATEGORY = 'MAKANAN'

WHERE ID = 'P001';

UPDATE PRODUCTS

SET CATEGORY = 'MAKANAN',

DESCRIPTIONS = 'BEBEK'

WHERE ID = 'P003';

UPDATE PRODUCTS

SET PRICE = PRICE + 5000

WHERE ID = 'P005';

SELECT * FROM PRODUCTS;


INSERT INTO products(id, name, descriptions, price, quantity)

VALUES ('P009', 'Mie Ayam Original', '', 15000, 100);

/* DELETE */

DELETE FROM PRODUCTS /* bisa hapus isi 1 tabel */

WHERE ID = 'P009'; /* DELETE 1 ROWS*/

/* ALIAS KOLOM */ /* 1 KATA GAPAKE PETIK GPP TTP BISA*/

SELECT ID AS 'KODE',

NAME AS 'NAMA',

CATEGORY AS 'KATEGORI',

PRICE AS 'HARGA',

QUANTITY AS 'JUMLAH'

FROM PRODUCTS;

/* ALIAS TABLE */

SELECT P.ID AS 'KODE',

P.NAME AS 'NAMA',

P.CATEGORY AS 'KATEGORI',

P.PRICE AS 'HARGA',

P.QUANTITY AS 'JUMLAH'

FROM PRODUCTS AS P;

/* ADD VALUES*/

INSERT INTO products(id, category, name, descriptions, price, quantity)

VALUES ('P006','Makanan', 'Mie Ayam Original', '', 15000, 100),

('P007','Makanan', 'Mie Ayam Original', 'Mie ayam Bakso + Bakso', 20000, 100),

('P008','Makanan', 'Mie Ayam Ceker', '', 20000, 100),

('P009','Makanan', 'Mie Ayam Spesial', '', 25000, 100),

('P0010','lain-lain', 'keripik udang', '', 15000, 100),

('P0011','Minuman', 'Es Jeruk', '', 15000, 100),


('P0012','Minuman', 'Es Campur', 'Mie ayam Bakso + Bakso', 20000, 100),

('P0013','Minuman', 'Es Teh Manis', '', 20000, 100),

('P0014','lain-lain', 'Kerupuk', '', 25000, 100),

('P00115','lain-lain', 'Es Krim', '', 15000, 100)

/* DESCRIPTION DI NULL IN AJA HARUSNYA GAUSAH DIISI '' */

select * from products;

DELETE FROM PRODUCTS WHERE ID = 'P00115';

INSERT INTO products(id, category, name, descriptions, price, quantity)

VALUES ('P0015','lain-lain', 'Es Krim', '', 15000, 100);

UPDATE PRODUCTS SET QUANTITY = 300 WHERE ID = 'P009';

UPDATE PRODUCTS SET QUANTITY = 200 WHERE ID = 'P0014';

UPDATE PRODUCTS SET QUANTITY = 150 WHERE ID = 'P0013';

/* WHERE OPERATOR*/

SELECT * FROM PRODUCTS WHERE QUANTITY >100;

SELECT * FROM PRODUCTS WHERE QUANTITY >=100;

SELECT * FROM PRODUCTS WHERE CATEGORY != 'MAKANAN'; /* SELAIN (TIDAK SAMA DENGAN*/

SELECT * FROM PRODUCTS WHERE CATEGORY <> 'Minuman'; /* SELAIN (TIDAK SAMA DENGAN*/

/* AND*/

SELECT * FROM PRODUCTS WHERE QUANTITY >100 AND PRICE >20000;

SELECT * FROM PRODUCTS WHERE CATEGORY = 'MAKANAN' AND PRICE <20000;

/* OR*/

SELECT * FROM PRODUCTS WHERE QUANTITY >100 OR PRICE >20000;

/* COMBNE OR AND */
SELECT * FROM PRODUCTS WHERE (CATEGORY= 'MAKANAN' OR QUANTITY= '500') AND PRICE >
'20000';

/* DALAM KURUNG ADALAH PRIORITAS KALKULASI */

/* LIKE (DATA YANG MENGANDUNG HURUF YG KITA MAU)*/

/* klo datanya terlalu besar kinerja LIKE LAMBAT*/

SELECT * FROM PRODUCTS WHERE name LIKE '%mie%'; /* mengandung 100% mie */

select * from products where name like '%eke%';

/* INSERT DATA NULL DESCRIPTIONS JAD JNGN PAKE '' */

INSERT INTO products (id, category, name, descriptions, price, quantity)

VALUES ('P999', 'Minuman', 'Teh Tawar', NULL, 5000, 100);

UPDATE PRODUCTS

SET DESCRIPTIONS = NULL

WHERE ID = 'P008';

/* NULL OPERATOR */

SELECT * FROM PRODUCTS WHERE descriptions IS NULL; /* MENAMPILKAN NULL*/

SELECT * FROM PRODUCTS WHERE DESCRIPTIONS IS NOT NULL; /* MENAMPILKAN TIDAK ADA
NULL*/

/* BETWEEN (2 KONDISI AJA*/

SELECT * FROM PRODUCTS WHERE PRICE BETWEEN 10000 AND 20000; /* RENTANG 10K - 20K*/

SELECT * FROM PRODUCTS WHERE PRICE NOT BETWEEN 10000 AND 20000;

/* IN (PENGGANTI OR)(ARTINYA ATAU)*/

SELECT * FROM PRODUCTS WHERE CATEGORY IN('MAKANAN', 'MINUMAN');

SELECT * FROM PRODUCTS WHERE CATEGORY NOT IN('MAKANAN', 'MINUMAN'); /* SELAIN */


/* ORDER BY CLAUSE- MENGURUTKAN DATA

DESC : BESAR KE KECIL

ASC : KECIL KE BESAR

DEFAULT : ASC

*/

SELECT * FROM PRODUCTS ORDER BY CATEGORY ASC;

SELECT ID, CATEGORY, NAME FROM PRODUCTS ORDER BY CATEGORY ASC;

SELECT ID, CATEGORY, NAME, PRICE FROM PRODUCTS ORDER BY CATEGORY ASC, PRICE DESC;

/* LIMIT CLAUSE */

/* MEMBATASI JUMLAH DATA, MEMBATASI HASIL QUERY

LIMIT 2 = MAKSUDNYA MAKSIMALL 2 DATA

*/
SELECT * FROM PRODUCTS ORDER BY ID LIMIT 5; /* SELECT * FROM PRODUCTS ORDER BY ID LIMIT
0, 5;*/

/* OFFSET */

SELECT * FROM PRODUCTS ORDER BY ID LIMIT 5,5; /* KITA HIRAUKAN 5 DATA PERTAMANYA DAN
RESULTNYA P005 SAMPAI P0010*/

SELECT * FROM PRODUCTS ORDER BY ID LIMIT 15,5; /* RESULT : P0015 SAMPAI P0020 */

/* JGN KHAWATIR, MEMANG ADA PROBLEM DI STRUKTUR DATANNYA JADI ORDER BYNYA TIDAK
MAKSIMAL

QUERYNYA TETAP BENAR*/

/* SELECT DISTINCT*/

SELECT DISTINCT ID_CATEGORY FROM PRODUCTS;

/* NUMERIC FUNCTION (ARITMATIKA)*/

SELECT ID, NAME, PRICE, PRICE DIV 1000 AS 'PRICE IN K'

FROM PRODUCTS; /* PRICE DI BAGI 1000*/

SELECT ID, NAME, PRICE FROM PRODUCTS WHERE PRICE DIV 1000 > 15; /*MENAMPILKAN PRICE
JIKA HASIL PEMBAGIAN 1000-NYA LEBH DARI 15, CONTOHNYA 16,
JADI HANYA NAMPILIN NILAI APA YG JIKA DIBAGI 1000
HASILNYA LEBIH DARI 15*/

SELECT ID, COS(PRICE), SIN(PRICE), TAN(PRICE) FROM PRODUCTS;

/* AUTO INCREMENT (HANYA BISA PRIMARY KEY)(auto input NOMOR)*/

CREATE TABLE ADMIN(

ID INT NOT NULL AUTO_INCREMENT,

FIRST_NAME VARCHAR(100) NOT NULL,

LAST_NAME VARCHAR(100) NOT NULL,

PRIMARY KEY (ID)

) ENGINE = InnoDB;

desc admin;

INSERT INTO ADMIN (FIRST_NAME, LAST_NAME)

VALUES ('EKO','kHANEDY'),

('BUDI','NUGRAHA'),

('JOKO','MORRO');

SELECT*FROM ADMIN ORDER BY ID;

DELETE FROM ADMIN WHERE ID = 3;

INSERT INTO ADMIN (FIRST_NAME, LAST_NAME)

VALUES ('RAMD','ZAKY'); /* ID 3 DI HAPUS, MAKA INSERT SELANJUTNYA DIMULAI DARI NOMOR 4*/

INSERT INTO ADMIN (FIRST_NAME, LAST_NAME)

VALUES ('RULLY','HIDAYAT');

SELECT LAST_INSERT_ID(); /*HARUSNYA 5 RESULTNYA*/

/* STRING FUNCTION (ADA BANYAK, BSA DI RISET DI WEB MYSQL)*/

SELECT ID, LOWER(NAME) AS 'NAME LOWER',

UPPER(NAME) AS 'NAME LOWER',


LENGTH(NAME) AS 'NAME LENGTH'

FROM PRODUCTS;

/* DATE DAN TIME FUNCTION*/

/*MENAMPILKAN TAHUN BERAPA DAN BULAN BERAPA DARI TIME STAMP*/

SELECT ID, CREATED_AT,

EXTRACT(YEAR FROM CREATED_AT) AS YEAR,

EXTRACT(MONTH FROM CREATED_AT) AS MONTH

FROM PRODUCTS;

/* VERSI 2, LEBIH MUDAH, MAKA APPLY YANG VERSI 2 AJA*/

SELECT ID, CREATED_AT, YEAR(CREATED_AT) AS YEAR, MONTH(CREATED_AT) AS MONTH FROM


PRODUCTS;

/* FLOW CONTROL FUNCTION*/

SELECT ID,

CATEGORY,

CASE CATEGORY

WHEN 'MAKANAN' THEN 'ENAK'

WHEN 'MINUMAN' THEN 'SEGAR'

ELSE 'KOCAK'

END AS 'CATEGORY'

FROM PRODUCTS;

/* KURANG LEBIH SAMA KYAK LOOKER STUDIO SAMA EXCEL*/

SELECT ID,

PRICE,

IF(PRICE <= 15000, 'MURAH', IF(PRICE <= 20000, 'MAHAL', 'MAHAL BANGET')) AS 'MAHAL?'

FROM PRODUCTS; /* IF KEDUA MERUPAKAN KONDISI ELSE DARI IF YANG PERTAMA, JADI IFNYA
1 KALIMAT*/

/* IFNULL */

SELECT ID, NAME, IFNULL(DESCRIPTIONS, 'KOSONG') FROM PRODUCTS;


SELECT * FROM PRODUCTS; /* ENGGA AD YG NULL KARNA UDAH TERISI STRING SPASI '' */

/* AGGREGATE FUNCTION HANYA 1 SELECT*/

SELECT COUNT(ID) AS 'TOTAL PRODUK' FROM PRODUCTS;

SELECT MAX(PRICE) AS 'PRODUK TERMAHAL' FROM PRODUCTS;

SELECT MIN(PRICE) AS 'PRODUL TERMURAH' FROM PRODUCTS;

SELECT AVG(PRICE) AS 'RATA-RATA HARGA' FROM PRODUCTS;

SELECT SUM(QUANTITY) AS 'TOTAL STOCK' FROM PRODUCTS;

/* GROUP BY HANYA BISA UTK AGGREGATE FUNCTION (MATCH KONDISI PER KRITERIA)*/

SELECT COUNT(ID) AS 'TOTAL PRODUK', ID_CATEGORY FROM PRODUCTS GROUP BY ID_CATEGORY;

SELECT MAX(PRICE) AS 'PRODUK TERMAHAL', ID_CATEGORY FROM PRODUCTS GROUP BY


ID_CATEGORY;

SELECT MIN(PRICE) AS 'PRODUL TERMURAH',CATEGORY FROM PRODUCTS GROUP BY CATEGORY;

SELECT AVG(PRICE) AS 'RATA-RATA HARGA',VCATEGORY FROM PRODUCTS GROUP BY CATEGORY;

SELECT SUM(QUANTITY) AS 'TOTAL STOCK', CATEGORY FROM PRODUCTS GROUP BY CATEGORY;

/* HAVING CLAUSE(MELAKUKAN FILTER PADA GROUPING, bisa mengecualikan value data*/

/* YANG MAU DI HAVING HARUS PAKAI AS*/

/* KONSEP HAVING SAMA KYAK WHERE CLAUSE, CUMA INI DIPAKAI KETIKA BANYAK FUNCTION*/

SELECT COUNT(ID) AS 'TOTAL', ID_CATEGORY

FROM PRODUCTS

GROUP BY ID_CATEGORY

HAVING TOTAL > 1;

SELECT * FROM PRODUCTS;

/* CONSTRAINT */

/* MENJAGA DATA, BOLEH LEBIH DARI 1 CONSTRAINT*/

/* MEMASTIKAN BAHWA DATA KITA TETAP UNIQUE*/

CREATE TABLE CUSTOMERS(

ID INT NOT NULL AUTO_INCREMENT,

EMAIL VARCHAR(100) NOT NULL,


FIRST_NAME VARCHAR(100) NOT NULL,

LAST_NAME VARCHAR(100),

PRIMARY KEY (ID),

UNIQUE KEY EMAIL_UNIQUE (EMAIL)

) ENGINE = InnoDB;

/*

- TUJUAN PENAMBAHAN TEKS CONSTRAINT : Biasa dilakukan agar lebih mudah menghapus,
mengubah, atau debug constraint-nya

- ENGGA WAJIB DITULIS CONSTRAINT, KARNA UDAH OTOMATIS CONSTRAINT

- MACAM-MACAM CONSTRAINT : PRIMARY KEY

FOREIGN KEY

UNIQUE

NOT NULL

CHECK

DEFAULT

*/

DESC CUSTOMERS;

/* MENAMBAH/MENGHAPUS UNIQUE CONSTRAINT*/

ALTER TABLE CUSTOMERS

DROP CONSTRAINT EMAIL_UNIQUE;

ALTER TABLE CUSTOMERS

ADD CONSTRAINT EMAIL_UNIQUE UNIQUE (EMAIL);

INSERT INTO CUSTOMERS (EMAIL, FIRST_NAME, LAST_NAME)

VALUES ('[email protected]', 'RAMD', 'DZAKY');

INSERT INTO CUSTOMERS (EMAIL, FIRST_NAME, LAST_NAME)

VALUES ('[email protected]', 'NNA', 'HIKI');

SELECT * FROM CUSTOMERS; /* KNP IDNYA 3? KRN UDAH DIPAKE SLOTNYA SAMA DATA YANG
DUPLIKAT*/
/* CHECK CONSTRAINT, */

/* CONTOH CHECK CONSTRAINT, JIKA ADA KONDISI DILUAR DARI YANG DITETAPKAN CONSRAINT
CHECK, MAKA VALUENYA KAN DITOLAK*/

/*CREATE TABLE products (

id VARCHAR(10) NOT NULL,

name VARCHAR(100) NOT NULL,

descriptions TEXT,

price INT UNSIGNED NOT NULL,

quantity INT UNSIGNED NOT NULL DEFAULT 0,

created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (ID),

CONSTRAINT PRICE_CHECK CHECK (PRICE >= 1000),

) ENGINE = InnoDB;*/

/* VERSI ALTER TABLE NYA*/

ALTER TABLE PRODUCTS

ADD CONSTRAINT PRICE_CHECK CHECK (PRICE >= 1000);

ALTER TABLE PRODUCTS

ADD CONSTRAINT PRICE_CHECK CHECK (PRICE >= 1000 AND PRICE <= 9000); /* RENTANG VALUE
YANG INGIN DI CONSTRAINKAN */

ALTER TABLE PRODUCTS

DROP CONSTRAINT PRICE_CHECK;

/* CONSTRAINT JUGA MENOLAK UPDATE VALUE DATA YANG UDAH ADA*/

SHOW CREATE TABLE PRODUCTS;

/* INDEX */

/* 1. (DEFINISI)
- Secara default, MySQL akan menyimpan data di dalam disk seperti tabel biasanya

- Hal ini menyebabkan, ketika kita mencari data, maka MySQL akan melakukan pencarian dari baris
pertama sampai terakhir, yang artinya semakin banyak datanya, maka akan semakin lambat proses
pencarian datanya

- Saat kita membuat index, MySQL akan menyimpan data dalam struktur data B-Tree :
https://en.wikipedia.org/wiki/B-tree

- Tidak hanya akan mempermudah kita saat melakukan pencarian, index juga akan mempermudah
kita ketika melakukan pengurutan menggunakan ORDER BY

- https://dev.mysql.com/doc/refman/8.0/en/optimization-indexes.html

2. (CARA KERJA INDEX)

- Kita bisa membuat lebih dari satu index di table, dan setiap kita membuat index, kita bisa membuat
index untuk beberapa kolom sekaligus

- Misal kita membuat index

- (col1, col2, col3)


- Artinya kita punya kemampuan untuk mencari lebih menggunakan index untuk kombinasi query di
(col1), (col1, col2) dan (col1, col2, col3)

3. (Efek Samping Membuat Index)

- Index mungkin akan mempercepat untuk proses pencarian dan query data

- Namun, saat kita membuat index, artinya MySQL akan melakukan proses update data di index tiap
kali kita menambah, mengubah atau menghapus data di table

- Artinya Index membuat proses pencarian dan query lebih cepat, tapi memperlambat proses
manipulasi data

- Oleh karena itu, kita harus bijak saat membuat index

4. (Tidak Perlu Index)

- Saat kita membuat PRIMARY KEY dan UNIQUE constraint, kita tidak perlu menambahkan lagi index

- Hal ini dikarenakan MySQL secara otomatis akan menambahkan index pada kolom PRIMARY KEY
dan UNIQUE constraint*/
/* TABLE DENGAN INDEX*/

CREATE TABLE SELLERS(

ID INT NOT NULL AUTO_INCREMENT,

NAME VARCHAR (100) ,

NAME2 VARCHAR (100) ,

NAME3 VARCHAR (100) ,

EMAIL VARCHAR (100) NOT NULL ,

PRIMARY KEY (ID),

UNIQUE KEY EMAIL_UNIQUE (EMAIL),

INDEX NAME1_NAME2_NAME3_INDEX (NAME, NAME2, NAME3)

) ENGINE = InnoDB;

DESC SELLERS;

SHOW CREATE TABLE SELLERS;

SELECT * FROM SELLERS WHERE NAME = 'X';

/* JANGAN NAMBAHIN INDEX KALO DATANYA UDAH BANYAK*/

/* ALTER TABLE INDEX*/

ALTER TABLE SELLERS

ADD INDEX NAME_INDEX (NAME);

ALTER TABLE SELLERS

DROP INDEX NAME_INDEX;

/* FULL TEXT SEARCH ---------------------------------------------------*/

/* OPERATOR LIKE LAMA*/

CREATE TABLE products (

id VARCHAR(10) NOT NULL,

name VARCHAR(100) NOT NULL,


descriptions TEXT,

price INT UNSIGNED NOT NULL,

quantity INT UNSIGNED NOT NULL DEFAULT 0,

created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (ID),

FULLTEXT PRODUCT_SEARCH (NAME, DESCRIPTIONS)

) ENGINE = InnoDB;

ALTER TABLE PRODUCTS

ADD FULLTEXT PRODUCT_SEARCH (NAME, DESCRIPTIONS);

ALTER TABLE PRODUCTS

DROP INDEX PRODUCT_SEARCH;

SHOW CREATE TABLE PRODUCTS;

/* NATRURAL LANGUANGE MODE (FULL TEXT) INI YANG PALING AKURAT*/

SELECT * FROM PRODUCTS

WHERE MATCH (NAME, DESCRIPTIONS)

AGAINST('AYAM' IN NATURAL LANGUAGE MODE);

/* BOOLEAN MODE(FULL TEXT)*/

/* MAU ADA KATA MIE TAPI GAMAU ADA KATA BAKSO*/

/* BISA NGECUALIIN DATA*/

SELECT * FROM PRODUCTS

WHERE MATCH (NAME, DESCRIPTIONS)

AGAINST('+MIE -BAKSO' IN BOOLEAN MODE);

/* EXPANSION MODE(FULL TEXT)*/

SELECT * FROM PRODUCTS

WHERE MATCH (NAME, DESCRIPTIONS)


AGAINST('BAKSO' WITH QUERY EXPANSION);

/* RELASI TABEL*/

/* FOREIGN KEY*/

/* FOREIGN KEY BISA LEBIH DARI 1*/

/* TIPE KOLOM FOREIGN KEY HARUS SAMA DENGAN PRIMARY KEY DI TABEL UTAMA*/

/* FK : FOREIGN KEY*/

CREATE TABLE WISHLIST(

ID INT NOT NULL AUTO_INCREMENT,

ID_PRODUCT VARCHAR(10) NOT NULL,

DESCRIPTIONS TEXT,

PRIMARY KEY (ID),

CONSTRAINT FK_WISHLIST_PRODUCT

FOREIGN KEY (ID_PRODUCT) REFERENCES PRODUCTS (ID)

) ENGINE = InnoDB;

/* REFERENCES ITU TABEL LAIN YAITU TABEL PRODUCTS MEREFRENSIKAN KE TABEL PRODUCTS*/

DESC PRODUCTS;

DESC WISHLIST;

/* ALTER TABLENYA*/

ALTER TABLE WISHLIST

DROP CONSTRAINT FK_WISHLIST_PRODUCT;

ALTER TABLE WISHLIST

ADD CONSTRAINT FK_WISHLIST_PRODUCT

FOREIGN KEY (ID_PRODUCT) REFERENCES PRODUCTS (ID);

/* KALO NAMBAHIN DATA KE TABLE WISHLIST JIKA TERNYATA DATA PRODUKNYA TIDAK ADA ID NYA

MAKA DIA AKAN ERROR/DITOLAK(MUNGKIN KRN ADA CONSTRAINTNYA TP GTAU COBA RISET
LAGI*/
/* KEUNTUNGAN FOREIGN KEY */

/* - Foreign key memastikan bahwa data yang kita masukkan ke kolom tersebut harus tersedia di
tabel reference nya

- Selain itu saat kita menghapus data di tabel reference, MySQL akan mengecek apakah id nya
digunakan di foreign key di tabel lain, jika digunakan, maka secara otomatis MySQL akan menolak
proses delete data di tabel reference tersebut

*/

/* KETIKA MENGHAPUS TABEL YANG BERELASI MAKA SECARA OTOMATIS MYSQL AKAN MENOLAK*/

INSERT INTO WISHLIST(ID_PRODUCT, DESCRIPTIONS)

VALUES ('P001', 'MAKANAN KESUKAAN');

INSERT INTO WISHLIST(ID_PRODUCT, DESCRIPTIONS)

VALUES ('SALAH', 'MAKANAN KESUKAAN');

/* RESTRICT DELETE DAN UPDATE DI TOLAK

Tidak boleh menghapus atau mengubah baris di tabel induk (parent table) jika masih ada baris yang
merujuk ke sana di tabel anak (child table).

DEFAULTNYA ADALAH RESTRICT---

*/

DELETE FROM PRODUCTS WHERE ID = 'P001';

/* MENGUBAH BEHAVIOR MENGHAPUS RELASI*/

ALTER TABLE WISHLIST

ADD CONSTRAINT FK_WISHLIST_PRODUCT

FOREIGN KEY (ID_PRODUCT) REFERENCES PRODUCTS (ID)

ON DELETE CASCADE ON UPDATE CASCADE;

/* RISET LAGI DI WORD UDAH ADA BERBAGAI MACAM MODE NYA-----------*/

/* CASCADE UPDATE DAN DELETE DIRERIMA--*/

SHOW CREATE TABLE WISHLIST;


/* JOIN ---------*/

SELECT * FROM WISHLIST

JOIN PRODUCTS ON (WISHLIST.ID_PRODUCT = PRODUCTS.ID);

SELECT WISHLIST.ID, PRODUCTS.ID, PRODUCTS.NAME, WISHLIST.DESCRIPTIONS

FROM WISHLIST

JOIN PRODUCTS ON (PRODUCTS.ID = WISHLIST.ID_PRODUCT);

SELECT W.ID, P.ID, P.NAME, W.DESCRIPTIONS

FROM WISHLIST AS W

JOIN PRODUCTS AS P ON (P.ID = W.ID_PRODUCT);

SELECT

W.ID AS ID_WISHLIST,

P.ID AS ID_PRODUCT,

P.NAME AS PRODUCT_NAME,

W.DESCRIPTIONS AS WISHLIST_DESCRIPTIONS

FROM WISHLIST AS W

JOIN PRODUCTS AS P ON (P.ID = W.ID_PRODUCT);

DESC WISHLIST;

DESC CUSTOMERS;

ALTER TABLE WISHLIST

ADD COLUMN ID_CUSTOMER INT;

ALTER TABLE WISHLIST

ADD CONSTRAINT FK_WISHLIST_CUSTOMER

FOREIGN KEY (ID_CUSTOMER) REFERENCES CUSTOMERS (ID);


UPDATE WISHLIST

SET ID_CUSTOMER = 1

WHERE ID = 1;

SELECT * FROM WISHLIST;

/* JOIN MULTIPLE TABLE ------------------------------*/

SELECT CUSTOMERS.EMAIL, PRODUCTS.ID, PRODUCTS.NAME, WISHLIST.DESCRIPTIONS

FROM WISHLIST

JOIN PRODUCTS ON (PRODUCTS.ID = WISHLIST.ID_PRODUCT)

JOIN CUSTOMERS ON (CUSTOMERS.ID = WISHLIST.ID_CUSTOMER);

/* JOIN BISA DITAMBAHIN WHERE ---------*/

/* VERSI ALIAS NYA*/

SELECT C.EMAIL, P.ID AS PRODUCT_ID, P.NAME AS PRODUCT_NAME, W.DESCRIPTIONS AS


DESKRIPSI_WISHLIST

FROM WISHLIST AS W

JOIN PRODUCTS AS P ON (P.ID = W.ID_PRODUCT)

JOIN CUSTOMERS AS C ON (C.ID = W.ID_CUSTOMER);

SHOW CREATE TABLE WISHLIST;

SHOW CREATE TABLE CUSTOMERS;

/* ONE TO ONE RELATIONSHIPM----------------------*/

/* JADI ONE TO ONE ITU DATANYA HANYA 1 UNIQUE GABOLEH DUPLIKAT*/

/* ONE TO MANY DI DEFINISIKAN BERDASARKAN ID DATA DUPLIKAT ATAU ENGGA, KLAU BISA
DUPLIKAT IDNYA

MAKA DISEBUT MANY*/

CREATE TABLE WALLET (

ID INT NOT NULL AUTO_INCREMENT,

ID_CUSTOMER INT NOT NULL,

BALANCE INT NOT NULL DEFAULT 0,


PRIMARY KEY (ID),

UNIQUE KEY ID_CUSTOMER_UNIQUE (ID_CUSTOMER),

CONSTRAINT FK_WALLET_CUSTOMER

FOREIGN KEY (ID_CUSTOMER) REFERENCES CUSTOMERS (ID)

) ENGINE = InnoDB;

/* FK ITU NAMA DARI FUNCTION FOREIGN KEY, ID CUSTOMER UNIQUE JUGA NAMA FUNCTION

DIBERI NAMA SUPAYA FUNCTION ITU BISA DI ALTER TABLE*/

SHOW CREATE TABLE CUSTOMERS;

DESC WALLET;

SELECT * FROM CUSTOMERS;

SELECT * FROM WALLET;

INSERT INTO WALLET (ID_CUSTOMER)

VALUES (1), (3);

/* ONE TO ONE RALATIONSHIP IMPLEMENTATION*/

SELECT CUSTOMERS.EMAIL, WALLET.BALANCE

FROM WALLET

JOIN CUSTOMERS ON (CUSTOMERS.ID = WALLET.ID_CUSTOMER);

/* FORIGN KEY YANG MENJADI FROM JOINYA*/

/* ONE TO MANY RELATIONSHIP ---------------------------------------------------*/

/*ANALOGI ONE CATEGORY TO MANY PRODUCT(BANYAK)*/

/* TABLE ONE-NYA-----------------*/

CREATE TABLE CATEGORIES (

ID VARCHAR(10) NOT NULL,

NAME VARCHAR (100) NOT NULL,

PRIMARY KEY (ID)

) ENGINE = InnoDB;

DESC CATEGORIES;
ALTER TABLE PRODUCTS

DROP COLUMN CATEGORY;

ALTER TABLE PRODUCTS

ADD COLUMN ID_CATEGORY VARCHAR(10);

ALTER TABLE PRODUCTS

ADD CONSTRAINT FK_PRODUCTS_CATEGORIES

FOREIGN KEY (ID_CATEGORY) REFERENCES CATEGORIES (ID);

SHOW CREATE TABLE CATEGORIES;

SHOW CREATE TABLE PRODUCTS;

SELECT * FROM PRODUCTS;

SELECT * FROM CATEGORIES;

/* TABEL PRODUCTS MERUPAKAN TABLE MANY ---------------------- */

/* TABEL MANY : TABEL YANG BISA BERTAMBAH TRUS DGN KODE unik YG SAMA

TABEL ONE : TABEL YANG MEMILIKI DATA 1 KODE UNIK AJA*/

INSERT INTO CATEGORIES (ID, NAME)

VALUES ('C001','MAKANAN'),

('C002','MINUMAN'),

('C003','LAIN-LAIN');

SELECT * FROM CATEGORIES;

SELECT * FROM PRODUCTS;

UPDATE PRODUCTS

SET ID_CATEGORY = 'C001'

WHERE ID IN ('P001', 'P0016', 'P002','P003', 'P004', 'P005','P006','P007', 'P008', 'P009');


UPDATE PRODUCTS

SET ID_CATEGORY = 'C002'

WHERE ID IN ('P0011', 'P0012', 'P0013');

UPDATE PRODUCTS

SET ID_CATEGORY = 'C003'

WHERE ID IN ('P0010', 'P0014', 'P0015');

SHOW CREATE TABLE PRODUCTS;

/* ONE TO MANY IMPLEMENTATION--------------------*/

SELECT PRODUCTS.ID, PRODUCTS.NAME, CATEGORIES.NAME

FROM PRODUCTS

JOIN CATEGORIES ON (CATEGORIES.ID = PRODUCTS.ID_CATEGORY);

/* JOIN ATAS BAWAH KYAKNYA GAADA BEDANYA ---------------------------*/

SELECT PRODUCTS.ID, PRODUCTS.NAME, CATEGORIES.NAME

FROM CATEGORIES

JOIN PRODUCTS ON (PRODUCTS.ID_CATEGORY = CATEGORIES.ID);

/* MANY TO MANY RELATIONSHIP -----------------*/

/* BUAT TABEL LAGI DI TENGAHNYA, TABEL RELATIONSHIP UNTK MENGHUBUNGKAN*/

/* TABEL PRODUCT - TABEL RELASI - TABEL ORDER*/

/* MANY TO MANY SEBENERNYA ADALAH ONE TO MANY 2 KALI

TABEL PRODUCT ONE TO MANY TABEL RELATIONSHIP

TABEL ORDER ONE TO MANY RELATIONSHIP */

CREATE TABLE ORDERS (

ID INT NOT NULL AUTO_INCREMENT,

TOTAL INT NOT NULL,

ORDERS_DATE DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (ID)


) ENGINE = InnoDB;

DESC ORDERS;

SELECT * FROM ORDERS;

/* NAH DIBAWAH INI MERUPAKAN TABEL RELASINYA, PENGHUBUNGNYA

PRIMARY KEYNYA ADA 2*/

CREATE TABLE ORDERS_DETAIL (

ID_PRODUCT VARCHAR(10) NOT NULL,

ID_ORDER INT NOT NULL,

PRICE INT NOT NULL,

QUANTITY INT NOT NULL,

PRIMARY KEY (ID_PRODUCT, ID_ORDER)

) ENGINE = InnoDB;

/* harus pake primary key mencegah duplikasi*/

SELECT * FROM ORDERS_DETAIL;

DESC ORDERS_DETAIL;

SHOW CREATE TABLE ORDERS_DETAIL;

/* SETELAH ITU TAMBAHIN 2 FOREIGN KEY ID PRODUCT DAN ID ORDER

DI TABEL ORDERS DETAIL*/

ALTER TABLE ORDERS_DETAIL

ADD CONSTRAINT FK_ORDERS_DETAIL_PRODUCT

FOREIGN KEY (ID_PRODUCT) REFERENCES PRODUCTS (ID);

ALTER TABLE ORDERS_DETAIL

ADD CONSTRAINT FK_ORDERS_DETAIL_ORDERS

FOREIGN KEY (ID_ORDER) REFERENCES ORDERS (ID);

SELECT * FROM ORDERS;


SELECT * FROM ORDERS;

INSERT INTO ORDERS (TOTAL)

VALUES (50000); /* KENAPA 50000 ADA 3, KARNA INSERT INTONYA DI EXCUTE 3 KALI*/

/* INSERT TABLE RELATIONSHIP-----*/

INSERT INTO ORDERS_DETAIL (ID_PRODUCT, ID_ORDER, PRICE, QUANTITY)

VALUES ('P001', 1, 25000, 1),

('P002', 1, 25000, 1);

INSERT INTO ORDERS_DETAIL (ID_PRODUCT, ID_ORDER, PRICE, QUANTITY)

VALUES ('P003', 2, 25000, 1),

('P004', 3, 25000, 1);

INSERT INTO ORDERS_DETAIL (ID_PRODUCT, ID_ORDER, PRICE, QUANTITY)

VALUES ('P001', 2, 25000, 1),

('P003', 3, 25000, 1);

use ramdzy;

SELECT*FROM ORDERS_DETAIL;

/* MANY TO MANY RELATIONSHIP IMPLEMENTATION --------------*/

SELECT * FROM ORDERS

JOIN ORDERS_DETAIL ON (ORDERS_DETAIL.ID_ORDER = ORDERS.ID)

JOIN PRODUCTS ON (PRODUCTS.ID = ORDERS_DETAIL.ID_PRODUCT);

SELECT * FROM ORDERS_DETAIL

JOIN ORDERS ON (ORDERS.ID = ORDERS_DETAIL.ID_ORDER)

JOIN PRODUCTS ON (PRODUCTS.ID = ORDERS_DETAIL.ID_PRODUCT);

SELECT ORDERS.ID, PRODUCTS.ID, PRODUCTS.NAME, ORDERS_DETAIL.QUANTITY,


ORDERS_DETAIL.PRICE
FROM ORDERS

JOIN ORDERS_DETAIL ON (ORDERS_DETAIL.ID_ORDER = ORDERS.ID)

JOIN PRODUCTS ON (PRODUCTS.ID = ORDERS_DETAIL.ID_PRODUCT);

/* INNER JOIN------------------*/

/* data dummy--*/

INSERT INTO CATEGORIES (ID, NAME)

VALUES ('C004','Oleh-oleh'),

('C005','Gadget');

INSERT INTO products(id, name, price, quantity)

VALUES ('X001', 'X SATU', 15000, 100),

('X002', 'X SATU', 20000, 100),

('X003', 'X SATU', 20000, 100);

SELECT * FROM CATEGORIES

INNER JOIN PRODUCTS ON (PRODUCTS.ID_CATEGORY = CATEGORIES.ID);

SHOW CREATE TABLE CATEGORIES;

/* DEFAULT NYA ADALAH INNER---*/

/* LEFT JOIN -- ------*/

/* FROM ITU MERUPAKAN TABLE KIRI JADI CATEGORIES TABLE LEFT*/

SELECT * FROM CATEGORIES

LEFT JOIN PRODUCTS ON (PRODUCTS.ID_CATEGORY = CATEGORIES.ID);

/* RIGHTNYA TABEL PRODUCTS*/

SELECT * FROM CATEGORIES

RIGHT JOIN PRODUCTS ON (PRODUCTS.ID_CATEGORY = CATEGORIES.ID);

/* SUBQUERY WHERE -------*/

/* MENAMPILKAN PRICE DI ATAS RATA-RATA*/

SELECT * FROM PRODUCTS


WHERE PRICE > (SELECT AVG(PRICE) FROM PRODUCTS);

SELECT * FROM PRODUCTS;

/**/

UPDATE PRODUCTS

SET PRICE = 1000000

WHERE ID = 'X003';

/* SUBQUERY FROM ------------------------------------*/

/* SELETELAH QUERY FROM TAMBAHIN ALIAS = AS WAJIBBBB*/

/* PRODUK YANG TIDAK PUNYA KATEGORI(DI TABLE KATEGORI) MAKA TIDAK MASUK JOIN*/

/* MENAMPILKAN PRICE MAX(PRODUCTS) YANG PUNYA RELASI DENGAN DATA KATEGORI*/

/* AS CP : CATEGORI PRODUCT*/

SELECT MAX(CP.PRICE) FROM (SELECT PRICE FROM CATEGORIES

JOIN PRODUCTS ON (PRODUCTS.ID_CATEGORY = CATEGORIES.ID)) AS CP;

/* SET OPERATOR----------------------*/

CREATE TABLE GUESTBOOKS (

ID INT NOT NULL AUTO_INCREMENT,

EMAIL VARCHAR (100) NOT NULL,

TITLE VARCHAR (100) NOT NULL,

CONTENT TEXT,

PRIMARY KEY (ID)

) ENGINE = InnoDB;

INSERT INTO GUESTBOOKS(EMAIL, TITLE, CONTENT)

VALUES ('[email protected]', 'HELLO', 'HELLO'),


('[email protected]', 'HELLO', 'HELLO'),

('[email protected]', 'HELLO', 'HELLO'),

('[email protected]', 'HELLO', 'HELLO'),

('[email protected]', 'HELLO', 'HELLO'),

('[email protected]', 'HELLO', 'HELLO');

SELECT * FROM GUESTBOOKS;

/* SET OPERATOR-------------------------*/

/* UNION --------------------*/

/* UNION adalah operasi menggabungkan dua buah SELECT query,

dimana jika terdapat data yang duplikat,

data duplikatnya akan dihapus dari hasil query*/

SELECT DISTINCT EMAIL FROM CUSTOMERS

UNION

SELECT DISTINCT EMAIL FROM GUESTBOOKS;

/* KLO MISALNYA ADA DATA DUPLIKAT DI ANTARA 2 SELECT

MAKA QUERY MENAMPILKAN 1 DATA AJA*/

/* UNION ALL-----------------*/

/* UNION ALL adalah operasi yang sama dengan UNION,

namun data duplikat tetap akan ditampilkan di hasil query nya*/

SELECT DISTINCT EMAIL FROM CUSTOMERS

UNION ALL

SELECT DISTINCT EMAIL FROM GUESTBOOKS;

/* HANYA MENAMPILKAN 2 DATA DUPLIKAT MASING2 TABLE MEWAKILI 1 DATA DUPLIKAT*/

/* KALO MAU NAMPILIN SEMUA DATA DUPLKAT, MAKA DISTINCNYA DIHAPUS---*/

/* duplikat EKO*/

/* NO DISTINCT*/
SELECT EMAIL FROM CUSTOMERS

UNION ALL

SELECT EMAIL FROM GUESTBOOKS;

/* PENGEN TAU BERAPA BANYAK EMAIL, EMAILNYA APA AJA

DAN DIA BERAPA BANYAK MUNCULNYA */

SELECT EMAILS.EMAIL, COUNT(EMAILS.EMAIL) FROM

(SELECT EMAIL FROM CUSTOMERS

UNION ALL

SELECT EMAIL FROM GUESTBOOKS) AS EMAILS

GROUP BY EMAILS.EMAIL;

/* INTERSECT---------------------*/

/*

- INTERSECT adalah operasi menggabungkan dua query, namun yang diambil hanya data yang
terdapat pada hasil query pertama dan query kedua

- Data yang tidak hanya ada di salah satu query, akan dihapus di hasil operasi INTERSECT

- Data nya muncul tidak dalam keadaan duplikat

- Sayangnya, MySQL tidak memiliki operator INTERSECT, dengan demikian untuk melakukan operasi
INTERSECT, kita harus lakukan secara manual menggunakan JOIN atau SUBQUERY

*/

/* MENGAMBIL DATA YANG BERRELASI*/

/* MENGAMBIL EMAIL CUSTOMERS YANG ADA DI GUESTBOOKS---------*/

/* VERSI SUB QUERY--*/

SELECT DISTINCT EMAIL FROM CUSTOMERS

WHERE EMAIL IN (SELECT DISTINCT EMAIL FROM GUESTBOOKS);

/* INTERSECT HARUS DISTINCT*/

/* VERSI JOIN--*/

SELECT DISTINCT CUSTOMERS.EMAIL FROM CUSTOMERS

INNER JOIN GUESTBOOKS ON (GUESTBOOKS.EMAIL = CUSTOMERS.EMAIL);


SELECT * FROM GUESTBOOKS;

SELECT * FROM CUSTOMERS;

INSERT INTO CUSTOMERS (EMAIL, FIRST_NAME, LAST_NAME)

VALUES ('[email protected]', 'EKO', 'CANEDY');

/* MINUS ------------------*/

/*

- MINUS adalah operasi dimana query pertama akan dihilangkan oleh query kedua

- Artinya jika ada data di query pertama yang sama dengan data yang ada di query kedua,

maka data tersebut akan dihapus dari hasil query MINUS

- Sayang nya, di MySQL juga tidak ada operator MINUS, namun hal ini bisa kita lakukan menggunakan
JOIN

*/

/* MENGAMBIL EMAIL CUSTOMERS YANG GAADA DI GUESTBOOKS------*/

SELECT DISTINCT CUSTOMERS.EMAIL, GUESTBOOKS.EMAIL FROM CUSTOMERS

LEFT JOIN GUESTBOOKS ON (GUESTBOOKS.EMAIL = CUSTOMERS.EMAIL)

WHERE GUESTBOOKS.EMAIL IS NULL;

/* DATABASE TRANSACTION -----------------*/

/*

Database transaction adalah fitur di DBMS dimana kita bisa memungkinan beberapa perintah
dianggap menjadi sebuah kesatuan perintah yang kita sebut transaction

Jika terdapat satu saja proses gagal di transaction, maka secara otomatis perintah-perintah
sebelumnya akan dibatalkan

Jika sebuah transaction sukses, maka semua perintah akan dipastikan sukses

*/

/*

HANYA BISA DIGUNAKAN UNTUK PERINTAH DML (DATA MANIPULATION LANGUAGE)

(INSERT, UPDATE, DELETE)

*/
/*

START TRANSACTION : MEMULAI PROSES

ROLLBACK : Membatalkan secara permanen seluruh proses transaksi

COMMIT : MENYIMPAN SECARA permanen seluruh proses transaksi

*/

START TRANSACTION;

ROLLBACK;

COMMIT;

/* LOCKING ----------------------------------------*/

/*

- Locking adalah proses mengunci data di DBMS


- Proses mengunci data sangat penting dilakukan, salah satunya agar data benar-benar terjamin
konsistensinya

- Karena pada kenyataannya, aplikasi yang akan kita buat pasti digunakan oleh banyak pengguna, dan
banyak pengguna tersebut bisa saja akan mengakses data yang sama, jika tidak ada proses locking,
bisa dipastikan akan terjadi RACE CONDITION, yaitu proses balapan ketika mengubah data yang sama

- Contoh saja, ketika kita belanja di toko online, kita akan balapan membeli barang yang sama, jika
data tidak terjaga, bisa jadi kita salah mengupdate stock karena pada saat yang bersamaan banyak
yang melakukan perubahan stock barang

- Saat kita melakukan proses TRANSACTION, lalu kita melakukan prose perubahan data, data yang
kita ubah tersebut akan secara otomatis di LOCK

- Hal ini membuat proses TRANSACTION sangat aman

- Oleh karena itu, sangat disarankan untuk selalu menggunakan fitur TRANSACTION ketika
memanipulasi data di database, terutama ketika perintah manipulasinya lebih dari satu kali

- Locking ini akan membuat sebuah proses perubahan yang dilakukan oleh pihak lain akan diminta
untuk menunggu

- Data akan di lock sampai kita melakukan COMMIT atau ROLLBACK transaksi tersebut

- Selain secara otomatis, kadang saat kita membuat aplikasi, kita juga sering melakukan SELECT query
terlebih dahulu sebelum melakukan proses UPDATE misalnya.
- Jika kita ingin melakukan locking sebuah data secara manual, kita bisa tambahkan perintah FOR
UPDATE di belakang query SELECT

- Saat kita lock record yang kita select, maka jika ada proses lain akan melakukan UPDATE, DELETE
atau SELECT FOR UPDATE lagi, maka proses lain diminta menunggu sampai kita selesai melakukan
COMMIT atau ROLLBACK transaction

*/

/*

LOCKING OTOMATIS PAKE STAR TRANSACTION - COMMIT - ROLLBACK

*/

/*LOCKING RECORD MANUAL----------*/

/*

- Selain secara otomatis, kadang saat kita membuat aplikasi, kita juga sering melakukan SELECT query
terlebih dahulu sebelum melakukan proses UPDATE misalnya.

- Jika kita ingin melakukan locking sebuah data secara manual, kita bisa tambahkan perintah FOR
UPDATE di belakang query SELECT

- Saat kita lock record yang kita select, maka jika ada proses lain akan melakukan UPDATE, DELETE
atau SELECT FOR UPDATE lagi, maka proses lain diminta menunggu sampai kita selesai melakukan
COMMIT atau ROLLBACK transaction

*/

/* SIMULASINYA*/

/* FOR UPDATE-------------*/

SELECT * FROM PRODUCTS WHERE ID = 'P001' FOR UPDATE;

UPDATE PRODUCTS

SET QUANTITY = QUANTITY - 10

WHERE ID = 'P001';

/* STELAH SELESAI DI COMMIT*/

COMMIT;

/* DEADLOCK*/

/*
- Saat kita terlalu banyak melakukan proses Locking, hati-hati akan masalah yang bisa terjadi, yaitu
DEADLOCK

- Deadlock adalah situasi ada 2 proses yang saling menunggu satu sama lain, namun data yang
ditunggu dua-duanya di lock oleh proses lainnya, sehingga proses menunggunya ini tidak akan
pernah selesai.

*/

/*

- Proses 1 melakukan SELECT FOR UPDATE untuk data 001

- Proses 2 melakukan SELECT FOR UPDATE untuk data 002


- Proses 1 melakukan SELECT FOR UPDATE untuk data 002, diminta menunggu karena di lock oleh
Proses 2

- Proses 2 melakukan SELECT FOR UPDATE untuk data 001, diminta menunggu karena di lock oleh
Proses 1

- Akhirnya Proses 1 dan Proses 2 saling menunggu

- Deadlock terjadi

*/

/* LOCKING TABLE ---------------------*/

/*

- MySQL mendukung proses locking terhadap sebuah tabel

- Jika kita me lock table, artinya satu seluruh data di tabel tersebut akan di lock

- Ada 2 jenis lock table, yaitu READ dan WRITE

- Cara melakukan locking table adalah dengan perintah

- LOCK TABLES nama_table READ;

- LOCK TABLES nama_Table WRITE

- Setelah selesai melakukan lock table, kita bisa melakukan unlock dengan perintah : UNLOCK
TABLES;

*/

/*

READ : SI PEMBBUAT HANYA BISA MELAKUKAN READ, USER LAIN HANYA BISA READ

WRITE : SI PEMBUAT BISA MELAKUKAN READ & WRITE, USER LAIN TIDAK BISA READ DAN WRITE

*/
/* SIMULASI*/

LOCK TABLES PRODUCTS READ;

LOCK TABLES PRODUCTS WRITE;

UNLOCK TABLES; /* PEMBUKAAN TABLE YANG DI LOCK*/

/*LOCKING INSTANCE ---------------*/

/* KHUSUS DDL --*/

/*

- Salah satu fitur lock lainnya di MySQL adalah lock instance

- Lock instance adalah perintah locking yang akan membuat perintah DDL (data definition language)
akan diminta menunggu sampai proses unlock instance

- Biasanya proses locking instance ini terjadi ketika misal kita ingin melakukan backup data, agar tidak
terjadi perubahan terhadap struktur tabel misalnya, kita bisa melakukan locking instance

- Setelah proses backup selesai, baru kita unlock lagi instance nya

- Untuk melakukan locking instance, kita bisa gunakan perintah :

- LOCK INSTANCE FOR BACKUP;

- Untuk melakukan unlock instance, kita bisa gunakan perintah :

- UNLOCK INSTANCE;

*/

/* SIMULASI*/

LOCK INSTANCE FOR BACKUP;

UNLOCK INSTANCE; /* PROSES PEMBUKAAN*/

/* USER MANAGEMENT --------------------------------------*/

/* MEMBUAT DAN MENGHAPUS USER-------*/

CREATE USER 'EKO'@'LOCALHOST';

CREATE USER 'KHANNEDY'@'%'; /* (%) : BOLEH MENGAKSES DARI MANAPUN, TDK DI


REKOMENDASIKAN, BISA DI HACK*/
DROP USER 'EKO'@'LOCALHOST';

DROP USER 'KHANNEDY'@'%';

/* MENAMBAH HAK AKSES USER------*/

GRANT SELECT ON RAMDZY.* TO 'EKO'@'LOCALHOST';

GRANT SELECT, INSERT, UPDATE, DELETE ON RAMDZY.* TO 'KHANNEDY'@'%';

/* TITIK BINTANG (.*) ARTINYA SELURUH TABLE*/

/* JIKA MAU LIHAT USER INI MEMILIKI HAK AKSES APA AJA*/

SHOW GRANTS FOR 'EKO'@'LOCALHOST';

SHOW GRANTS FOR 'KHANNEDY'@'%';

/* MENGHAPUS HAK AKSES----------*/

REVOKE SELECT ON RAMDZY.* FROM 'EKO'@'LOCALHOST';

REVOKE SELECT, INSERT, UPDATE, DELETE ON RAMDZY.* FROM 'KHANNEDY'@'%';

/* MENGUBAH PASSWORD UNTUK USER*/

SET PASSWORD FOR 'EKO'@'LOCALHOST' = 'RAHASIA';

SET PASSWORD FOR 'KHANNEDY'@'%' = 'RAHASIA';

/* MASUK USER ke CMD -----------------------------

(HURUF KECIL SEMUA)

- mysql -ueko -p

- mysql -ukhannedy -p

- clear

- exit

*/

/* BACKUP DATABASE ----------------*/

/*mysqldump ramdzy --user root --password --result-file/Users/ramdzaky/Desktop/Ramdzy*/


/* RESTORE -------------------*/

/* RESEARCHH*/

use ramdzy;

You might also like