Saturday, October 15, 2016

Pengantar MySQL

1. 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:

a. 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.
b. Program Client, adalah program yang digunakan untuk berkomunikasi dengan server untuk memanipulasi informasi dalam database yang ditangani server. Beberapa contoh program client:
1) MySQL Query Browser dan MySQL Administrator, menyediakan antarmuka grafis untuk akses ke server
2) mysql, program command line untuk akses ke server berbasis teks (ini yang akan kita gunakan)
3) 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
c. 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.

2. 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
--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

3. 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 |
+-----------+--------------+
1 row in set (0.00 sec)

Query tersebut mengilustrasikan tentang mysql:
a. Sebuah command normalnya terdiri atas perintah SQL diikuti oleh tanda titik koma (;).
b. 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.
c. mysql menampilkan hasil query dalam bentuk tabular (baris dan kolom). Baris pertama menunjukkan label untuk kolom tersebut. Baris selanjutnya adalah hasil query.
d. 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.

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. 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.
Pada contoh di atas
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'

4. 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 |
+-------+
1 row in set (0.00 sec)
mysql>

5. 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
||, OR Logical OR
+ 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 |
+---------+
1 row in set (0.00 sec)
mysql>


6. 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:

mysql> SELECT DATABASE();
+------------ +
| DATABASE() |
+------------ +
| pethouse |
+------------ +
1 row in set (0.00 sec)

7. 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>


8. 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;

6 rows in set (0.01 sec) 


9. 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;


10. 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>

No comments:

Post a Comment