Sunday, January 8, 2017

Bab 11. PHP/MySQL Untuk Pemula


Database Lanjut



Menciptakan Database Dan Tabel
Di sini, Anda akan menciptakan sebuah database dengan nama forum, sebagai berikut:

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

mysql> USE forum;
Database changed

Selanjutnya, Anda menciptakan sebuah tabel dengan nama forum.

mysql> CREATE TABLE forums(
    -> id_forum TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
    -> nama VARCHAR(60) NOT NULL,
    -> PRIMARY KEY (id_forum));
Query OK, 0 rows affected (0.35 sec)

Kemudian, Anda menciptakan sebuah tabel dengan nama pesan.

mysql> CREATE TABLE pesan(
    -> id_pesan INT UNSIGNED NOT NULL AUTO_INCREMENT,
    -> id_forum TINYINT UNSIGNED NOT NULL,
    -> id_induk INT UNSIGNED NOT NULL,
    -> id_pengguna MEDIUMINT UNSIGNED NOT NULL,
    -> subjek VARCHAR(100) NOT NULL,
    -> tubuh LONGTEXT NOT NULL,
    -> tanggal_dimasukkan TIMESTAMP NOT NULL,
    -> PRIMARY KEY(id_pesan));
Query OK, 0 rows affected (0.26 sec)

Kemudian, Anda menciptakan sebuah tabel dengan nama pengguna.

mysql> CREATE TABLE pengguna(
    -> id_pengguna MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
    -> namapengguna VARCHAR(30) NOT NULL,
    -> pass CHAR(40) NOT NULL,
    -> nama_depan VARCHAR(20) NOT NULL,
    -> nama_belakang VARCHAR(40) NOT NULL,
    -> email VARCHAR(80) NOT NULL,
    -> PRIMARY KEY (id_pengguna));
Query OK, 0 rows affected (0.29 sec)

Jika diperlukan, Anda bisa memastikan struktur database, sebagai berikut:

mysql> SHOW TABLES;
+-----------------+
| Tables_in_forum |
+-----------------+
| forums          |
| pengguna        |
| pesan           |
+-----------------+
3 rows in set (0.00 sec)

mysql> SHOW COLUMNS FROM forums;
+----------+---------------------+------+-----+---------+----------------+
| Field    | Type                | Null | Key | Default | Extra          |
+----------+---------------------+------+-----+---------+----------------+
| id_forum | tinyint(3) unsigned | NO   | PRI | NULL    | auto_increment |
| nama     | varchar(60)         | NO   |     | NULL    |                |
+----------+---------------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

mysql> SHOW COLUMNS FROM pesan;
+--------------------+-----------------------+------+-----+---------+----------------+
| Field              | Type                  | Null | Key | Default | Extra          |
+--------------------+-----------------------+------+-----+---------+----------------+
| id_pesan           | int(10) unsigned      | NO   | PRI | NULL    | auto_increment |
| id_forum           | tinyint(3) unsigned   | NO   |     | NULL    |                |
| id_induk           | int(10) unsigned      | NO   |     | NULL    |                |
| id_pengguna        | mediumint(8) unsigned | NO   |     | NULL    |                |
| subjek             | varchar(100)          | NO   |     | NULL    |                |
| tubuh              | longtext              | NO   |     | NULL    |                |
| tanggal_dimasukkan | timestamp             | NO   |     | NULL    |                |
+--------------------+-----------------------+------+-----+---------+----------------+
7 rows in set (0.01 sec)

mysql> SHOW COLUMNS FROM pengguna;
+---------------+-----------------------+------+-----+---------+----------------+
| Field         | Type                  | Null | Key | Default | Extra          |
+---------------+-----------------------+------+-----+---------+----------------+
| id_pengguna   | mediumint(8) unsigned | NO   | PRI | NULL    | auto_increment |
| namapengguna  | varchar(30)           | NO   |     | NULL    |                |
| pass          | char(40)              | NO   |     | NULL    |                |
| nama_depan    | varchar(20)           | NO   |     | NULL    |                |
| nama_belakang | varchar(40)           | NO   |     | NULL    |                |
| email         | varchar(80)           | NO   |     | NULL    |                |
+---------------+-----------------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)


