Semakin banyak tabel kita buat, semakin sulit mengingat detailnya: kolom apa saja yang ada di produk, tipe kolom harga, dan kolom mana yang wajib terisi. Untungnya MySQL menyimpan setiap definisi tabel di katalog internalnya, dan menyediakan empat cara membacanya. Pada Chapter ini kita akan memakai DESC untuk gambaran cepat, SHOW COLUMNS untuk hasil yang bisa difilter, SHOW CREATE TABLE untuk melihat statement pembuatnya yang asli, dan information_schema.COLUMNS untuk memeriksa metadata lewat query biasa.

Menyiapkan Tabel Contoh #

Kita siapkan kembali tabel produk — kali ini dengan kombinasi kolom wajib dan opsional supaya setiap perintah inspeksi menampilkan informasi yang beragam:

sql
CREATE DATABASE belajar_sql;
USE belajar_sql;
CREATE TABLE produk (
  id INT,
  nama VARCHAR(100) NOT NULL,
  harga DECIMAL(10,2),
  stok INT NOT NULL,
  tanggal_dibuat DATE
);

Output yang Dihasilkan:

text
Query OK, 1 row affected (0.00 sec)

Database changed
Query OK, 0 rows affected (0.00 sec)

Kolom nama dan stok didefinisikan NOT NULL — keduanya wajib terisi saat baris ditambahkan. Tiga kolom lainnya memakai aturan bawaan yang mengizinkan nilai NULL. Perbedaan inilah yang akan terlihat pada setiap hasil inspeksi di bawah.

DESCRIBE: Gambaran Cepat Struktur #

Perintah DESCRIBE menampilkan ringkasan kolom sebuah tabel dalam satu tabel hasil:

sql
DESCRIBE produk;

Output yang Dihasilkan:

text
+----------------+---------------+------+-----+---------+-------+
| Field          | Type          | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+-------+
| id             | int           | YES  |     | NULL    |       |
| nama           | varchar(100)  | NO   |     | NULL    |       |
| harga          | decimal(10,2) | YES  |     | NULL    |       |
| stok           | int           | NO   |     | NULL    |       |
| tanggal_dibuat | date          | YES  |     | NULL    |       |
+----------------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Mari kita bedah arti setiap kolom hasilnya:

  1. Field: Nama kolom sebagaimana didefinisikan pada CREATE TABLE.
  2. Type: Tipe kolom lengkap dengan parameternya — varchar(100), decimal(10,2), dan sebagainya.
  3. Null: NO bila kolom dideklarasikan NOT NULL, YES bila boleh kosong. Perhatikan nama dan stok bernilai NO sesuai definisi kita.
  4. Key: Menandai kolom yang berperan sebagai kunci — misalnya PRI untuk primary key. Tabel contoh kita belum punya kunci, sehingga kolom ini kosong.
  5. Default: Nilai bawaan kolom bila baris baru tidak menyebutkannya. Nilai NULL berarti kolom tidak punya nilai bawaan — berlaku juga untuk kolom wajib seperti nama, yang justru harus diisi secara eksplisit setiap kali baris ditambahkan.
  6. Extra: Informasi tambahan seperti auto_increment. Kolom kita tidak memakai fitur tersebut, jadi kosong.

DESC adalah singkatan resmi dari DESCRIBE — keduanya menghasilkan output yang persis sama:

sql
DESC produk;

Output yang Dihasilkan:

text
+----------------+---------------+------+-----+---------+-------+
| Field          | Type          | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+-------+
| id             | int           | YES  |     | NULL    |       |
| nama           | varchar(100)  | NO   |     | NULL    |       |
| harga          | decimal(10,2) | YES  |     | NULL    |       |
| stok           | int           | NO   |     | NULL    |       |
| tanggal_dibuat | date          | YES  |     | NULL    |       |
+----------------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

SHOW COLUMNS: Alternatif yang Bisa Difilter #

SHOW COLUMNS menampilkan informasi yang identik dengan DESCRIBE, tetapi menawarkan filter LIKE untuk memilih kolom tertentu — berguna pada tabel lebar dengan puluhan kolom:

sql
SHOW COLUMNS FROM produk;

Output yang Dihasilkan:

