• Tidak ada hasil yang ditemukan

Modul Praktek MySQL (Arif Nur Widianto-ILKOM UGM)

N/A
N/A
Protected

Academic year: 2021

Membagikan "Modul Praktek MySQL (Arif Nur Widianto-ILKOM UGM)"

Copied!
119
0
0

Teks penuh

(1)

MODUL PRAKTEK

SISTEM MANAJEMEN BASIS DATA

DENGAN MYSQL

PROGRAM STUDI TEKNIK INFORMATIKA

JENJANG S-1

FAKULTAS TEKNOLOGI INDUSTRI

INSTITU SAINS &TEKNOLOGI AKPRIND

(2)

SUMBER

: MODUL PRAKTIKUM BASIS DATA

PROGRAM PRA S-2

JURUSAN ILMU KOMPUTER & ELEKTRONIKA, FMIPA,

UNIVERSITAS GADJAH MADA YOGYAKARTA

(3)
(4)

Pertemuan 1 Pengantar MySQL

Arsitektur MySQL

MySQL bekerja di lingkungan jaringan menggunakan arsitektur client/server. Sebuah program berjalan

sebagai server, dan berbagai macam client mengirimkan request ke server. MySQL memiliki komponen

sebagai berikut:

MySQL Server, atau mysqld, adalah program server database. Program ini mengatur akses ke

database di disk dan memory. MySQL Server bersifat multi-thread dan mendukung beberapa

koneksi secara simultan. MySQL Server memiliki arsitektur modular, sehingga mendukung

berbagai macam storage engine untuk menangani beberapa jenis tabel yang berbeda.

Program Client, adalah program yang digunakan untuk berkomunikasi dengan server untuk

memanipulasi informasi dalam database yang ditangani server. Beberapa contoh program

client:

MySQL Query Browser dan MySQL Administrator, menyediakan antarmuka grafis untuk

akses ke server

mysql, program command line untuk akses ke server berbasis teks (ini yang akan kita

gunakan)

program command line lain, seperti mysqlimport untuk import database ke file, mysqldump

untuk membuat backup, mysqladmin untuk administrasi server, dan mysqlcheck untuk

mengecek integritas file database

MySQL non-client utilities, program yang beraksi secara independen terhadap server.

Program-program ini tidak perlu melakukan koneksi terlebih dahulu ke server untuk beroperasi.

Contoh: myisamchk untuk operasi mengecek tabel dan repair.

Koneksi dan diskoneksi ke Server

Program client yang kita gunakan adalah mysql. Untuk mengetahui parameter apa saja yang diterima

oleh program mysql, kita dapat memasukkan command:

shell> mysql --help

Secara umum, untuk melakukan koneksi ke dalam database, kita gunakan perintah sebagai berikut:

shell> mysql -h localhost -u user -p

Perintah di atas berarti kita akan mengakses Server di localhost dengan nama user “user” dan password.

Command line kemudian akan meminta password kita. Setelah kita berhasil masuk ke mysql, prompt

kita akan berubah menjadi mysql>

mysql>

Beberapa parameter lain untuk koneksi adalah sebagai berikut:

--protocol

The protocol to use for the connection

--host atau -h

The host where the server is running (default: localhost)

--port atau -P

The port number for TCP/IP connections (default: 3306)

--shared-memory-base-name

The shared-memory name for shared-memory connections

--socket

The Unix socket filename or named-pipe name

Sedangkan parameter untuk identifikasi user adalah sebagai berikut:

--user atau -u

The MySQL account username

(5)

--password atau -p

The MySQL account password

Beberapa instalasi MySQL mengijinkan user untuk mengakses sebagai anonymous (tanpa nama) ke

server dalam localhost, sehingga kita dapat mengakses secara langsung menggunakan perintah:

shell> mysql

Untuk mengetahui status sambungan ke mysql, kita bisa menggunakan command STATUS.

mysql> STATUS;

---mysql Ver 14.14 Distrib 5.5.23, for debian-linux-gnu (x86_64) using readline 6.1 Connection id: 59

Current database:

Current user: root@localhost

SSL: Not in use

Current pager: stdout Using outfile: '' Using delimiter: ;

Server version: 5.5.23-2 (Debian) Protocol version: 10

Connection: Localhost via UNIX socket Server characterset: latin1

Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8

UNIX socket: /run/mysqld/mysqld.sock

Uptime: 41 min 1 sec

Threads: 1 Questions: 671 Slow queries: 0 Opens: 495 Flush tables: 1 Open tables: 49 Queries per second avg: 0.272

---Untuk memutus sambungan ke mysql, kita bisa lakukan dengan command quit (atau \q) di mysql>

prompt.

mysql> quit Bye

Memasukkan Query

Setelah kita berhasil masuk ke mysql, kita dapat memasukkan beberapa command ke dalam mysql.

Berikut adalah contoh sederhana untuk mengetahui nomor versi dan tanggal sekarang.

mysql> SELECT VERSION(), CURRENT_DATE; +---+---+

| VERSION() | CURRENT_DATE | +---+---+ | 5.5.23-2 | 2012-05-30 |

(6)

+---+---+ 1 row in set (0.00 sec)

Query tersebut mengilustrasikan tentang mysql:

Sebuah command normalnya terdiri atas perintah SQL diikuti oleh tanda titik koma (;).

Ketika kita memasukkan command, mysql mengirimkannya ke server untuk dieksekusi dan

ditampilkan hasilnya, kemudian menampilkan prompt mysql> lagi untuk menandakan bahwa ia

telah siap menerima perintah.

mysql menampilkan hasil query dalam bentuk tabular (baris dan kolom). Baris pertama

menunjukkan label untuk kolom tersebut. Baris selanjutnya adalah hasil query.

mysql menampilkan jumlah baris yang ditemukan dan waktu eksekusi query yang menunjukkan

secara kasar performa server.

Keyword dapat dimasukkan dengan lettercase apa saja. Query-query berikut ini adalah query yang

sama.

mysql> SELECT VERSION(), CURRENT_DATE; mysql> select version(), current_date; mysql> SeLeCt vErSiOn(), current_DATE;

Contoh berikut merupakan query untuk melakukan kalkulasi.

mysql> select sin(pi()/4), (4+1)*5; +---+---+ | sin(pi()/4) | (4+1)*5 | +---+---+ | 0.707106781186547 | 25 | +---+---+ 1 row in set (0.00 sec)

Kita juga dapat memasukkan beberapa statement dalam satu baris

mysql> select version(); select now(); +---+

| version() | +---+ | 5.1.61-0+squeeze1 | +---+ 1 row in set (0.00 sec) +---+ | now() | +---+ | 2012-05-27 08:34:27 | +---+ 1 row in set (0.00 sec)

Sebuah command juga dapat ditulis dalam beberapa baris. mysql menentukan kapan statement

berakhir dengan mencari tanda titik koma (;). Dengan kata lain, mysql menerima masukkan tetapi belum

dieksekusi sebelum menemukan tanda titik koma.

(7)

mysql> select -> user() -> , -> current_date; +---+---+ | user() | current_date | +---+---+ | root@localhost | 2012-05-27 | +---+---+ 1 row in set (0.00 sec)

Pada contoh di atas, prompt mysql> berubah menjadi -> setelah memasukkan baris pertama dari

sebuah query berbaris banyak. Ini menunjukkan mysql menunggu sampai semua statement selesai

dimasukkan.

Jika kita ingin membatalkan statement yang sedang kita masukkan, kita dapat memasukkan perintah

\c:

mysql> select -> user() -> \c mysql>

Pada contoh di atas, prompt berubah kembali menjadi mysql> yang menunjukkan bahwa ia telah siap

menerima command baru.

Berikut adalah prompt yang ditunjukkan mysql dan maksudnya.

Prompt

Arti

mysql>

Siap menerima command baru

->

Menunggu baris selanjutnya dari multiline command

'>

Menunggu baris selanjutnya, untuk mengakhiri string yang diawali oleh (')

“>

Menunggu baris selanjutnya, untuk mengakhiri string yang diawali oleh (“)

`>

Menunggu baris selanjutnya, untuk mengakhiri identifier yang diawali oleh (`)