Mengisi Database
Sekarang, Anda akan menambahkan beberapa rekaman pada tabel forums, sebagai berikut:

mysql> INSERT INTO forums(nama) VALUES
    -> ('MySQL'), ('PHP'), ('Sport'), ('HTML'), ('CSS'), ('Java');
Query OK, 6 rows affected (0.04 sec)
Records: 6  Duplicates: 0  Warnings: 0

Dan menambahkan beberapa rekaman pada tabel pengguna, sebagai berikut:

mysql> INSERT INTO pengguna(namapengguna, pass, nama_depan, nama_belakang, email) VALUES
    -> ('pendobrak', SHA1('passku'), 'Rismon', 'Sianipar', 'rismon@contoh.com'),
    -> ('pemberani', SHA1('passmu'), 'David', 'Rupidara', 'david@contoh.com');
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

Selanjutnya, Anda menambahkan beberapa rekaman pada tabel pesan, sebagai berikut:

mysql> SELECT * FROM forums;
+----------+-------+
| id_forum | nama  |
+----------+-------+
|        1 | MySQL |
|        2 | PHP   |
|        3 | Sport |
|        4 | HTML  |
|        5 | CSS   |
|        6 | Java  |
+----------+-------+
6 rows in set (0.00 sec)

mysql> SELECT id_pengguna, namapengguna FROM pengguna;
+-------------+--------------+
| id_pengguna | namapengguna |
+-------------+--------------+
|           1 | pendobrak    |
|           2 | pemberani    |
+-------------+--------------+
2 rows in set (0.00 sec)

mysql> INSERT INTO pesan (id_forum, id_induk,
    -> id_pengguna, subjek, tubuh) VALUES
    -> (1, 0, 1, 'Pertanyaan tentang normalisasi.',
    -> 'Saya bingung tentang normalisasi...'),
    -> (1, 0, 2, 'Perancangan Database',
    -> 'Saya sedang menciptakan sebuah database baru dan
    '> memiliki masalah dengan struktur.
    '> Berapa banyak tabel yang diperlukan?...'),
    -> (1, 2, 1, 'Perancangan Database',
    -> 'Jumlah tabel dalam database Anda sejumlah...'),
    -> (1, 3, 2, 'Perancangan Database',
    -> 'Oke, terimakasih!'),
    -> (2, 0, 2, 'Error PHP',
    -> 'Saya sedang menggunakan skrip PHP dan tidak bisa
    '> menggunakan contoh kalkulator...');
Query OK, 5 rows affected, 1 warning (0.04 sec)
Records: 5  Duplicates: 0  Warnings: 1


Memanfaatkan phpMyAdmin
Anda bisa memanfaatkan phpMyAdmin untuk menambahkan rekaman pada tabel pengguna, dengan mengklik tab Insert, sebagai berikut:






Anda bisa memanfaatkan phpMyAdmin untuk menambahkan rekaman pada tabel pesan, dengan mengklik tab Insert, sebagai berikut:



Menggabungkan Tabel
Penggabungan dalam (inner) menghasilkan semua rekaman dari tabel-tabel ketika terjadi kecocokan. Sebagai contoh, untuk mencari setiap pesan di dalam forum Java, penggabungan dalam akan dituliskan sebagai berikut:

mysql> SELECT * FROM pesan INNER JOIN forums
    -> ON pesan.id_forum = forums.id_forum
    -> WHERE forums.nama = 'Java';
+----------+----------+----------+-------------+-------------------+-------------------------------------+---------------------+----------+------+
| id_pesan | id_forum | id_induk | id_pengguna | subjek            | tubuh                               | tanggal_dimasukkan  | id_forum | nama |
+----------+----------+----------+-------------+-------------------+-------------------------------------+---------------------+----------+------+
|       19 |        6 |        0 |           4 | Mengapa?          | Saya tidak paham...                 | 2014-08-15 23:53:15 |        6 | Java |
|       20 |        6 |       15 |           4 | Mengapa? Mengapa? | Saya sama sekali tidak mengerti???? | 2014-08-15 23:53:42 |        6 | Java |
+----------+----------+----------+-------------+-------------------+-------------------------------------+---------------------+----------+------+
2 rows in set (0.00 sec)