text
+----------------+---------------+------+-----+---------+-------+
| Field          | Type          | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+-------+
| id             | int           | YES  |     | NULL    |       |
| nama           | varchar(100)  | NO   |     | NULL    |       |
| harga          | decimal(10,2) | YES  |     | NULL    |       |
| stok           | int           | NO   |     | NULL    |       |
| tanggal_dibuat | date          | YES  |     | NULL    |       |
+----------------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Filternya bekerja seperti pencarian nama:

sql
SHOW COLUMNS FROM produk LIKE 'nama';

Output yang Dihasilkan:

text
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| nama  | varchar(100) | NO   |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
1 row in set (0.00 sec)

Pola 'nama' hanya mencocokkan kolom yang persis bernama nama. Kita juga bisa memakai tanda % sebagai wildcard — misalnya 'ta%' untuk mencocokkan tanggal_dibuat. Perintah DESC dan SHOW COLUMNS sama-sama cepat; pilihan di antara keduanya murni selera, dengan satu pengecualian: hanya SHOW COLUMNS yang mendukung filter langsung.

SHOW CREATE TABLE: Statement Aslinya #

Kedua perintah di atas merangkum struktur. SHOW CREATE TABLE melakukan hal yang berbeda: ia merekonstruksi statement CREATE TABLE lengkap yang menggambarkan tabel saat ini:

sql
SHOW CREATE TABLE produk\G

Output yang Dihasilkan:

text
*************************** 1. row ***************************
       Table: produk
Create Table: CREATE TABLE `produk` (
  `id` int DEFAULT NULL,
  `nama` varchar(100) NOT NULL,
  `harga` decimal(10,2) DEFAULT NULL,
  `stok` int NOT NULL,
  `tanggal_dibuat` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

Terminator \G menggantikan titik koma dan meminta klien mysql menampilkan hasil secara vertikal — satu nilai per baris — sehingga statement panjang tetap terbaca. Hasilnya memperlihatkan beberapa hal yang tidak terlihat pada DESC:

  1. Backtick pada nama: MySQL menuliskan `id` dan `nama` dengan tanda kutip terbalik. Penanda ini opsional pada nama biasa, tetapi wajib bila nama berisi karakter khusus atau bentrok dengan reserved word.
  2. DEFAULT NULL: Kolom yang boleh kosong dinyatakan eksplisit. MySQL melengkapi definisi kita dengan semua nilai bawaan secara implisit.
  3. ENGINE=InnoDB: Storage engine tabel — komponen yang mengelola penyimpanan dan transaksi.
  4. CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci: Character set dan collation tabel, mewarisi pengaturan server.

Karena SHOW CREATE TABLE menampilkan definisi apa adanya, perintah ini menjadi alat andalan untuk menyalin struktur tabel ke server lain atau membandingkan dua lingkungan.

information_schema.COLUMNS: Katalog Metadata #

Cara keempat memeriksa struktur adalah lewat database virtual information_schema. MySQL menyimpan metadata seluruh objek server di sana dalam bentuk tabel biasa, sehingga kita bisa mem-query-nya dengan SELECT:

sql
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'belajar_sql' AND TABLE_NAME = 'produk'
ORDER BY ORDINAL_POSITION;

Output yang Dihasilkan:

text
+----------------+-----------+-------------+
| COLUMN_NAME    | DATA_TYPE | IS_NULLABLE |
+----------------+-----------+-------------+
| id             | int       | YES         |
| nama           | varchar   | NO          |
| harga          | decimal   | YES         |
| stok           | int       | NO          |
| tanggal_dibuat | date      | YES         |
+----------------+-----------+-------------+
5 rows in set (0.00 sec)

Klausa WHERE memfilter baris metadata milik tabel produk di database belajar_sql, dan ORDER BY ORDINAL_POSITION mengurutkan hasil sesuai urutan kolom aslinya. Perbedaan mendasar dengan tiga perintah sebelumnya: information_schema bisa menjawab pertanyaan lintas tabel — misalnya menemukan seluruh kolom bernama nama di semua database, atau membuat laporan inventaris struktur. Karena berbasis SELECT, hasilnya juga mudah disaring, digabung, dan diurutkan sesuai kebutuhan.

Referensi #

Kita kini bisa membedah struktur tabel apa pun dari empat sudut berbeda. Peralatan ini akan sering terpakai — termasuk pada chapter berikutnya, ketika kita menghapus tabel dan database serta ingin memastikan objek yang dibuang memang benar sebelum lenyap.