/*>

Menunggu baris selanjutnya, untuk mengakhiri komentar yang diawali oleh (/*)

Prompt '> dan “> terjadi ketika mysql sedang menerima string (atau mysql sedang menunggu string

selesai dimasukkan). Di MySQL, kita bisa menulis string yang diawali dan diakhiri dengan tanda (') atau

(“), misalnya 'goodbye' atau “goodbye”. mysql juga memperbolehkan masukan string lebih dari satu

baris. Ketika prompt ini muncul, artinya kita memasukkan string yang diawali tanda ['] atau [“] tetapi

belum kita tutup.

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30; '>

Pada perintah di atas berarti kita kurang menutup string dengan tanda ('). Kita bisa mengakhiri

kesalahan ini dengan membatalkan query sebagai berikut.

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30; '> '\c

Artinya, kita menutup tanda string dan membatalkan perintah dengan \c. Jika kita hanya memasukkan

tanda \c saja, maka \c dianggap sebagai bagian dari string tersebut.

(8)

Untuk mengetahui perintah apa saja yang diterima oleh mysql, kita bisa menggunakan command help

atau \h sebagai berikut:

mysql> \h

For information about MySQL products and services, visit: http://www.mysql.com/

For developer information, including the MySQL Reference Manual, visit: http://dev.mysql.com/

To buy MySQL Enterprise support, training, or other products, visit: https://shop.mysql.com/

List of all MySQL commands:

Note that all text commands must be first on line and end with ';' ? (\?) Synonym for `help'.

clear (\c) Clear the current input statement.

connect (\r) Reconnect to the server. Optional arguments are db and host. delimiter (\d) Set statement delimiter.

edit (\e) Edit command with $EDITOR.

ego (\G) Send command to mysql server, display result vertically. exit (\q) Exit mysql. Same as quit.

go (\g) Send command to mysql server. help (\h) Display this help.

nopager (\n) Disable pager, print to stdout. notee (\t) Don't write into outfile.

pager (\P) Set PAGER [to_pager]. Print the query results via PAGER. print (\p) Print current command.

prompt (\R) Change your mysql prompt. quit (\q) Quit mysql.

rehash (\#) Rebuild completion hash.

source (\.) Execute an SQL script file. Takes a file name as an argument. status (\s) Get status information from the server.

system (\!) Execute a system shell command.

tee (\T) Set outfile [to_outfile]. Append everything into given outfile. use (\u) Use another database. Takes database name as argument.

charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets. warnings (\W) Show warnings after every statement.

nowarning (\w) Don't show warnings after every statement. For server side help, type 'help contents'

(9)

Menulis Komentar

Komentar dapat ditulis dengan diawali oleh karakter #. Semua karakter setelah karakter # akan

dianggap sebagai komentar dan tidak diproses.

mysql> SELECT 1+1; # This comment continues to the end of line +---+

| 1+1 | +---+ | 2 | +---+

1 row in set (0.00 sec) mysql>

Selain menggunakan karakter #, komentar juga dapat ditulis dengan diawali oleh sekuens '–-'.

mysql> SELECT 1+1; -- This comment continues to the end of line +---+

| 1+1 | +---+ | 2 | +---+

1 row in set (0.00 sec) mysql>

Untuk komentar yang lebih dari satu baris, komentar dapat dikelilingi oleh karakter '/*' dan '*/'. Semua

karakter di antara kedua tanda tersebut tidak akan diproses.

mysql> SELECT 1 /* this is an in-line comment */ + 1; +---+

| 1 + 1 | +---+ | 2 | +---+

1 row in set (0.00 sec) mysql> SELECT 1+ -> /* /*> this is a /*> multiple-line comment /*> */ -> 1; +---+ | 1+ 1 | +---+ | 2 | +---+

(10)

1 row in set (0.00 sec) mysql>

Operator

MySQL memiliki berbagai macam operator sebagai berikut:

Name

Description

AND, &&

Logical AND

BINARY

Cast a string to a binary string

&

Bitwise AND

|

Bitwise OR

^

Bitwise XOR

/

Division operator

DIV

Integer division

<=>

NULL-safe equal to operator

=

Equal operator

>=

Greater than or equal operator

>

Greater than operator

IS NULL

NULL value test

IS

Test a value against a boolean

<<

Left shift

<=

Less than or equal operator

<

Less than operator

LIKE

Simple pattern matching

-

Minus operator

%

Modulo operator

!=, <>

Not equal operator

NOT LIKE

Negation of simple pattern matching

NOT REGEXP

Negation of REGEXP

NOT, !

Negates value

(11)

Name

Description

+

Addition operator

REGEXP

Pattern matching using regular expressions

>>

Right shift

RLIKE

Synonym for REGEXP

SOUNDS LIKE

Compare sounds

~

Invert bits

*

Times operator

-

Change the sign of the argument

XOR

Logical XOR

Seperti bahasa pemrograman, operator-operator tersebut juga memiliki precedences. Precedences itu

adalah sebagai berikut (dari yang paling rendah ke yang paling tinggi):

1. :=

2. ||, OR, XOR

3. &&, AND

4. NOT

5. BETWEEN, CASE, WHEN, THEN, ELSE

6. =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN

7. |

8. &

9. <<, >>

10. -, +

11. *, /, DIV, %, MOD

12. ^

13. - (unary minus), ~ (unary bit inversion)

14. !

15. BINARY, COLLATE

Untuk menghindari precedence, dapat menggunakan tanda kurung buka dan kurung tutup.

mysql> SELECT 1+2*3; +---+ | 1+2*3 | +---+ | 7 | +---+

1 row in set (0.00 sec) mysql> SELECT (1+2)*3; +---+

| (1+2)*3 | +---+ | 9 |

(12)

+---+

1 row in set (0.00 sec) mysql>

Membuat dan Memilih Database

Setelah mengetahui bagaimana cara memasukkan command, kita dapat mulai mengakses database.

Untuk melihat database apa saja yang terdapat dalam server, kita bisa melihatnya menggunakan

perintah

mysql> SHOW DATABASES; +---+ | Database | +---+ | information_schema | | mysql | | phpmyadmin | +---+ 3 rows in set (0.00 sec)

Pembuatan database dapat kita lakukan dengan menggunakan perintah CREATE DATABASE. Misalnya,

kita mencoba membuat database dengan nama 'pethouse'. Kita dapat melakukannya sebagai berikut:

mysql> CREATE DATABASE pethouse; Query OK, 1 row affected (0.00 sec)

Kemudian kita dapat melihat apakah database yang telah kita buat berhasil dengan menggunakan

command SHOW DATABASES

mysql> SHOW DATABASES; +---+ | Database | +---+ | information_schema | | mysql | | pethouse | | phpmyadmin | +---+ 4 rows in set (0.00 sec)

Untuk memilih database mana yang akan kita gunakan, kita bisa menggunakan command USE.

Misalnya, kita ingin mengakses database 'pethouse' yang telah kita buat, maka kita bisa menggunakan

command sebagai berikut:

mysql> USE pethouse Database changed

Command USE, sama seperti QUIT, tidak membutuhkan tanda titik koma (;), namun jika kita

menggunakan tanda titik koma, hal itu tidak menjadi masalah.

Selanjutnya, untuk mengetahui database apa yang saat ini sedang kita gunakan, kita dapat

menggunakan command SELECT DATABASE(); sebagai berikut:

(13)

+---+ | DATABASE() | +---+ | pethouse | +---+

1 row in set (0.00 sec)

Menghapus Database

Untuk menghapus database, dapat menggunakan perintah DROP DATABASE. Data yang tersimpan

dalam database juga akan ikut terhapus.

mysql> DROP DATABASE pethouse; Query OK, 0 rows affected (0.00 sec) mysql>

Membuat Tabel

Setelah membuat database, kita akan membuat tabel. Pastikan kita telah menggunakan database

pethouse (menggunakan USE). Untuk melihat semua tabel yang terdapat dalam sebuah database, kita

bisa menggunakan command:

mysql> show tables; Empty set (0.00 sec)

Selanjutnya, kita membuat tabel 'pet' yang berisikan nama-nama binatang beserta informasi yang

berkaitan dengan binatang tersebut. Berikut adalah commandnya:

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), -> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE); Query OK, 0 rows affected (0.41 sec)

Untuk melihat apakah tabel kita sudah ditambahkan kita bisa melihat tabel dengan SHOW TABLES

mysql> SHOW TABLES; +---+ | Tables_in_pethouse | +---+ | pet | +---+ 1 row in set (0.00 sec)

Untuk melihat apakah tabel yang dibuat telah sesuai dengan yang kita inginkan, kita dapat

menggunakan command DESCRIBE:

mysql> DESCRIBE pet;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | species | varchar(20) | YES | | NULL | |

(14)

| sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | +---+---+---+---+---+---+ 6 rows in set (0.01 sec)

Memasukkan Data ke Tabel

Setelah tabel berhasil dibuat, mari kita masukkan data ke dalamnya. Masukkan data di bawah ini

menggunakan INSERT.

name

owner

species

sex

birth

death

Fluffy

Harold

cat

f

1993-02-04

Claws

Gwen

cat

m

1994-03-17

Buffy

