Anda di halaman 1dari 25

Modul Kuliah

Pemrograman Web

Oleh :
dwi sakethi

pengrajin sistem informasi

0816-403-432 atau 0811-725-1106

dwijim@fmipunila.ac.id

www.dwijim.wordpress.com

tulisan niki dipun serat ngangge LATEX

mBandar Lampung

2019
Daftar Isi

1 Basis Data 1
1.1 Kesiapan Perangkat Lunak . . . . . . . . . . . . . . . . . . . . . 1
1.2 Akses ke Perangkat Lunak . . . . . . . . . . . . . . . . . . . . . 2
1.3 MariaDB Di GNU Linux . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Penentuan Tipe dan Ukuran Field . . . . . . . . . . . . . . . . 4
1.5 Field NPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6 Sistem Pengkodean . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.7 Contoh Kasus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.8 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

i
ii DAFTAR ISI
Daftar Tabel

iii
iv DAFTAR TABEL
Daftar Gambar

1.1 Masalah Primary Key . . . . . . . . . . . . . . . . . . . . . . . 5

v
Bab 1

Basis Data

1.1 Kesiapan Perangkat Lunak


Untuk pengoperasian basis data ini, digunakan perangkat lunak jenis Database
Server, dalam hal ini akan digunakan MariaDb. Untuk meyakinkan, sebaik-
nya diperiksa apakah perangkat lunak MariaDb sudah siap untuk digunakan
atau tidak. Caranya? Pada Debian GNU Linux dapat menggunakan perintah
nmap.

dwijim@pinguin:~/source$ nmap localhost