Penggabungan dalam dapat pula dituliskan tanpa secara formal menggunakan INNER JOIN, sebagai berikut:

mysql> SELECT * FROM pesan, forums
    -> WHERE pesan.id_forum = forums.id_forum
    -> AND forums.nama = 'Java';
+----------+----------+----------+-------------+-------------------+-------------------------------------+---------------------+----------+------+
| id_pesan | id_forum | id_induk | id_pengguna | subjek            | tubuh                               | tanggal_dimasukkan  | id_forum | nama |
+----------+----------+----------+-------------+-------------------+-------------------------------------+---------------------+----------+------+
|       19 |        6 |        0 |           4 | Mengapa?          | Saya tidak paham...                 | 2014-08-15 23:53:15 |        6 | Java |
|       20 |        6 |       15 |           4 | Mengapa? Mengapa? | Saya sama sekali tidak mengerti???? | 2014-08-15 23:53:42 |        6 | Java |
+----------+----------+----------+-------------+-------------------+-------------------------------------+---------------------+----------+------+
2 rows in set (0.00 sec)

Penggabungan luar (outer) berbeda dari penggabungan dalam dimana penggabungan luar menghasilkan rekaman-rekaman yang tidak cocok dengan suatu kondisi. Ada tidak subtipe penggabungan luar: left, right, dan full. Sebuah contoh penggabungan left adalah:

mysql> SELECT * FROM forums LEFT JOIN pesan
    -> ON forums.id_forum = pesan.id_forum;
+----------+-------+----------+----------+----------+-------------+---------------------------------+-------------------------------------------------+---------------------+
| id_forum | nama  | id_pesan | id_forum | id_induk | id_pengguna | subjek                          | tubuh                                           | tanggal_dimasukkan  |
+----------+-------+----------+----------+----------+-------------+---------------------------------+-------------------------------------------------+---------------------+
|        1 | MySQL |        1 |        1 |        0 |           1 | Pertanyaan tentang normalisasi. | Saya bingung tentang normalisasi...             | 0000-00-00 00:00:00 |
|        1 | MySQL |        2 |        1 |        0 |           2 | Perancangan Database            | Saya sedang menciptakan sebuah database baru    | 0000-00-00 00:00:00 |
|        1 | MySQL |        3 |        1 |        2 |           1 | Perancangan Database            | Jumlah tabel dalam database Anda sejumlah...    | 0000-00-00 00:00:00 |
|        1 | MySQL |        4 |        1 |        3 |           2 | Perancangan Database            | Oke, terimakasih!                               | 0000-00-00 00:00:00 |
|        2 | PHP   |        5 |        2 |        0 |           2 | Error PHP                       | Saya sedang menggunakan skrip PHP dan tidak bisa
                                                                                                      menggunakan contoh kalkulator...                | 0000-00-00 00:00:00 |
|        2 | PHP   |        6 |        2 |        5 |           1 | Error PHP                       | Pertanyaan seputar sekuritas PHP...             | 2014-08-15 23:45:09 |
|        2 | PHP   |        7 |        2 |        6 |           3 | Error PHP                       | Saya belum mengerti untuk menggunakan
                                                                                                      metode sekuritas PHP...                         | 2014-08-15 23:46:09 |
|        2 | PHP   |        8 |        2 |        7 |           1 | Error PHP                       | Ini yang saya belum bisa...                     | 2014-08-15 23:46:40 |
|        2 | PHP   |        9 |        2 |        0 |           3 | HTML Dinamis menggunakan PHP    | HTML Dinamis menggunakan PHP...Apa itu?         | 2014-08-15 23:49:01 |
|        2 | PHP   |       10 |        2 |       16 |           1 | HTML Dinamis menggunakan PHP    | HTML Dinamis menggunakan PHP...
                                                                                                      Saya belum bisa...                              | 2014-08-15 23:49:25 |
|        2 | PHP   |       11 |        2 |       17 |           1 | HTML Dinamis menggunakan PHP    | HTML Dinamis menggunakan PHP...
                                                                                                      Saya masih baru belajar...                      | 2014-08-15 23:49:46 |