Harold

dog

f

1989-05-13

Contoh untuk memasukkan Fluffy:

mysql> INSERT INTO pet(name, owner, species, sex, birth, death) -> VALUES ('Fluffy', 'Harold', 'cat', 'f', '1993-02-04', NULL); Query OK, 1 row affected (0.00 sec)

atau bisa juga menggunakan command:

mysql> INSERT INTO pet

-> VALUES ('Fluffy', 'Harold', 'cat', 'f', '1993-02-04', NULL); Query OK, 1 row affected (0.00 sec)

Selain menggunakan INSERT, kita juga bisa menggunakan LOAD DATA untuk memasukkan data dari

sebuah file. Buatlah sebuah file bernama 'pet.txt' dengan data berikut:

name

owner

species

sex

birth

death

Fang

Benny

dog

m

1990-08-27

Bowser

Diane

dog

m

1979-08-31

1995-07-29

Chirpy

Gwen

bird

f

1998-09-11

File 'pet.txt' tersebut diisi dengan satu record setiap barisnya, masing-masin nilai dipisahkan dengan tab

dengan urutan kolom seperti yang didefinisikan pada pembuatan tabel. Untuk menggantikan nilai NULL

dilakukan dengan '\N'. Contoh baris dalam file tersebut:

Fang Benny dog m 1990-08-27 \N

File tersebut kemudian kita masukkan ke tabel menggunakan command LOAD DATA dan diarahkan ke

lokasi di mana kita menyimpan file 'pet.txt'. Pada contoh di bawah, file 'pet.txt' berada di

'/app/mysql/pet.txt'.

mysql> LOAD DATA LOCAL INFILE '/app/mysql/pet.txt' INTO TABLE pet; Query OK, 3 rows affected, 1 warning (0.00 sec)

Records: 3 Deleted: 0 Skipped: 0 Warnings: 1

Untuk melihat data yang telah dimasukkan, kita bisa menggunakan perintah SELECT.

mysql> SELECT * FROM pet;

(15)

| name | owner | species | sex | birth | death | +---+---+---+---+---+---+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Fang | Benny | dog | m | 1990-08-27 | NULL | | Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 | | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | | Slim | Benny | snake | m | 1996-04-29 | NULL | | Puffball | Diane | hamster | f | 1999-03-30 | NULL | +---+---+---+---+---+---+

Menghapus Tabel

Untuk menghapus tabel dapat menggunakan command DROP TABLE. Semua data yang terdapat pada

tabel yang dihapus juga akan hilang.

mysql> DROP TABLE pet;

Query OK, 0 rows affected (0.00 sec) mysql>

(16)

TUGAS

Menggunakan mysql command line,

1. Buat sebuah tabel bernama 'event' dalam database 'pethouse' dengan kolom sebagai berikut:

Nama kolom

Tipe data

Ukuran

name

VARCHAR

20

date

DATE

type

VARCHAR

15

remark

VARCHAR

255

2. Isikan tabel tersebut dengan data sebagai berikut menggunakan INSERT

name

date

type

remark

Fluffy

1995-05-15

litter

4 kittens, 3 female, 1 male

Buffy

1993-06-23

litter

5 puppies, 2 female, 3 male

Buffy

1994-06-19

litter

3 puppies, 3 female

Chirpy

1999-03-21

vet

needed beak straightened

3. Isikan tabel tersebut dengan data sebagai berikut menggunakan LOAD DATA

name

date

type

remark

Slim

1997-08-03

vet

broken rib

Bowser

1991-10-12

kennel

Fang

1991-10-12

kennel

Fang

1998-08-28

birthday

Gave him a new chew toy

Claws

1998-03-17

birthday

Gave him a new flea collar

Whistler

1998-12-09

birthday

First birthday

4. Tampilkan data yang sudah berhasil dimasukkan menggunakan command SELECT.

Ambil screenshotnya dan masukkan ke sebuah dokumen disertai identitas.

(17)
(18)

Pertemuan 2 Tabel dan Manipulasi Data

Membuat tabel

Secara umum, syntax untuk membuat tabel adalah sebagai berikut:

CREATE TABLE nama_tbl (

nama_kolom1 tipe_data(length) [NOT NULL|NULL] [DEFAULT nilai_default] [AUTO_INCREMENT] , nama_kolom2 tipe_data(length) [NOT NULL|NULL] [DEFAULT nilai_default] [AUTO_INCREMENT] , …

);

Contoh membuat tabel

mysql> CREATE DATABASE PRAK2; Query OK, 1 row affected (0.34 sec) mysql> USE PRAK2;

Database changed

mysql> CREATE TABLE TABLE1( -> id INT AUTO_INCREMENT, -> name VARCHAR(30) NOT NULL,

-> salary FLOAT(10,2) DEFAULT 1000000 -> );

mysql> DESCRIBE TABLE1;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | YES | | NULL | | | name | varchar(30) | NO | | NULL | | | salary | float(10,2) | YES | | 1000000.00 | | +---+---+---+---+---+---+ 3 rows in set (0.00 sec)

Tipe data

Tipe data dalam MySQL terdiri atas beberapa jenis:

Tipe data teks

Tipe data teks terdiri atas beberapa tipe sebagai berikut:

CHAR( )

A fixed section from 0 to 255 characters long.

VARCHAR( )

A variable section from 0 to 255 characters long.

(19)

TINYTEXT

A string with a maximum length of 255 characters.

TEXT

A string with a maximum length of 65535 characters.

BLOB

A binary string with a maximum length of 65535 bytes.

MEDIUMTEXT

A string with a maximum length of 16777215 characters.

MEDIUMBLOB

A string with a maximum length of 16777215 bytes.

LONGTEXT

A string with a maximum length of 4294967295 characters.

LONGBLOB

A string with a maximum length of 4294967295 bytes.

ENUM( value1, value2,...)

A string object that can only have one value, chosen from the list

of 'value1', 'value2', An ENUM can have a maximum of 65535

distinct values

SET (value1, value2, ... )

A string object that can have zero or more values, each of which

must be chosen from the list of values 'value1', 'value2', SET

values can have a maximum of 64 members.

Tipe data numerik

Tipe data numerik adalah sebagai berikut:

TINYINT( )

-128 to 127 normal, 0 to 255 UNSIGNED.

SMALLINT( )

-32768 to 32767 normal, 0 to 65535 UNSIGNED.

MEDIUMINT( )

-8388608 to 8388607 normal, 0 to 16777215 UNSIGNED.

INT( )

-2147483648 to 2147483647 normal, 0 to 4294967295 UNSIGNED.

BIGINT( )

-9223372036854775808 to 9223372036854775807 normal, 0 to

18446744073709551615 UNSIGNED.

FLOAT ( M , D)

A small number with a floating decimal point.

DOUBLE( M, D)

A large number with a floating decimal point.

DECIMAL( M, D)

A fixed decimal point.

BIT( )

Bit values (0 or 1)

Tipe data numerik FLOAT, DOUBLE, dan DECIMAL, nilai M menunjukkan jumlah digit keseluruhan,

sedangkan D menunjukkan jumlah digit di belakang koma. Sebagai contoh, jika ada kolom yang

didefinisikan sebagai FLOAT(7,4) maka akan tampak seperti 999.9999.

Tipe data date

DATE

YYYY-MM-DD.

DATETIME

YYYY-MM-DD HH:MM:SS.

TIMESTAMP

YYYYMMDDHHMMSS.

(20)

TIME

HH:MM:SS.

Membuat tabel dengan primary key

Primary key adalah nilai yang menjadi pembeda antara satu record data dengan record yang lain.

Membuat tabel dengan primary key ditunjukkan sebagai berikut:

mysql> CREATE TABLE TABLE2(

-> id INT AUTO_INCREMENT PRIMARY KEY, -> name VARCHAR(30)

-> );

Query OK, 0 rows affected (0.13 sec) mysql> DESCRIBE TABLE2;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(30) | YES | | NULL | | +---+---+---+---+---+---+ 2 rows in set (0.00 sec)

Pada contoh di atas, kolom 'id' diberikan 'AUTO_INCREMENT', artinya kolom ini akan diberikan nilai

increment secara automatis. Kolom 'id' diset sebagai PRIMARY KEY.

Dalam satu tabel, hanya boleh ada satu kolom yang diberi status 'AUTO_INCREMENT', dan harus menjadi

key. Jika tidak akan muncul pesan error sebagai berikut:

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

Membuat tabel dengan primary key juga dapat dilakukan sebagai berikut:

mysql> CREATE TABLE TABLE3( -> id INT AUTO_INCREMENT, -> name VARCHAR(30), -> PRIMARY KEY (id) -> );