Starting Nmap 7.40 ( https://nmap.org ) at 2019-09-12 11:08 WIB


Nmap scan report for localhost (127.0.0.1)
Host is up (0.00015s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 994 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
631/tcp open ipp
3306/tcp open mysql

Nmap done: 1 IP address (1 host up) scanned in 0.52 seconds


dwijim@pinguin:~/source$

Layanan MariaDB sudah aktif dengan nomor port 3306.

1
2 BAB 1. BASIS DATA

Jika pemakai menggunakan MariaDB di Microsoft Windows dalam paketan


XAMPP, maka dipastikan bahwa tulisan MySQL sudah running.

1.2 Akses ke Perangkat Lunak


Akses ke perangkat MariaDB Database Server, ketika masih dalam proses
belajar-mengajar sebaiknya dilakukan menggunakan cara-cara yang primitif.
Dengan kata lain menggunakan aplikasi Console. Seperti pada tampilan beri-
kut

dwijim@katro:~$ mysql -u root -p


Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 455
Server version: 5.5.50-0+deb8u1 (Debian)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective
owners.

Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the current input statement.

mysql>
Sedangkan untuk akses pada sistem operasi Microsoft Windows, contohnya
seperti berikut:

Microsoft Windows XP [Version 5.1.2600]


(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\dwijim>cd\xampp\mysql\bin

C:\xampp\mysql\bin>mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.27 MySQL Community Server (GPL)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
1.3. MARIADB DI GNU LINUX 3

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective
owners.

Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the current input statement.

mysql>

1.3 MariaDB Di GNU Linux


Akses ke basis data pada database server MariaDB di GNU Linux, agak sedikit
berbeda pada sistem operasi Microsoft Windows. Pada versi MariaDB, basis
data dibuat dengan nama pemakai root, kemudian pemakai lain diberikan hak
akses pada basis data tersebut.
Pembuatan basis data dan pemberian hak akses, perintah-perintahnya ada-
lah:

1. mysql -u root -p
Akses ke database server dengan menggunakan nama pemakai root.

2. create database latihan;


Pemakai root membuat basis data dengan nama latihan.

3. grant all privileges on latihan.* to dwijim@localhost;


Pemakai root memberikan hak akses sepenuhnya untuk nama pemakai
dwijim terhadap basis data latihan.

4. flush privileges;
Menerapkan pengaturan hak akses.
Contohnya seperti berikut:

dwijim@debian:~$ su
Password:
root@debian:/home/dwijim# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1
4 BAB 1. BASIS DATA

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the current input statement.

MariaDB [(none)]> create database latihan;


Query OK, 1 row affected (0.02 sec)

MariaDB [(none)]> grant all privileges on latihan.* to dwijim@localhost;


Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;


Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>

1.4 Penentuan Tipe dan Ukuran Field


Tipe dan ukuran suatu field atau kolom pada suatu tabel ditentukan dengan
alasan-alasan yang rasional, bukan asal-asalan. Ada yang sudah tepat dan ada
juga yang masih terkesan sembarangan di dalam penentuan ini.
Contoh kasus dapat dilihat pada Gambar 1.1. Pada struktur tabel ini,
sudah terdapat kolom yang dapat menjadi primary key yaitu NPM. Lantas
mengapa membuat kolom id yang kemudian dijadikan primary key?
Demikian juga dengan penentuan ukuran kolom, yaitu kolom jurusan yang
memiliki ukuran 200 karakter dan ukuran password sebesar 100 karakter.
Pada contoh ini juga terlihat bahwa hampir sebagian besar kolom bertipe
varchar, apakah tidak ada yang ditentukan sebagai char. Kemudian apakah
NPM dengan tipe int(10) sudah tepat?
1.5. FIELD NPM 5

Gambar 1.1: Masalah Primary Key

1.5 Field NPM


Misalkan diambil contoh masalah pada suatu data mahasiswa. Mahasiswa
memiliki NPM 1617051444. Sedangkan nama mahasiswa misalnya Ahmad
Ijul. Kemudian jika dilihat pada struktur tabel untuk data mahasiswa ini:

mysql> desc mhs;


+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| npm | char(10) | NO | PRI | NULL | |
| nama_mhs | varchar(50) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

Ada beberapa pertanyaaan yang perlu pemikiran

1. Mengapa NPM tipenya char bukan int?

2. Mengapa NPM ukurannya 10?


6 BAB 1. BASIS DATA

3. Apakah NPM mesti not null atau boleh null?

4. Kolom nama mahasiswa mengapa varchar bukan char seperti NPM?

Pada kasus dengan obyek yang sama, namun struktur tabel seperti berikut:

mysql> use cektranskrip;


Database changed
mysql> desc tabel_transkrip;
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| no | int(3) | YES | | NULL | |
| npm | varchar(12) | YES | | NULL | |
| kopel | varchar(10) | YES | | NULL | |
| matkul | varchar(100) | YES | | NULL | |
| semester | varchar(4) | YES | | NULL | |
| sks | varchar(3) | YES | | NULL | |
| pengambilan | int(3) | YES | | NULL | |
| nilai | varchar(3) | YES | | NULL | |
+-------------+--------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

Pertanyaan-pertanyaan:

1. Pada tabel sebelumnya, ukuran dari NPM adalah 10, sedangkan di dalam
tabel ini, ukuran NPM adalah 12. Mana yang lebih tepat?

2. Kolom pengambilan int(3) apakah sudah tepat? Mengapa?

3. Mengapa nilai varchar(3) lebih cocok diganti menjadi nilai varchar(2)?

4. NPM biasanya menjadi primary key. Pada contoh tersebut npm var-
char(12), mengapa Null-nya bisa YES?

5. Mengapa di dalam tabel ini tidak terdapat primary key?

6. Untuk kolom no, apakah tipe dan ukurannya sudah tepat?

7. Mengapa di dalam tabel tabel transkrip ini tidak ada kolom untuk nama
mahasiswa?

8. Apakah tipe dan ukuran yang lebih tepat untuk semester varchar(4)?
1.6. SISTEM PENGKODEAN 7

9. Semester memiliki nilai seperti Semester 1, Semester 2, Semester 2 Pen-


dek, Semester 3, Semester 4, Semester 4 Pendek dan seterusnya sampai
dengan Semester 15. Bagaimana isi dari kolom semester?

1.6 Sistem Pengkodean


Perhatikan struktur dari tabel penduduk seperti pada potongan berikut:
8

+--------------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------+------+-----+---------+----------------+
| Nomor_Data | int(7) | NO | PRI | NULL | auto_increment |
| Nama_Lengkap | char(68) | NO | | - | |
| Jenis_Kelamin | enum(’L’,’P’) | NO | | NULL | |
| Tempat_Lahir | char(46) | NO | | - | |
| Tanggal_Lahir | date | NO | | NULL | |
| Alamat | varchar(123) | YES | | - | |
| RT | char(3) | YES | | - | |
| RW | char(3) | YES | | - | |
| Kecamatan | char(3) | YES | | - | |
| Kelurahan | int(5) | NO | | 0 | |
| Status_Marital | char(1) | YES | | NULL | |
| Suku | int(3) | YES | | 0 | |
| Tingkat_Pendidikan | tinyint(1) | YES | | 0 | |
| Program_Studi | int(4) | YES | | 0 | |
| Golongan_Darah | int(1) | YES | | 0 | |
| Telpon | char(23) | YES | | - | |
+--------------------+---------------+------+-----+---------+----------------+
BAB 1. BASIS DATA
1.7. CONTOH KASUS 9

Pertanyaan-pertanyaan:

1. Mengapa kolom Nomor Data menjadi primary key?

2. Jika suatu kolom memiliki sifat auto increment seperti Nomor Data mi-
salnya, apakah isinya ada kemungkinan seperti ini: 1, 2, 3, 4, 6.

3. Mengapa jenis kelamin diisi dengan L atau P bukan dengan Laki-Laki


atau Perempuan?

4. Suku berisi kode-kode suku yang ada di Indonesia. Tipe apa dan ukuran
berapa yang paling hemat tapi masih tetap dapat memenuhi kebutuhan
kode suku?

5. Untuk kolom Golongan Darah, tipe mana yang lebih tepat int(1) atau
char(1)?

6. Mengapa kolom Jenis Kelamin bersifat not null ?

Inti dari permasalah yang disampaikan di sini adalah bahwa penentuan tipe
dan ukuran dari suatu kolom hendaklah disesuaikan betul dengan kebutuhan
yang ada. Bukan dengan sembarangan.
Selain itu, isi dari suatu kolom (field ) juga harus diperhatikan. Kekeliruan
di dalam menentukan isi suatu kolom (field ) dapat menyebabkan kesalahan
pada sistem.
Untuk mengetahui ukuran suatu tabel perintah SQL-nya:

select table_name as "Nama Table",


round(((data_length+index_length)/1024/1024),2)
as Ukuran_MB from information_schema.tables where table_schema=’NamaDB’
order by Ukuran_MB desc;

1.7 Contoh Kasus


Berikut ini adalah contoh kasus tiga tabel yang diisi dengan data yang sama,
namun ketiganya memiliki tipe dan ukuran kolom (field ) yang berbeda.

<?php
/* -----------------------------------------
program untuk mengisi tabel dengan banyak
data, tujuannya untuk mengetahui efek dari
penentuan tipe data yang berbeda ...
10 BAB 1. BASIS DATA

dwi sakethi www.dwijim.wordpress.com


dwijim@fmipa.unila.ac.id

struktur basis data:

--
-- Database: ‘karakter‘
--

-- ------------------------------------------

--
-- Table structure for table ‘karakter10‘
--

CREATE TABLE IF NOT EXISTS ‘karakter10‘ (


‘kode‘ char(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ------------------------------------------

--
-- Table structure for table ‘karakter12‘
--

CREATE TABLE IF NOT EXISTS ‘karakter12‘ (


‘kode‘ char(12) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ------------------------------------------

--
-- Table structure for table ‘varchar12‘
--

CREATE TABLE IF NOT EXISTS ‘varchar12‘ (


‘kode‘ varchar(12) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

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

mysql_connect(’localhost’,’root’,’dwisakethi’);
1.7. CONTOH KASUS 11

// koneksi ke mysql database server

mysql_select_db(’karakter’);
// menentukan database yang digunakan

mysql_query("truncate table karakter10");


// menghapus isi tabel karakter10

mysql_query("truncate table karakter12");


// menghapus isi tabel karakter12

mysql_query("truncate table varchar12");


// menghapus isi tabel karakter12

/* -----------------------------------------
mengisi data dengan karakter angka
dari 1 sampai dengan 1500
----------------------------------------- */
for ($i=1;$i<=1500;$i++)
{
$kueri = "insert into karakter10 (kode)
values (’$i’)
";
// kueri untuk isi data ke tabel karakter10

mysql_query($kueri);
// menjalankan kueri

$kueri = "insert into karakter12(kode)


values (’$i’)
";
// kueri untuk isi data ke tabel karakter12

mysql_query($kueri);
// menjalankan kueri

$kueri = "insert into varchar12(kode)


values (’$i’)
";
// kueri untuk isi data ke tabel varchar12
12 BAB 1. BASIS DATA

mysql_query($kueri);
// menjalankan kueri

echo "$i-";
}

/* -----------------------------------------
data dan ukuran tabel setelah diisi data

select count(kode) from karakter10;


+-------------+
| count(kode) |
+-------------+
| 1500 |
+-------------+
1 row in set (0.01 sec)

select count(kode) from karakter12;


+-------------+
| count(kode) |
+-------------+
| 1500 |
+-------------+
1 row in set (0.01 sec)

select count(kode) from varchar12;


+-------------+
| count(kode) |
+-------------+
| 1500 |
+-------------+
1 row in set (0.01 sec)

select table_name as "Nama Table", data_length as Ukuran


from information_schema.tables where table_schema=’karakter’
order by Ukuran desc;
+------------+--------+
| Nama Table | Ukuran |
+------------+--------+
| karakter12 | 98304 |
| varchar12 | 81920 |
| karakter10 | 81920 |
1.8. SQL 13

+------------+--------+
3 rows in set (0.00 sec)

1.8 SQL
Untuk materi SQL ini, basis data yang digunakan bernama latihan dengan
beberapa tabel seperti:
14

+--------------------+--------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------------------------+------+-----+---------+----------------+
| Nomor_Data | int(7) | NO | PRI | NULL | auto_increment |
| ID_SIK | int(7) | YES | | 0 | |
| Nama_Lengkap | char(68) | NO | | - | |
| Jenis_Kelamin | enum(’L’,’P’) | NO | | NULL | |
| Tempat_Lahir | char(46) | NO | | - | |
| Tanggal_Lahir | date | NO | | NULL | |
| Alamat | varchar(123) | YES | | - | |
| RT | char(3) | YES | | - | |
| RW | char(3) | YES | | - | |
| Kecamatan | char(3) | YES | | - | |
| Kelurahan | int(5) | NO | | 0 | |
| Status_Marital | char(1) | YES | | NULL | |
| Suku | int(3) | YES | | 0 | |
| Tingkat_Pendidikan | tinyint(1) | YES | | 0 | |
| Program_Studi | int(4) | YES | | 0 | |
| Golongan_Darah | int(1) | YES | | 0 | |
| Telpon | char(23) | YES | | - | |
| Email | char(46) | YES | | - | |
| Kelas_Sekarang | enum(’Kelas 1’,’Kelas 2’, | YES | | NULL | |
| | ’Kelas 3’,’Kelas 4’,’Kelas 5’) | | | | |
+--------------------+--------------------------------+------+-----+---------+----------------+
BAB 1. BASIS DATA
1.8. SQL 15

1. Membuat tabel kode pekerjaan dengan stuktur seperti berikut:

+-----------------------+--------------+------+-----+---------+-----------
| Field | Type | Null | Key | Default | Extra
+-----------------------+--------------+------+-----+---------+-----------
| kode_bidang_pekerjaan | int(2) | NO | PRI | NULL | auto_incre
| nama_bidang_pekerjaan | varchar(127) | NO | | NULL |
+-----------------------+--------------+------+-----+---------+-----------

2. Membuat tabel kode suku dengan stuktur seperti berikut:

+------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| kode | int(3) | NO | PRI | NULL | |
| keterangan | char(27) | NO | | NULL | |
+------------+----------+------+-----+---------+-------+

3. Mengisi contoh-contoh data suku dengan perintah SQL. Adapun contoh


data sukunya:

+------+------------+
| kode | keterangan |
+------+------------+
| 1 | Jawa |
| 2 | Sunda |
| 3 | Bali |
| 4 | Batak |
| 5 | Madura |
| 6 | Banten |
| 7 | India |
| 8 | Minang |
| 9 | Palembang |
| 10 | Melayu |
| 11 | Ambon |
| 12 | Manado |
| 13 | Betawi |
| 14 | Kutai |
| 15 | Cina |
| 16 | Lampung |
+------+------------+
16 BAB 1. BASIS DATA

4. Mengisi contoh-contoh kode pekerjaan dengan menggunakan perintah


SQL.

+-------+-----------------------+
| 106 | Keperawatan |
| 107 | Keuangan |
| 108 | Data Control Keuangan |
| 109 | Asuransi |
| 110 | PNS |
| 111 | Dokter Gigi |
| 112 | Karyawan BUMN |
| 113 | PETERNAKAN |
+-------+-----------------------+

5. Mengisi contoh-contoh data-data anggota. Data bisa diisi dengan data


simulasi saja.

Kemudian tabel manusia diisi dengan data secukupnya, tapi lebih banyak
dan bervariasi, akan lebih baik.
Pertanyaan-pertanyaan untuk berlatih SQL.

1. Berapa jumlah tabel yang ada di dalam basis data latihan?

2. Apakah nama field untuk menyimpan nomor telepon pada tabel manu-
sia?

3. Apakah jenis kelamin dapat diisi dengan selain L atau P?

4. Apakah ada orang bernama Lia?

5. Ada berapa orang yang namanya diawali dengan huruf m?

6. Ada berapa orang yang namanya diakhiri dengan huruf i?

7. Tampilkan nama lengkap, alamat dan nama kecamatan dari orang-orang


yang tinggal di Kecamatan Cibeber.

8. Siapakah yang lahir pada bulan Mei? Lahirnya tanggal berapa saja?

9. Siapakah orang yang nomor telponnya 0816403432?

10. Berapa jumlah orang yang tinggal di Kecamatan Cilegon.


1.8. SQL 17

11.

12. Rangkas alamat tinggal di mana?

13. Parto tinggal di kecamatan apa?

14.

1. show tables

2. desc manusia

3. insert into manusia(Jenis Kelamin) values(’X’)

4. select nama lengkap from manusia where nama lengkap like ’%lia%’

5. select count(nama lengkap) from manusia where nama lengkap like ’m%’

6. select nama lengkap from manusia where right(trim(nama lengkap),1)=’i’

7. select manusia.nama lengkap,manusia.alamat, kode kecamatan.keterangan


from manusia, kode kecamatan where manusia.kecamatan= kode kecamatan.kode
and kode kecamatan.keterangan=’Cibeber’

8. select nama lengkap,tanggal lahir from manusia where month(tanggal lahir)=5

9. select nama lengkap,telpon from manusia where telpon like ’

10. select count(manusia.nama lengkap) from manusia, kode kecamatan whe-


re manusia.kecamatan= kode kecamatan.kode and kode kecamatan.keterangan=’Cilegon’

11.

12. select nama,alamat asal from tabel mahasiswa where nama like ’%rang-
kas%’

13. select nama lengkap,kecamatan,keterangan from manusia,kode kecamatan


where kode=kecamatan and nama lengkap like ’%parto%’

14.
18 BAB 1. BASIS DATA
Daftar Pustaka

19

Anda mungkin juga menyukai