|        2 | PHP   |       12 |        2 |       18 |           2 | HTML Dinamis menggunakan PHP    | HTML Dinamis menggunakan PHP...Ajarin dong...?  | 2014-08-15 23:50:05 |
|        3 | Sport |       13 |        3 |        0 |           2 | Rex Grossman                    | Rex Grossman...Siapa dia?                       | 2014-08-15 23:50:41 |
|        3 | Sport |       14 |        3 |        9 |           1 | Rex Grossman                    | Rex Grossman...Saya tidak tahu dia...?          | 2014-08-15 23:51:02 |
|        4 | HTML  |       15 |        4 |        0 |           3 | HTML versus XHTML               | HTML versus XHTML...Apa bedanya?                | 2014-08-15 23:51:33 |
|        4 | HTML  |       16 |        4 |       13 |           1 | HTML versus XHTML               | HTML versus XHTML...Ajarin dong?                | 2014-08-15 23:51:51 |
|        5 | CSS   |       17 |        5 |        0 |           3 | CSS Resources                   | Ajarin CSS ya?...                               | 2014-08-15 23:52:25 |
|        5 | CSS   |       18 |        5 |       11 |           1 | CSS Resources                   | Itu untuk Apa????                               | 2014-08-15 23:52:44 |
|        6 | Java  |       19 |        6 |        0 |           4 | Mengapa?                        | Saya tidak paham...                             | 2014-08-15 23:53:15 |
|        6 | Java  |       20 |        6 |       15 |           4 | Mengapa? Mengapa?               | Saya sama sekali tidak mengerti????             | 2014-08-15 23:53:42 |
+----------+-------+----------+----------+----------+-------------+---------------------------------+-------------------------------------------------+---------------------+
20 rows in set (0.00 sec)

Anda bisa membaca nama forum dan subjek pesan untuk tiap rekaman di dalam tabel pesan, sebagai berikut:

mysql> SELECT f.nama, m.subjek FROM forums
    -> AS f INNER JOIN pesan AS m
    -> USING(id_forum) ORDER BY f.nama;
+-------+---------------------------------+
| nama  | subjek                          |
+-------+---------------------------------+
| CSS   | CSS Resources                   |
| CSS   | CSS Resources                   |
| HTML  | HTML versus XHTML               |
| HTML  | HTML versus XHTML               |
| Java  | Mengapa? Mengapa?               |
| Java  | Mengapa?                        |
| MySQL | Perancangan Database            |
| MySQL | Perancangan Database            |
| MySQL | Perancangan Database            |
| MySQL | Pertanyaan tentang normalisasi. |
| PHP   | HTML Dinamis menggunakan PHP    |
| PHP   | HTML Dinamis menggunakan PHP    |
| PHP   | Error PHP                       |
| PHP   | HTML Dinamis menggunakan PHP    |
| PHP   | Error PHP                       |
| PHP   | Error PHP                       |
| PHP   | HTML Dinamis menggunakan PHP    |
| PHP   | Error PHP                       |
| Sport | Rex Grossman                    |
| Sport | Rex Grossman                    |
+-------+---------------------------------+
20 rows in set (0.00 sec)

Anda bisa pula membaca subjek dan tanggal untuk tiap pesan yang dikirimkan oleh pengguna pendobrak, sebagai berikut:

mysql> SELECT m.subjek,
    -> DATE_FORMAT(m.tanggal_dimasukkan, '%M %D, %Y')
    -> AS Date FROM pengguna
    -> AS u INNER JOIN pesan AS m
    -> USING(id_pengguna)
    -> WHERE u.namapengguna = 'pendobrak';
+---------------------------------+-------------------+
| subjek                          | Date              |
+---------------------------------+-------------------+
| Pertanyaan tentang normalisasi. | NULL              |
| Perancangan Database            | NULL              |
| Error PHP                       | August 15th, 2014 |
| Error PHP                       | August 15th, 2014 |
| HTML Dinamis menggunakan PHP    | August 15th, 2014 |
| HTML Dinamis menggunakan PHP    | August 15th, 2014 |
| Rex Grossman                    | August 15th, 2014 |
| HTML versus XHTML               | August 15th, 2014 |
| CSS Resources                   | August 15th, 2014 |
+---------------------------------+-------------------+
9 rows in set (0.00 sec)