Query OK, 0 rows affected (0.17 sec) mysql> DESCRIBE TABLE3;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(30) | YES | | NULL | | +---+---+---+---+---+---+ 2 rows in set (0.00 sec)

(21)

Memberikan nilai UNIQUE

UNIQUE memberikan batasan bahwa nilai dalam sebuah kolom harus distinct (atau tidak ada data yang

nilainya sama). Error akan terjadi jika kita menambahkan nilai yang sama dengan data yang sudah ada

untuk kolom tersebut.

mysql> CREATE TABLE cars(

-> id INT PRIMARY KEY AUTO_INCREMENT, -> plate VARCHAR (10),

-> brand VARCHAR (10), -> UNIQUE (plate) -> );

Query OK, 0 rows affected (0.16 sec) mysql> DESC cars;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | NO | PRI | NULL | auto_increment | | plate | varchar(10) | YES | UNI | NULL | | | brand | varchar(10) | YES | | NULL | | +---+---+---+---+---+---+ 3 rows in set (0.00 sec)

mysql> INSERT INTO cars VALUES (1, 'AB-1234-CD', 'Toyota'); Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM cars; +----+---+---+ | id | plate | brand | +----+---+---+ | 1 | AB-1234-CD | Toyota | +----+---+---+ 1 row in set (0.00 sec)

mysql> INSERT INTO cars VALUES (2, 'AB-1234-CD', 'Suzuki'); ERROR 1062 (23000): Duplicate entry 'AB-1234-CD' for key 'plate'

Parameter IF NOT EXISTS

Parameter IF NOT EXISTS digunakan untuk mengecek apakah sebuah tabel dengan nama yang sama

sudah ada atau belum sebelum membuat tabel. Penggunaannya dapat dilihat sebagai berikut:

mysql> SHOW TABLES; +---+ | Tables_in_PRAK2 |

(22)

+---+ | TABLE1 | | TABLE2 | | TABLE3 | +---+ 3 rows in set (0.00 sec)

mysql> CREATE TABLE IF NOT EXISTS TABLE1( -> id INT AUTO_INCREMENT,

-> name VARCHAR(30) NOT NULL,

-> salary FLOAT(10,2) DEFAULT 1000000 -> );

Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> CREATE TABLE IF NOT EXISTS TABLE4( -> id INT AUTO_INCREMENT,

-> name VARCHAR(30) NOT NULL,

-> salary FLOAT(10,2) DEFAULT 1000000 -> );

Query OK, 0 rows affected (0.14 sec) mysql> SHOW TABLES;

+---+ | Tables_in_PRAK2 | +---+ | TABLE1 | | TABLE2 | | TABLE3 | | TABLE4 | +---+ 4 rows in set (0.00 sec)

Pada contoh di atas, kita mencoba membuat tabel dengan nama TABEL1 yang sudah ada. Mysql akan

memberikan satu buat warning. Namun ketika, kita membuat tabel yang belum ada, maka tabel

tersebut akan terbentuk.

Menyalin tabel dengan statement SELECT

Kita juga dapat membuat tabel dari tabel lain menggunakan statement SELECT. Caranya ditunjukkan

sebagai berikut.

Pertama, kita membuat terlebih dahulu tabel sumber dengan nama 'employee' seperti sebagai berikut:

mysql> CREATE TABLE employee(

-> id INT AUTO_INCREMENT PRIMARY KEY, -> first_name VARCHAR(15),

(23)

-> start_date DATE, -> end_date DATE, -> salary FLOAT(8,2), -> city VARCHAR(10), -> description VARCHAR(15) -> );

Query OK, 0 rows affected (0.16 sec) mysql> DESCRIBE employee;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | NO | PRI | NULL | auto_increment | | first_name | varchar(15) | YES | | NULL | | | last_name | varchar(15) | YES | | NULL | | | start_date | date | YES | | NULL | | | end_date | date | YES | | NULL | | | salary | float(8,2) | YES | | NULL | | | city | varchar(10) | YES | | NULL | | | description | varchar(15) | YES | | NULL | | +---+---+---+---+---+---+ 8 rows in set (0.00 sec)

Kemudian kita isikan dengan data ke tabel 'employee' sebagai berikut:

1 Jason

Martin

1996-07-25 2006-07-25 1234.56 Toronto

Programmer

2 Alison Mathews 1976-03-21 1986-02-21 6661.78 Vancouver Tester

3 James Smith

1978-12-12 1990-03-15 6544.78 Vancouver Tester

4 Celia

Rice

1982-10-24 1999-04-21 2344.78 Vancouver Manager

5 Robert Black

1984-01-15 1998-08-08 2334.78 Vancouver Tester

6 Linda

Green

1987-07-30 1996-01-04 4322.78 New York Tester

7 David Larry

1990-12-31 1998-02-12 7897.78 New York Manager

8 James Cat

1996-09-17 2002-04-15 1232.78 Vancouver Tester

Pengisian tabel dapat menggunakan statement LOAD DATA INFILE dengan cara membuat file teks,

misalkan bernama 'employee.txt' dan memisahkan kolom dengan tab. Selanjutnya memasukkan file

dapat dilakukan sebagai berikut:

mysql> LOAD DATA INFILE '/app/mysql/employee.txt' INTO TABLE employee FIELDS TERMINATED BY '\t';

(24)

Records: 8 Deleted: 0 Skipped: 0 Warnings: 0

Selanjutnya, kita mulai menyalin tabel. Pada contoh di bawah, data yang akan disalin ke tabel yang baru

adalah data employee yang mulai bekerja antara 1 Januari 1970 sampai 31 Desember 1990.

mysql> CREATE TABLE employee_copy AS -> SELECT *

-> FROM employee

-> WHERE start_date BETWEEN '1970-01-01' AND '1990-12-31'; Query OK, 6 rows affected (0.18 sec)

Records: 6 Duplicates: 0 Warnings: 0 mysql> SHOW TABLES;

+---+ | Tables_in_PRAK2 | +---+ | TABLE1 | | TABLE2 | | TABLE3 | | TABLE4 | | employee | | employee_copy | +---+ 6 rows in set (0.00 sec)

mysql> SELECT * FROM employee_copy;

+----+---+---+---+---+---+---+---+

| id | first_name | last_name | start_date | end_date | salary | city | description |

+----+---+---+---+---+---+---+---+

| 2 | Alison | Mathews | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester |

| 3 | James | Smith | 1978-12-12 | 1990-03-15 | 6544.78 | Vancouver | Tester |

| 4 | Celia | Rice | 1982-10-24 | 1999-04-21 | 2344.78 | Vancouver | Manager |

| 5 | Robert | Black | 1984-01-15 | 1998-08-08 | 2334.78 | Vancouver | Tester |

| 6 | Linda | Green | 1987-07-30 | 1996-01-04 | 4322.78 | New York | Tester |

| 7 | David | Larry | 1990-12-31 | 1998-02-12 | 7897.78 | New York | Manager |

+----+---+---+---+---+---+---+---+

(25)

Membuat temporary tabel

Temporary tabel adalah tabel yang visible atau terlihat hanya pada koneksi yang sedang aktif dan akan

langsung dihapus ketika koneksi sudah terputus.

mysql> CREATE TEMPORARY TABLE TEMPTBL( -> id INT PRIMARY KEY AUTO_INCREMENT, -> name VARCHAR(30)

-> );

Query OK, 0 rows affected (0.08 sec) mysql> SHOW TABLES;

+---+ | Tables_in_PRAK2 | +---+ | TABLE1 | | TABLE2 | | TABLE3 | | TABLE4 | +---+ 9 rows in set (0.00 sec) mysql> SELECT * FROM TEMPTBL; Empty set (0.00 sec)

mysql> \q Bye

mysql -h localhost -u root -p Enter password:

mysql> USE PRAK2 Database changed

mysql> SELECT * FROM TEMPTBL;

ERROR 1146 (42S02): Table 'PRAK2.TEMPTBL' doesn't exist

Membuat tabel dengan foreign key

MySQL memiliki beberapa engine database. Salah satunya adalah engine InnoDB yang memiliki

dukungan terhadap ACID. Pembuatan tabel menggunakan engine InnoDB dapat membantu

memberikan referential integrity.

Berikut adalah contoh membuat tabel yang memiliki foreign key dengan engine InnoDB:

mysql> CREATE TABLE models (

(26)

-> name varchar(40) not null, -> primary key (modelid) -> )

-> engine=InnoDB;

Query OK, 0 rows affected (0.13 sec) mysql> desc models;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | modelid | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(40) | NO | | NULL | | +---+---+---+---+---+---+ 2 rows in set (0.00 sec)

mysql> CREATE TABLE orders (

-> id SMALLINT NOT NULL PRIMARY KEY, -> modelid SMALLINT NOT NULL,

-> description VARCHAR(40),

-> FOREIGN KEY (modelid) REFERENCES models (modelid) ON UPDATE CASCADE ON DELETE CASCADE

-> ) engine=InnoDB;

Query OK, 0 rows affected (0.18 sec) mysql> desc orders;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | smallint(6) | NO | PRI | NULL | | | modelid | smallint(6) | NO | MUL | NULL | | | description | varchar(40) | YES | | NULL | | +---+---+---+---+---+---+ 3 rows in set (0.00 sec)

Pada perintah sql di atas, kita membuat dua buah tabel dengan nama models dan orders. Tabel orders

memiliki foreign key modelid yang bereferensi dengan primary key tabel models, yaitu modelid.

mysql> INSERT INTO models VALUES (1, 'testsatu'); Query OK, 1 row affected (0.05 sec)

mysql> SELECT * FROM models; +---+---+

| modelid | name | +---+---+ | 1 | testsatu |

(27)

+---+---+ 1 row in set (0.00 sec)

mysql> insert into orders value (1, 1, 'deskripsisatu'); Query OK, 1 row affected (0.05 sec)

mysql> select * from orders; +----+---+---+ | id | modelid | description | +----+---+---+ | 1 | 1 | deskripsisatu | +----+---+---+ 1 row in set (0.00 sec)

Pada perintah sql di atas, kita memasukkan data ke tabel models dan orders. Data yang dimasukkan

pada tabel orders memiliki referensi terhadap primary key pada tabel models, yaitu modelid yang

nilainya adalah 1.

mysql> DELETE FROM models WHERE modelid = 1; Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM models; Empty set (0.00 sec)

mysql> select * from orders; Empty set (0.00 sec)

Pada perintah sql di atas, kita menghapus data di tabel models yang memiliki modelid = 1. Secara

automatis, data pada tabel orders yang memiliki modelid = 1 juga ikut terhapus untuk memastikan

referential integrity.

Memodifikasi tabel dengan ALTER TABLE

Tabel yang telah dibuat dapat dimodifikasi menggunakan command ALTER TABLE. Bentuk command

untuk ALTER TABLE adalah:

ALTER [IGNORE] TABLE table_name specification [,specification]

dengan specification sebagai berikut:

ADD [COLUMN] column name (column definitions) [FIRST or AFTER column_name] ADD INDEX [index_name] (column_list)

ADD PRIMARY KEY (column_list)

ADD UNIQUE [index_name] (column_list)

ALTER [COLUMN] column_name {SET DEFAULT default_value or DROP DEFAULT} CHANGE [COLUMN] old_col_name create_definition

DROP [COLUMN] col_name DROP PRIMARY KEY DROP INDEX index_name

(28)

RENAME [AS] new_tbl_name

Menambah kolom pada tabel

mysql> CREATE TABLE TABLE5( -> id int

-> );

Query OK, 0 rows affected (0.16 sec) mysql> desc TABLE5;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | YES | | NULL | | +---+---+---+---+---+---+ 1 row in set (0.00 sec)

mysql> ALTER TABLE TABLE5 -> ADD name VARCHAR(5);