Kemudian, Anda bisa membaca id pesan, subjek, dan nama forum untuk tiap pesan yang dikirimkan oleh pengguna pemberani, sebagai berikut:

mysql> SELECT m.id_pesan, m.subjek,
    -> f.nama FROM pengguna AS u INNER JOIN
    -> pesan AS m USING(id_pengguna)
    -> INNER JOIN forums AS f
    -> USING(id_forum)
    -> WHERE u.namapengguna = 'pemberani';
+----------+------------------------------+-------+
| id_pesan | subjek                       | nama  |
+----------+------------------------------+-------+
|        2 | Perancangan Database         | MySQL |
|        4 | Perancangan Database         | MySQL |
|        5 | Error PHP                    | PHP   |
|       12 | HTML Dinamis menggunakan PHP | PHP   |
|       13 | Rex Grossman                 | Sport |
+----------+------------------------------+-------+
5 rows in set (0.00 sec)

Selanjutnya, Anda bisa membaca nama pengguna, subjek pesan, dan nama forum untuk setiap pengguna, sebagai berikut:

mysql> SELECT u.namapengguna, m.subjek,
    -> f.nama FROM pengguna AS u LEFT JOIN
    -> pesan AS m USING(id_pengguna)
    -> LEFT JOIN forums AS f
    -> USING(id_forum);
+--------------+---------------------------------+-------+
| namapengguna | subjek                          | nama  |
+--------------+---------------------------------+-------+
| pendobrak    | Pertanyaan tentang normalisasi. | MySQL |
| pemberani    | Perancangan Database            | MySQL |
| pendobrak    | Perancangan Database            | MySQL |
| pemberani    | Perancangan Database            | MySQL |
| pemberani    | Error PHP                       | PHP   |
| pendobrak    | Error PHP                       | PHP   |
| pengamat     | Error PHP                       | PHP   |
| pendobrak    | Error PHP                       | PHP   |
| pengamat     | HTML Dinamis menggunakan PHP    | PHP   |
| pendobrak    | HTML Dinamis menggunakan PHP    | PHP   |
| pendobrak    | HTML Dinamis menggunakan PHP    | PHP   |
| pemberani    | HTML Dinamis menggunakan PHP    | PHP   |
| pemberani    | Rex Grossman                    | Sport |
| pendobrak    | Rex Grossman                    | Sport |
| pengamat     | HTML versus XHTML               | HTML  |
| pendobrak    | HTML versus XHTML               | HTML  |
| pengamat     | CSS Resources                   | CSS   |
| pendobrak    | CSS Resources                   | CSS   |
+--------------+---------------------------------+-------+
18 rows in set (0.00 sec)


Mengelompokkan Hasil Terseleksi
Anda bisa menghitung jumlah pengguna yang terdaftar, sebagai berikut:

mysql> SELECT COUNT(id_pengguna) FROM pengguna;
+--------------------+
| COUNT(id_pengguna) |
+--------------------+
|                  3 |
+--------------------+
1 row in set (0.00 sec)

Selanjutnya, Anda bisa menghitung berapa kali setiap pengguna mengirimkan pesan, sebagai berikut:

mysql> SELECT namapengguna,
    -> COUNT(id_pesan) AS Number
    -> FROM pengguna LEFT JOIN pesan AS m
    -> USING(id_pengguna) GROUP BY (m.id_pengguna);
+--------------+--------+
| namapengguna | Number |
+--------------+--------+
| pendobrak    |      9 |
| pemberani    |      5 |
| pengamat     |      4 |
+--------------+--------+
3 rows in set (0.01 sec)

Berikutnya, Anda bisa mencari dua pengguna yang paling banyak mengirimkan pesan, sebagai berikut:

mysql> SELECT namapengguna,
    -> COUNT(id_pesan) AS Number
    -> FROM pengguna LEFT JOIN pesan AS m
    -> USING(id_pengguna) GROUP BY (m.id_pengguna)
    -> ORDER BY Number DESC LIMIT 2;