Query OK, 0 rows affected (0.24 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc TABLE5;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | YES | | NULL | | | name | varchar(5) | YES | | NULL | | +---+---+---+---+---+---+ 2 rows in set (0.00 sec)

mysql> ALTER TABLE TABLE5

-> ADD first_name VARCHAR(30) AFTER id; Query OK, 0 rows affected (0.84 sec)

Records: 0 Duplicates: 0 Warnings: 0 mysql> desc TABLE5;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | YES | | NULL | | | first_name | varchar(30) | YES | | NULL | | | name | varchar(5) | YES | | NULL | |

(29)

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

Memodifikasi nama dan definisi tabel

mysql> ALTER TABLE TABLE5

-> CHANGE name last_name VARCHAR(30); Query OK, 0 rows affected (0.60 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc TABLE5;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | YES | | NULL | | | first_name | varchar(30) | YES | | NULL | | | last_name | varchar(30) | YES | | NULL | | +---+---+---+---+---+---+ 3 rows in set (0.00 sec)

Memodifikasi definisi tabel

mysql> ALTER TABLE TABLE5

-> MODIFY first_name VARCHAR(15), -> MODIFY last_name VARCHAR(15); Query OK, 0 rows affected (0.24 sec) Records: 0 Duplicates: 0 Warnings: 0

mysql> desc TABLE5;+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra |

+---+---+---+---+---+---+ | id | int(11) | YES | | NULL | | | first_name | varchar(15) | YES | | NULL | | | last_name | varchar(15) | YES | | NULL | | +---+---+---+---+---+---+ 3 rows in set (0.00 sec)

Menambahkan primary key

mysql> ALTER TABLE TABLE5 ADD PRIMARY KEY (id); Query OK, 0 rows affected (0.58 sec)

Records: 0 Duplicates: 0 Warnings: 0 mysql> desc TABLE5;

(30)

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | NO | PRI | 0 | | | first_name | varchar(15) | YES | | NULL | | | last_name | varchar(15) | YES | | NULL | | +---+---+---+---+---+---+ 3 rows in set (0.00 sec)

Menghapus kolom

mysql> ALTER TABLE TABLE5 DROP first_name; Query OK, 0 rows affected (0.55 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC TABLE5;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | NO | PRI | 0 | | | last_name | varchar(15) | YES | | NULL | | +---+---+---+---+---+---+ 2 rows in set (0.01 sec)

Mengganti nama tabel

Mengganti nama tabel yang sudah dibuat dapat dilakukan dengan menggunakan perintah ALTER TABLE

RENAME. Berikut adalah contoh penggunaannya:

mysql> SHOW TABLES; +---+ | Tables_in_PRAK2 | +---+ | TABLE1 | | TABLE2 | | TABLE3 | | TABLE4 | | employee | | employee_copy | +---+ 6 rows in set (0.00 sec)

mysql> ALTER TABLE employee_copy RENAME senior_employee; Query OK, 0 rows affected (0.05 sec)

(31)

mysql> SHOW TABLES; +---+ | Tables_in_PRAK2 | +---+ | TABLE1 | | TABLE2 | | TABLE3 | | TABLE4 | | employee | | senior_employee | +---+ 6 rows in set (0.00 sec)

Menghapus semua data dalam tabel

Untuk menghapus semua data di dalam tabel digunakan command TRUNCATE sebagai berikut:

mysql> CREATE TABLE employee_copy AS -> SELECT * FROM employee; Query OK, 8 rows affected (0.16 sec) Records: 8 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM employee_copy;

+----+---+---+---+---+---+---+---+

| id | first_name | last_name | start_date | end_date | salary | city | description |

+----+---+---+---+---+---+---+---+

| 1 | Jason | Martin | 1996-07-25 | 2006-07-25 | 1234.56 | Toronto | Programmer |

| 2 | Alison | Mathews | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester |

| 3 | James | Smith | 1978-12-12 | 1990-03-15 | 6544.78 | Vancouver | Tester |

| 4 | Celia | Rice | 1982-10-24 | 1999-04-21 | 2344.78 | Vancouver | Manager |

| 5 | Robert | Black | 1984-01-15 | 1998-08-08 | 2334.78 | Vancouver | Tester |

| 6 | Linda | Green | 1987-07-30 | 1996-01-04 | 4322.78 | New York | Tester |

| 7 | David | Larry | 1990-12-31 | 1998-02-12 | 7897.78 | New York | Manager |

| 8 | James | Cat | 1996-09-17 | 2002-04-15 | 1232.78 | Vancouver | Tester |

(32)

+----+---+---+---+---+---+---+---+

8 rows in set (0.00 sec)

mysql> TRUNCATE TABLE employee_copy; Query OK, 0 rows affected (0.04 sec) mysql> SELECT * FROM employee_copy; Empty set (0.00 sec)

Menghapus Tabel

Untuk menghapus tabel dari database, digunakan command DROP TABLE.

mysql> DROP TABLE employee_copy; Query OK, 0 rows affected (0.06 sec) mysql> SHOW TABLES;

+---+ | Tables_in_PRAK2 | +---+ | TABLE1 | | TABLE2 | | TABLE3 | | TABLE4 | | TABLE5 | | employee | | senior_employee | +---+ 7 rows in set (0.00 sec)

(33)

Memasukkan data dengan INSERT

Memasukkan data ke dalam tabel dilakukan menggunakan command INSERT. Bentuk command INSERT

dasar adalah sebagai berikut:

INSERT INTO <table_name> VALUES (

value1, value2, etc... );

Bentuk INSERT di atas bisa digunakan ketika jumlah value sudah sama dengan jumlah kolom yang akan

diberikan data.

mysql> DESC employee;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | NO | PRI | NULL | auto_increment | | first_name | varchar(15) | YES | | NULL | | | last_name | varchar(15) | YES | | NULL | | | start_date | date | YES | | NULL | | | end_date | date | YES | | NULL | | | salary | float(8,2) | YES | | NULL | | | city | varchar(10) | YES | | NULL | | | description | varchar(15) | YES | | NULL | | +---+---+---+---+---+---+ 8 rows in set (0.01 sec)

mysql> INSERT INTO EMPLOYEE VALUES ( -> 9, -> 'James', -> 'Bond', -> '1982-04-21', -> '2002-09-23', -> 1234.56, -> 'London', -> 'Spy' -> );

Query OK, 1 row affected (0.05 sec)

Tabel employee memiliki 8 kolom. Kita memasukkan 8 nilai menggunakan command INSERT. Satu buah

nilai diisi ke kolom sesuai dengan urutan penulisan nilai.

Selain menggunakan INSERT seperti di atas, kita juga dapat menggunakan command INSERT sebagai

berikut:

(34)

mysql> INSERT INTO employee

-> (first_name, last_name, start_date, end_date, salary, city, description) -> VALUES -> ('Hercule', -> 'Poirot', -> '1973-05-23', -> '2001-08-09', -> 4312.98, -> 'Brussels', -> 'Detective' -> );

Query OK, 1 row affected (0.05 sec) mysql> SELECT * FROM employee;

+----+---+---+---+---+---+---+---+

| id | first_name | last_name | start_date | end_date | salary | city | description |

+----+---+---+---+---+---+---+---+

| 1 | Jason | Martin | 1996-07-25 | 2006-07-25 | 1234.56 | Toronto | Programmer |

| 2 | Alison | Mathews | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester |

| 3 | James | Smith | 1978-12-12 | 1990-03-15 | 6544.78 | Vancouver | Tester |

| 4 | Celia | Rice | 1982-10-24 | 1999-04-21 | 2344.78 | Vancouver | Manager |

| 5 | Robert | Black | 1984-01-15 | 1998-08-08 | 2334.78 | Vancouver | Tester |

| 6 | Linda | Green | 1987-07-30 | 1996-01-04 | 4322.78 | New York | Tester |

| 7 | David | Larry | 1990-12-31 | 1998-02-12 | 7897.78 | New York | Manager |

| 8 | James | Cat | 1996-09-17 | 2002-04-15 | 1232.78 | Vancouver | Tester |

| 9 | James | Bond | 1982-04-21 | 2002-09-23 | 1234.56 | London | Spy |

| 10 | Hercule | Poirot | 1973-05-23 | 2001-08-09 | 4312.98 | Brussels | Detective |

+----+---+---+---+---+---+---+---+

10 rows in set (0.00 sec)

Menggunakan command INSERT di atas, kita memberikan spesifikasi kolom mana saja yang akan kita isi.

Kolom yang tidak kita isi (dalam contoh ini adalah 'id') secara automatis akan diisi dengan nilai DEFAULT

yang telah dispesifikasikan saat pembuatan tabel. Kolom 'id' kita spesifikasikan AUTO_INCREMENT

(35)

sehingga kolom tersebut akan diisi dengan increment dari nilai sebelumnya.

Memasukkan lebih dari satu baris dalam satu INSERT

Memasukkan lebih dari satu baris dapat dilakukan menggunakan satu buah command INSERT. Hal ini

dilakukan dengan memisahkan input tiap baris dengan koma (','). Berikut adalah contohnya:

mysql> INSERT INTO employee (first_name, last_name, start_date, end_date, salary, city, description) VALUES

-> ('Lincoln', 'Rhyme', '1999-05-25', '2011-07-13', 3212.98, 'New York', 'Forensics' ),

-> ('Sherlock','Holmes', '1923-08-12','1945-07-21',4123.21, 'London', 'Detective' ) ; Query OK, 2 rows affected (0.35 sec)

Records: 2 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM employee;

+----+---+---+---+---+---+---+---+

| id | first_name | last_name | start_date | end_date | salary | city | description |

+----+---+---+---+---+---+---+---+

| 1 | Jason | Martin | 1996-07-25 | 2006-07-25 | 1234.56 | Toronto | Programmer |

| 2 | Alison | Mathews | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester |

| 3 | James | Smith | 1978-12-12 | 1990-03-15 | 6544.78 | Vancouver | Tester |

| 4 | Celia | Rice | 1982-10-24 | 1999-04-21 | 2344.78 | Vancouver | Manager |

| 5 | Robert | Black | 1984-01-15 | 1998-08-08 | 2334.78 | Vancouver | Tester |

| 6 | Linda | Green | 1987-07-30 | 1996-01-04 | 4322.78 | New York | Tester |

| 7 | David | Larry | 1990-12-31 | 1998-02-12 | 7897.78 | New York | Manager |

| 8 | James | Cat | 1996-09-17 | 2002-04-15 | 1232.78 | Vancouver | Tester |

| 9 | James | Bond | 1982-04-21 | 2002-09-23 | 1234.56 | London | Spy |

| 10 | Hercule | Poirot | 1973-05-23 | 2001-08-09 | 4312.98 | Brussels | Detective |

| 11 | Lincoln | Rhyme | 1999-05-25 | 2011-07-13 | 3212.98 | New York | Forensics |

| 12 | Sherlock | Holmes | 1923-08-12 | 1945-07-21 | 4123.21 | London | Detective |

+----+---+---+---+---+---+---+---+

(36)

12 rows in set (0.00 sec)

INSERT menggunakan data dari tabel lain

Kita juga dapat memasukkan data dari tabel yang lain menggunakan command INSERT

INTO

SELECT.

mysql> CREATE TABLE employee2 (

-> id INT AUTO_INCREMENT PRIMARY KEY, -> name VARCHAR(15),

-> city VARCHAR(20) -> );

Query OK, 0 rows affected (0.16 sec) mysql> DESC employee2;

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(15) | YES | | NULL | | | city | varchar(20) | YES | | NULL | | +---+---+---+---+---+---+ 3 rows in set (0.00 sec)

mysql> INSERT INTO employee2 -> (id, name, city)

-> SELECT id, CONCAT(first_name,' ',last_name), city -> FROM employee;

Query OK, 12 rows affected (0.05 sec) mysql> SELECT * FROM employee2; +----+---+---+ | id | name | city | +----+---+---+ | 1 | Jason Martin | Toronto | | 2 | Alison Mathews | Vancouver | | 3 | James Smith | Vancouver | | 4 | Celia Rice | Vancouver | | 5 | Robert Black | Vancouver | | 6 | Linda Green | New York | | 7 | David Larry | New York | | 8 | James Cat | Vancouver | | 9 | James Bond | London | | 10 | Hercule Poirot | Brussels |

(37)

| 11 | Lincoln Rhyme | New York | | 12 | Sherlock Holmes | London | +----+---+---+ 12 rows in set (0.00 sec)

Pada command di atas, kita hanya memilih id, nama, dan kota dari tabel employee untuk dimasukkan ke

dalam tabel employee2.

Mengubah data menggunakan UPDATE

Data yang telah kita masukkan ke dalam tabel dapat kita ubah menggunakan command UPDATE.

Bentuk umum command UPDATE adalah sebagai berikut:

UPDATE <table_name>

SET <column_name> = 'new_value' WHERE (<column_name> = 'some_value');

Berikut adalah contoh menggunakan UPDATE:

mysql> UPDATE employee2 -> SET city = 'Ottawa' -> WHERE city = 'Vancouver'; Query OK, 5 rows affected (0.08 sec) Rows matched: 5 Changed: 5 Warnings: 0 mysql> SELECT * FROM employee2;

+----+---+---+ | id | name | city | +----+---+---+ | 1 | Jason Martin | Toronto | | 2 | Alison Mathews | Ottawa | | 3 | James Smith | Ottawa | | 4 | Celia Rice | Ottawa | | 5 | Robert Black | Ottawa | | 6 | Linda Green | New York | | 7 | David Larry | New York | | 8 | James Cat | Ottawa | | 9 | James Bond | London | | 10 | Hercule Poirot | Brussels | | 11 | Lincoln Rhyme | New York | | 12 | Sherlock Holmes | London | +----+---+---+ 12 rows in set (0.00 sec)

Mengubah nilai berdasarkan nilai yang dimiliki sekarang

mysql> SELECT salary FROM employee;

(38)

+---+ | salary | +---+ | 1234.56 | | 6661.78 | | 6544.78 | | 2344.78 | | 2334.78 | | 4322.78 | | 7897.78 | | 1232.78 | | 1234.56 | | 4312.98 | | 3212.98 | | 4123.21 | +---+

12 rows in set (0.00 sec)

mysql> UPDATE employee SET salary = salary + 1; Query OK, 12 rows affected (0.06 sec)

Rows matched: 12 Changed: 12 Warnings: 0 mysql> SELECT salary FROM employee;

+---+ | salary | +---+ | 1235.56 | | 6662.78 | | 6545.78 | | 2345.78 | | 2335.78 | | 4323.78 | | 7898.78 | | 1233.78 | | 1235.56 | | 4313.98 | | 3213.98 | | 4124.21 | +---+

(39)

Mengganti data dari tabel

Data yang kita sudah masukkan dalam tabel dapat kita ganti dengan menggunakan command REPLACE.

Format penggunaan command REPLACE sama dengan INSERT, namun ia menggantikan data yang

memiliki nilai sama di indeks PRIMARY KEY atau UNIQUE.

mysql> SELECT * FROM employee2; +----+---+---+ | id | name | city | +----+---+---+ | 1 | Jason Martin | Toronto | | 2 | Alison Mathews | Ottawa | | 3 | James Smith | Ottawa | | 4 | Celia Rice | Ottawa | | 5 | Robert Black | Ottawa | | 8 | James Cat | Ottawa | | 9 | James Bond | London | | 10 | Hercule Poirot | Brussels | | 12 | Sherlock Holmes | London | +----+---+---+ 9 rows in set (0.00 sec)

mysql> REPLACE INTO employee2 (id,name, city) VALUES (12,'Sherlock Holmes','Manchester'); Query OK, 2 rows affected (0.05 sec)

mysql> SELECT * FROM employee2; +----+---+---+ | id | name | city | +----+---+---+ | 1 | Jason Martin | Toronto | | 2 | Alison Mathews | Ottawa | | 3 | James Smith | Ottawa | | 4 | Celia Rice | Ottawa | | 5 | Robert Black | Ottawa | | 8 | James Cat | Ottawa | | 9 | James Bond | London | | 10 | Hercule Poirot | Brussels | | 12 | Sherlock Holmes | Manchester | +----+---+---+ 9 rows in set (0.00 sec)

Menghapus data dari tabel

(40)

DELETE. Berikut adalah bentuk dasar dari command DELETE:

DELETE FROM <table_name>

WHERE (<column_name> = 'some_value');

Berikut adalah contoh menghapus data menggunakan DELETE:

mysql> SELECT * FROM employee2; +----+---+---+ | id | name | city | +----+---+---+ | 1 | Jason Martin | Toronto | | 2 | Alison Mathews | Ottawa | | 3 | James Smith | Ottawa | | 4 | Celia Rice | Ottawa | | 5 | Robert Black | Ottawa | | 6 | Linda Green | New York | | 7 | David Larry | New York | | 8 | James Cat | Ottawa | | 9 | James Bond | London | | 10 | Hercule Poirot | Brussels | | 11 | Lincoln Rhyme | New York | | 12 | Sherlock Holmes | London | +----+---+---+ 12 rows in set (0.00 sec)

mysql> DELETE FROM employee2 WHERE city = 'New York'; Query OK, 3 rows affected (0.39 sec)

mysql> SELECT * FROM employee2; +----+---+---+ | id | name | city | +----+---+---+ | 1 | Jason Martin | Toronto | | 2 | Alison Mathews | Ottawa | | 3 | James Smith | Ottawa | | 4 | Celia Rice | Ottawa | | 5 | Robert Black | Ottawa | | 8 | James Cat | Ottawa | | 9 | James Bond | London | | 10 | Hercule Poirot | Brussels | | 12 | Sherlock Holmes | London | +----+---+---+ 9 rows in set (0.00 sec)

(41)
(42)

Pertemuan 3 Query

SELECT Statement

Mengambil data dengan SELECT

Data yang telah kita simpan dalam tabel dapat kita ambil menggunakan statement SELECT. Bentuk

dasar statement SELECT adalah

SELECT what_to_select FROM which_table

WHERE conditions_to_satisfy

what_to_select adalah informasi apa yang ingin kita lihat, biasanya berupa sekumpulan kolom.

Karakter “*” (bintang) dapat digunakan untuk menampilkan semua kolom.

which_table menunjukkan dari tabel mana informasi tersebut akan kita ambil.

Klause WHERE bersifat opsional, diikuti dengan conditions_to_satisfy yang menunjukkan kondisi

yang harus dipenuhi oleh sebuah baris informasi agar dapat dipilih.

Contoh penggunaan SELECT adalah sebagai berikut:

mysql> use PRAK2

Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed

mysql> SHOW TABLES; +---+ | Tables_in_PRAK2 | +---+ | TABLE1 | | TABLE2 | | TABLE3 | | TABLE4 | | TABLE5 | | cars | | employee | | employee2 | | senior_employee | +---+ 9 rows in set (0.00 sec) mysql> SELECT * FROM employee;

+----+---+---+---+---+---+---+---+

(43)

| id | first_name | last_name | start_date | end_date | salary | city | description |

+----+---+---+---+---+---+---+---+

| 1 | Jason | Martin | 1996-07-25 | 2006-07-25 | 1235.56 | Toronto | Programmer |

| 2 | Alison | Mathews | 1976-03-21 | 1986-02-21 | 6662.78 | Vancouver | Tester |

| 3 | James | Smith | 1978-12-12 | 1990-03-15 | 6545.78 | Vancouver | Tester |

| 4 | Celia | Rice | 1982-10-24 | 1999-04-21 | 2345.78 | Vancouver | Manager |

| 5 | Robert | Black | 1984-01-15 | 1998-08-08 | 2335.78 | Vancouver | Tester |

| 6 | Linda | Green | 1987-07-30 | 1996-01-04 | 4323.78 | New York | Tester |

| 7 | David | Larry | 1990-12-31 | 1998-02-12 | 7898.78 | New York | Manager |

| 8 | James | Cat | 1996-09-17 | 2002-04-15 | 1233.78 | Vancouver | Tester |

| 9 | James | Bond | 1982-04-21 | 2002-09-23 | 1235.56 | London | Spy |

| 10 | Hercule | Poirot | 1973-05-23 | 2001-08-09 | 4313.98 | Brussels | Detective |

| 11 | Lincoln | Rhyme | 1999-05-25 | 2011-07-13 | 3213.98 | New York | Forensics |

| 12 | Sherlock | Holmes | 1923-08-12 | 1945-07-21 | 4124.21 | London | Detective |

+----+---+---+---+---+---+---+---+

12 rows in set (0.00 sec)

Pada contoh di atas, kita menggunakan tabel employee yang telah kita buat pada Pertemuan 2 kemarin.

Perintah

SELECT * FROM employee

menampilkan semua baris data dan kolom dalam tabel employee.

Mengambil data pada kolom tertentu

Untuk mengambil data hanya pada kolom tertentu saja kita dapat menggunakan command SELECT

sebagai berikut:

mysql> SELECT first_name, last_name, city FROM employee; +---+---+---+

| first_name | last_name | city | +---+---+---+ | Jason | Martin | Toronto | | Alison | Mathews | Vancouver | | James | Smith | Vancouver | | Celia | Rice | Vancouver | | Robert | Black | Vancouver |

(44)

| Linda | Green | New York | | David | Larry | New York | | James | Cat | Vancouver | | James | Bond | London | | Hercule | Poirot | Brussels | | Lincoln | Rhyme | New York | | Sherlock | Holmes | London | +---+---+---+ 12 rows in set (0.00 sec)

Query menggunakan parameter kondisi WHERE

Statement WHERE dapat digunakan untuk memfilter data yang ingin kita ambil. Berikut adalah

beberapa contoh penggunaan parameter kondisi WHERE.

mysql> SELECT first_name, last_name, city FROM employee WHERE city = 'New York'; +---+---+---+

| first_name | last_name | city | +---+---+---+ | Linda | Green | New York | | David | Larry | New York | | Lincoln | Rhyme | New York | +---+---+---+ 3 rows in set (0.00 sec)

Query menggunakan beberapa parameter kondisional

Kita dapat memilih data menggunakan beberapa kombinasi parameter kondisional dihubungkan

dengan statement AND atau OR. Statement AND dapat juga ditulis sebagai '&&', sedangkan statement

OR juga dapat ditulis sebagai '||'. Statement AND memiliki precedence yang lebih tinggi

dibandingkan statement OR.

mysql> SELECT first_name, last_name, salary, city FROM employee WHERE city = 'New York' AND salary > 4000 ;

+---+---+---+---+ | first_name | last_name | salary | city | +---+---+---+---+ | Linda | Green | 4323.78 | New York | | David | Larry | 7898.78 | New York | +---+---+---+---+ 2 rows in set (0.00 sec)

mysql> SELECT first_name, last_name, city, description -> FROM employee

-> WHERE city = 'Toronto' OR description = 'Tester'; +---+---+---+---+

(45)

| first_name | last_name | city | description | +---+---+---+---+ | Jason | Martin | Toronto | Programmer | | Alison | Mathews | Vancouver | Tester | | James | Smith | Vancouver | Tester | | Robert | Black | Vancouver | Tester | | Linda | Green | New York | Tester | | James | Cat | Vancouver | Tester | +---+---+---+---+ 6 rows in set (0.00 sec)

Memberikan alias hasil query pada SELECT

Kita dapat memberikan alias pada kolom hasil pencarian dengan menggunakan keyword AS. Berikut

adalah contohnya:

mysql> SELECT CONCAT(first_name," ",last_name) AS name, description -> FROM employee

-> WHERE description = "Detective"; +---+---+ | name | description | +---+---+ | Hercule Poirot | Detective | | Sherlock Holmes | Detective | +---+---+ 2 rows in set (0.00 sec)

Query data bertipe teks dengan pattern matching

Pattern matching dapat kita gunakan untuk memilih data bertipe teks dengan karakteristik tertentu.

Command yang digunakan untuk melakukan pencocokan adalah LIKE dan NOT LIKE. Berikut adalah

beberapa fasilitas pattern matching yang disediakan oleh MySQL.

Simbol

Fungsi

_

Match any single character

%

Match an arbitrary number of character (including no character)

Berikut adalah contoh penggunaan pattern matching untuk memilih data:

mysql> SELECT CONCAT(first_name," ", last_name) -> FROM employee

-> WHERE first_name LIKE 'J____'; +---+ | CONCAT(first_name," ", last_name) | +---+ | Jason Martin |

(46)

| James Smith | | James Cat | | James Bond | +---+ 4 rows in set (0.00 sec)

Contoh di atas menunjukkan bagaimana memilih employee yang bernama depan diawali dengan huruf

“J” dan diikuti oleh tepat 4 buah karakter apapun.

mysql> SELECT CONCAT(first_name," ", last_name) -> FROM employee

-> WHERE first_name NOT LIKE '%n'; +---+ | CONCAT(first_name," ", last_name) | +---+ | James Smith | | Celia Rice | | Robert Black | | Linda Green | | David Larry | | James Cat | | James Bond | | Hercule Poirot | | Sherlock Holmes | +---+ 9 rows in set (0.00 sec)

Contoh di atas menunjukkan bagaimana memilih employee yang bernama depan tidak diakhiri

dengan karakter “n”.

Query data unik menggunakan DISTINCT

DISTINCT digunakan untuk menghilangkan duplikasi dari data yang dicari sehingga didapatkan data

yang unik (hanya muncul satu kali). Berikut adalah contohnya.

mysql> SELECT description FROM employee; +---+ | description | +---+ | Programmer | | Tester | | Tester | | Manager | | Tester | | Tester | | Manager | | Tester |

(47)

| Spy | | Detective | | Forensics | | Detective | +---+

12 rows in set (0.00 sec)

mysql> SELECT DISTINCT description FROM employee; +---+ | description | +---+ | Programmer | | Tester | | Manager | | Spy | | Detective | | Forensics | +---+

6 rows in set (0.00 sec)

Pada contoh di atas, ketika statement DISTINCT tidak digunakan, ditampilkan semua deskripsi dari tabel

employee. Ada deskripsi yang keluar lebih dari satu kali, misalnya “Programmer”. Namun, penggunaan

statement DISTINCT dalam query menampilkan data tanpa duplikasi, semua data hanya keluar satu kali.

Membatasi hasil query dengan LIMIT

Data yang dihasilkan dari query yang kita masukkan dapat kita batasi menggunakan statement LIMIT.

Berikut adalah contohnya.

mysql> SELECT * -> FROM employee -> LIMIT 5;

+----+---+---+---+---+---+---+---+

| id | first_name | last_name | start_date | end_date | salary | city | description |

+----+---+---+---+---+---+---+---+

| 1 | Jason | Martin | 1996-07-25 | 2006-07-25 | 1235.56 | Toronto | Programmer |

| 2 | Alison | Mathews | 1976-03-21 | 1986-02-21 | 6662.78 | Vancouver | Tester |

| 3 | James | Smith | 1978-12-12 | 1990-03-15 | 6545.78 | Vancouver | Tester |

| 4 | Celia | Rice | 1982-10-24 | 1999-04-21 | 2345.78 | Vancouver | Manager |

(48)

|

+----+---+---+---+---+---+---+---+

5 rows in set (0.00 sec)

Pada contoh query di atas, kita membatasi jumlah data yang ditampilkan sebanyak lima data saja

menggunakan statement LIMIT 5.

Kita juga dapat membatasi disertai pemilihan batasan tersebut ditampilkan mulai data keberapa, masih

menggunakan statement LIMIT. Berikut adalah contohnya.

mysql> SELECT * -> FROM employee -> LIMIT 2,3;

+----+---+---+---+---+---+---+---+

| id | first_name | last_name | start_date | end_date | salary | city | description |

+----+---+---+---+---+---+---+---+

| 3 | James | Smith | 1978-12-12 | 1990-03-15 | 6545.78 | Vancouver | Tester |

| 4 | Celia | Rice | 1982-10-24 | 1999-04-21 | 2345.78 | Vancouver | Manager |

| 5 | Robert | Black | 1984-01-15 | 1998-08-08 | 2335.78 | Vancouver | Tester |

+----+---+---+---+---+---+---+---+

3 rows in set (0.00 sec)

Pada contoh query di atas, kita membatasi data yang ditampilkan dimulai dari data ke-2 sebanyak 3

data. Hal yang perlu diperhatikan, urutan data dimulai dari urutan ke-0. Sehingga jika kita menampilkan

data menggunakan LIMIT 0,3 akan terlihat sebagai berikut:

mysql> SELECT * FROM employee LIMIT 0,3;

+----+---+---+---+---+---+---+---+

| id | first_name | last_name | start_date | end_date | salary | city | description |

+----+---+---+---+---+---+---+---+

| 1 | Jason | Martin | 1996-07-25 | 2006-07-25 | 1235.56 | Toronto | Programmer |

| 2 | Alison | Mathews | 1976-03-21 | 1986-02-21 | 6662.78 | Vancouver | Tester |

| 3 | James | Smith | 1978-12-12 | 1990-03-15 | 6545.78 | Vancouver | Tester |

+----+---+---+---+---+---+---+---+

Gambar

Tabel yang telah dibuat dapat dimodifikasi menggunakan command ALTER TABLE. Bentuk command  untuk ALTER TABLE adalah:
Tabel employee memiliki 8 kolom. Kita memasukkan 8 nilai menggunakan command INSERT. Satu buah  nilai diisi ke kolom sesuai dengan urutan penulisan nilai.
Table Join
Tabel instruktur

Referensi

Dokumen terkait

Mengumumkan Rencana Umum Pengadaan Barang/Jasa untuk pelaksanaan Kegiatan Tahun Anggaran 2012, seperti tersebut di bawah ini

Namun sisi menarik pembahasannya bahwa ketika Individu berinteraksi dengan kehidupan sosial budaya (anggota kelompok) berpengaruh terhadap perilaku keduanya.. Dan,

Adat istiadat, kesenian, kekerabatan, bahasa, dan bentuk fisik yang dimiliki oleh suku-suku bangsa yang ada di Indonesia memang berbeda, namun selain perbedaan

Berdasarkan fenomena banyaknya jumlah pengunjung Hotel Mercure Palu dalam setahun maka perlu adanya penelitian yang bertujuan untuk pengaruh bauran pemasaran jasa yang

Karena dengan kepuasan kerja manajer yang tinggi maka akan diperoleh hasil kerja yang baik sehingga akan dapat mencapai tujuan yang diinginkan dan tujuan

Perencanaan pengaturan Lalu Lintas adalah perencanaan manajemen dan rekayasa lalu lintas terhadap Kegiatan dan/atau usaha tertentu yang meliputi pengaturan sirkulasi di

Aplikasi yang berada pada kuadran high potential dan strategi mampu memberikan manfaat kompetitif kepada perusahaan karena dapat memberikan manfaat kompetitif serta dapat

Variabel dalam penelitian ini adalah: (a) variabel bebasnya adalah perbaikan kondisi kerja berbasis kearifan lokal yang relevan dengan konsep ergonomi; (b) variabel