+--------------+--------+
| namapengguna | Number |
+--------------+--------+
| pendobrak    |      9 |
| pemberani    |      5 |
+--------------+--------+
2 rows in set (0.00 sec)



Menambahkan Indeks
Anda bisa menambahkan indeks pada kolom nama dalam tabel forums, sebagai berikut:

mysql> ALTER TABLE forums ADD UNIQUE(nama);
Query OK, 0 rows affected (0.32 sec)
Records: 0  Duplicates: 0  Warnings: 0

Anda juga bisa menambahkan indeks pada tabel pesan, sebagai berikut:

mysql> ALTER TABLE pesan
    -> ADD INDEX(id_forum),
    -> ADD INDEX(id_induk),
    -> ADD INDEX(id_pengguna),
    -> ADD FULLTEXT(tubuh, subjek),
    -> ADD INDEX(tanggal_dimasukkan);
Query OK, 0 rows affected, 1 warning (3.37 sec)
Records: 0  Duplicates: 0  Warnings: 1

Selanjutnya, Anda menambahkan indeks pada tabel pengguna, sebagai berikut:

mysql> ALTER TABLE pengguna
    -> ADD UNIQUE(namapengguna),
    -> ADD INDEX(pass, namapengguna),
    -> ADD UNIQUE(email);
Query OK, 0 rows affected (0.50 sec)
Records: 0  Duplicates: 0  Warnings: 0

Sekarang, Anda bisa melihat struktur tiap tabel, sebagai berikut:

mysql> DESCRIBE forums;
+----------+---------------------+------+-----+---------+----------------+
| Field    | Type                | Null | Key | Default | Extra          |
+----------+---------------------+------+-----+---------+----------------+
| id_forum | tinyint(3) unsigned | NO   | PRI | NULL    | auto_increment |
| nama     | varchar(60)         | NO   | UNI | NULL    |                |
+----------+---------------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

mysql> DESCRIBE pesan;
+--------------------+-----------------------+------+-----+---------+----------------+
| Field              | Type                  | Null | Key | Default | Extra          |
+--------------------+-----------------------+------+-----+---------+----------------+
| id_pesan           | int(10) unsigned      | NO   | PRI | NULL    | auto_increment |
| id_forum           | tinyint(3) unsigned   | NO   | MUL | NULL    |                |
| id_induk           | int(10) unsigned      | NO   | MUL | NULL    |                |
| id_pengguna        | mediumint(8) unsigned | NO   | MUL | NULL    |                |
| subjek             | varchar(100)          | NO   |     | NULL    |                |
| tubuh              | longtext              | NO   | MUL | NULL    |                |
| tanggal_dimasukkan | timestamp             | NO   | MUL | NULL    |                |
+--------------------+-----------------------+------+-----+---------+----------------+
7 rows in set (0.01 sec)

mysql> DESCRIBE pengguna;
+---------------+-----------------------+------+-----+---------+----------------+
| Field         | Type                  | Null | Key | Default | Extra          |
+---------------+-----------------------+------+-----+---------+----------------+
| id_pengguna   | mediumint(8) unsigned | NO   | PRI | NULL    | auto_increment |
| namapengguna  | varchar(30)           | NO   | UNI | NULL    |                |
| pass          | char(40)              | NO   | MUL | NULL    |                |
| nama_depan    | varchar(20)           | NO   |     | NULL    |                |
| nama_belakang | varchar(40)           | NO   |     | NULL    |                |
| email         | varchar(80)           | NO   | UNI | NULL    |                |
+---------------+-----------------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)


Mengubah Tipe Tabel
Anda bisa melihat informasi tabel, sebagai berikut:





Jika diinginkan, Anda bisa mengubah tabel pesan menjadi MyISAM, sebagai berikut:

mysql> ALTER TABLE pesan ENGINE=MYISAM;
Query OK, 20 rows affected (0.48 sec)
Records: 20  Duplicates: 0  Warnings: 0

Anda bisa mengamati perubahan yang terjadi. Tampilkan status tabel secara vertikal.

mysql> SHOW TABLE STATUS \G
*************************** 1. row ***************************
           Name: forums
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 6
 Avg_row_length: 2730
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: 7
    Create_time: 2014-08-16 00:36:18
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
*************************** 2. row ***************************
           Name: pengguna
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 3
 Avg_row_length: 5461
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: 4
    Create_time: 2014-08-16 00:39:52
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
*************************** 3. row ***************************
           Name: pesan
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 20
 Avg_row_length: 83
    Data_length: 1676
Max_data_length: 281474976710655
   Index_length: 9216
      Data_free: 0
 Auto_increment: 21
    Create_time: 2014-08-16 00:46:22
    Update_time: 2014-08-16 00:46:22
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
3 rows in set (0.01 sec)


Melakukan Pencarian FULLTEXT
Anda bisa melakukan pencarian FULLTEXT untuk kata database.

mysql> USE forum;
Database changed
mysql> SELECT subjek, tubuh FROM pesan
    -> WHERE MATCH(tubuh, subjek)
    -> AGAINST('database');
+----------------------+--------------------------------------------------------------------------------------------------------------------+
| subjek               | tubuh                                                                                                                      |
+----------------------+--------------------------------------------------------------------------------------------------------------------+
| Perancangan Database | Jumlah tabel dalam database Anda sejumlah...                                                                               |
| Perancangan Database | Saya sedang menciptakan sebuah database baru dan
memiliki masalah dengan struktur.
Berapa banyak tabel yang diperlukan?... |
| Perancangan Database | Oke, terimakasih!                                                                                                          |
+----------------------+--------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.12 sec)


Anda juga bisa melakukan pencarian FULLTEXT  sembari menunjukkan relevansi, sebagai berikut:





Selain itu, Anda bisa melakukan pencarian FULLTEXT menggunakan beberapa katakunci, sebagai berikut:

mysql> SELECT subjek, tubuh FROM pesan
    -> WHERE MATCH(tubuh, subjek)
    -> AGAINST('html xhtml');
+------------------------------+-----------------------------------------------------------+
| subjek                       | tubuh                                                     |
+------------------------------+-----------------------------------------------------------+
| HTML versus XHTML            | HTML versus XHTML...Ajarin dong?                          |
| HTML versus XHTML            | HTML versus XHTML...Apa bedanya?                          |
| HTML Dinamis menggunakan PHP | HTML Dinamis menggunakan PHP...Saya masih baru belajar... |
| HTML Dinamis menggunakan PHP | HTML Dinamis menggunakan PHP...Saya belum bisa...         |
| HTML Dinamis menggunakan PHP | HTML Dinamis menggunakan PHP...Ajarin dong...?            |
| HTML Dinamis menggunakan PHP | HTML Dinamis menggunakan PHP...Apa itu?                   |
+------------------------------+-----------------------------------------------------------+
6 rows in set (0.02 sec)


Melakukan Pencarian Boolean FULLTEXT
Anda bisa melakukan pencarian boolean FULLTEXT yang mencari HTML, XHTML, atau (X)HTML, sebagai berikut:

mysql> SELECT subjek, tubuh FROM pesan
    -> WHERE MATCH(tubuh, subjek)
    -> AGAINST('#HTML' IN BOOLEAN MODE)\G
*************************** 1. row ***************************
subjek: HTML Dinamis menggunakan PHP
 tubuh: HTML Dinamis menggunakan PHP...Apa itu?
*************************** 2. row ***************************
subjek: HTML Dinamis menggunakan PHP
 tubuh: HTML Dinamis menggunakan PHP...Saya belum bisa...
*************************** 3. row ***************************
subjek: HTML Dinamis menggunakan PHP
 tubuh: HTML Dinamis menggunakan PHP...Saya masih baru belajar...
*************************** 4. row ***************************
subjek: HTML Dinamis menggunakan PHP
 tubuh: HTML Dinamis menggunakan PHP...Ajarin dong...?
*************************** 5. row ***************************
subjek: HTML versus XHTML
 tubuh: HTML versus XHTML...Apa bedanya?
*************************** 6. row ***************************
subjek: HTML versus XHTML
 tubuh: HTML versus XHTML...Ajarin dong?
6 rows in set (0.00 sec)

Selanjutnya, Anda bisa mencari kecocokan yang melibatkan database, dengan sebuah penekanan pada format-format normal, sebagai berikut:

mysql> SELECT subjek, tubuh FROM pesan
    -> WHERE MATCH(tubuh, subjek)
    -> AGAINST('>"normal form"* +database*'
    -> IN BOOLEAN MODE)\G
*************************** 1. row ***************************
subjek: Perancangan Database
 tubuh: Saya sedang menciptakan sebuah database baru dan
memiliki masalah dengan struktur.
Berapa banyak tabel yang diperlukan?...
*************************** 2. row ***************************
subjek: Perancangan Database
 tubuh: Jumlah tabel dalam database Anda sejumlah...
*************************** 3. row ***************************
subjek: Perancangan Database
 tubuh: Oke, terimakasih!
3 rows in set (0.00 sec)


Melakukan Transaksi
Pertama-tama, Anda perlu melakukan koneksi ke mysql client dan memilih database test. Karena ini hanya demonstrasi, maka akan digunakan database tujuan-umum, test.

Selanjutnya, Anda menciptakan tabel akun yang baru, sebagai berikut:

mysql> USE test
Database changed
mysql> CREATE TABLE akun(
    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    -> nama VARCHAR(40) NOT NULL,
    -> saldo DECIMAL(10,2) NOT NULL DEFAULT 0.0,
    -> PRIMARY KEY (id)
    -> )ENGINE=InnoDB;
Query OK, 0 rows affected (0.28 sec)

  
Selanjutnya, Anda mengisi tabel tersebut, sebagai berikut:

mysql> INSERT INTO akun(nama, saldo)
    -> VALUES ('Sarah Palin', 345.67),
    -> ('David Girsang', 37839.46),
    -> ('Krista Simanungkalit', 7394.36);
Query OK, 3 rows affected (0.05 sec)
Records: 3  Duplicates: 0  Warnings: 0

Berikutnya, Anda memulai transaksi dan menunjukkan isi terkini dari tabel, sebagai berikut:

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

mysql> SELECT * FROM akun;
+----+----------------------+----------+
| id | nama                 | saldo    |
+----+----------------------+----------+
|  1 | Sarah Palin          |   345.67 |
|  2 | David Girsang        | 37839.46 |
|  3 | Krista Simanungkalit |  7394.36 |
+----+----------------------+----------+
3 rows in set (0.00 sec)

Kurangkan Rp.100 dari akun David Girsang, sebagai berikut:

mysql> UPDATE akun
    -> SET saldo = (saldo - 100)
    -> WHERE id = 2;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Tambahkan Rp.100 pada akun Sarah Palin, sebagai berikut:

mysql> UPDATE akun
    -> SET saldo = (saldo + 100)
    -> WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Anda bisa memastikan hasil yang didapatkan, sebagai berikut:

mysql> SELECT * FROM akun;
+----+----------------------+----------+
| id | nama                 | saldo    |
+----+----------------------+----------+
|  1 | Sarah Palin          |   445.67 |
|  2 | David Girsang        | 37739.46 |
|  3 | Krista Simanungkalit |  7394.36 |
+----+----------------------+----------+
3 rows in set (0.00 sec)

Anda bisa melihat runtun perintah MySQL pada gambar berikut:



Anda bisa membatalkan transaksi yang telah dilakukan, sebagai berikut:

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

Anda bisa memastikan hasil yang didapatkan, sebagai berikut:

mysql> SELECT * FROM akun;
+----+----------------------+----------+
| id | nama                 | saldo    |
+----+----------------------+----------+
|  1 | Sarah Palin          |   345.67 |
|  2 | David Girsang        | 37839.46 |
|  3 | Krista Simanungkalit |  7394.36 |
+----+----------------------+----------+
3 rows in set (0.00 sec)

Agar transaksi tidak bisa dibatalkan dan bersifat permanen, Anda bisa memberikan perintah MySQL berikut:

COMMIT;
SELECT * FROM akun;



No comments:

Post a Comment