Target pemirsa untuk artikel ini
-
MariaDB (atau MySQL) sudah terinstal
-
Tahu beberapa SQL
Jika Anda pernah mendengar tentangSELECT
danINSERT
, kamu akan baik-baik saja. -
Ingin bermain-main dengan DB menggunakan CLI (layar hitam terminal)
Jika Anda ingin mengoperasikan DB skala penuh, lebih mudah menggunakan GUI seperti Sequel Pro, tetapi jika Anda hanya ingin menyentuh DB, lebih mudah menggunakan mycli di terminal.
Jika Anda ingin membaca versi Jepang dari artikel ini,
silakan buka yang ini.
Persiapan Ayo siapkan mycli!
Apa itu mycli?
mycli adalah antarmuka CLI untuk sistem manajemen DB umum seperti MySQL (dan MariaDB).
mycli adalah singkatan dari MySQL db client.
Jadi, apa yang membuat Anda senang menggunakan mycli?
Bagian terbaiknya adalah penyelesaiannya memudahkan mengetik perintah di terminal dan mengurangi kesalahan ketik.
- Perintah dasar akan dilengkapi.
- Nama tabel dan saran penyelesaian lainnya akan ditampilkan.
- Mudah dilihat dengan setelan warna.
Tangkapan layar di atas menunjukkan layar koneksi menggunakan perintah mysql normal. Sulit dilihat dan penyelesaian perintah tidak berfungsi.
Berikut adalah tangkapan layar koneksi dengan perintah mycli. Itu berwarna dan memiliki daftar kandidat yang bagus!
Instal mycli
Anda dapat menginstal mycli dengan homebrew
atau pip
.
-- If you're Mac user
$ brew update
$ brew install mycli
-- If you're not
$ pip install mycli
Setelah itu, centang mycli berhasil diinstal.
$ mycli --version
Version: 1.21.1
Konfigurasi pengaturan mycli, warna, ikatan kunci dll,,,
Kami akan mengubah file konfigurasi ~/.myclirc
dengan merujuk ke situs resmi mycli.
# Change coloro(The text will be a young grass color.)
syntax_style = native
# Change key bindings
key_bindings = vi
# Display a wider selection of candidates
wider_completion_menu = True
Mari kita coba tweak MariaDB (MySQL) dengan mycli.
Hubungkan ke DB(DataBase)
Jika Anda belum membuat DB, atau jika Anda tidak ingat jenis DB yang Anda miliki, hilangkan nama database dan coba "Periksa Daftar DB" berikut ini.
$ mycli -u(USER_NAME) -p(PASSWORD) [DATABASE_NAME]
-- example
$ mycli -uroot -pBARBAR foo_db
Periksa Daftar DB
> SHOW DATABASES;
Buat DB
> CREATE DATABASE IF NOT EXISTS test;
Hapus DB
> DROP DATABASE IF EXISTS test;
Periksa nama host tujuan koneksi.
> SHOW VARIABLES LIKE 'hostname';
Buat Tabel
Query berikut akan membuat tabel seperti ini.
Begini tampilan relasinya (dibuat oleh tbls)
CREATE TABLE TABLE_NAME (COLUMN_NAME DATA_TYPE CONSTRAINT,...
FOREIGN KEY INDEX_NAME (COLUMN_NAME, ...)
REFERENCES TABLE_NAME_TO_REFERENCE (COLUMN_NAME, ...),
INDEX INDEX_NAME(COLUMN_NAME) COMMENT 'COMMENT');
-- example
> CREATE TABLE IF NOT EXISTS members (
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(255) NOT NULL UNIQUE,
email varchar(255) NOT NULL UNIQUE,
password varchar(100) NOT NULL,
picture varchar(255) NOT NULL DEFAULT '/default_icon.jpg',
created DATETIME NOT NULL,
modified TIMESTAMP NOT NULL,
-- Index queries tend to be long, so I divide them as follows
INDEX idx_members_id_01(id) COMMENT 'for search member quickly'
);
> CREATE TABLE IF NOT EXISTS posts (
post_id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id MEDIUMINT NOT NULL,
content VARCHAR(900),
posted_at TIMESTAMP NOT NULL,
FOREIGN KEY fk_posts_userid_01(user_id)
REFERENCES members (id)
);
Tampilkan Daftar Tabel
> SHOW TABLES;
Periksa Struktur Tabel
-- DESCRIBE is a synonym for EXPLAIN.
> DESCRIBE TABLE_NAME;
-- example
> DESCRIBE members;
Tampilkan kueri Buat Tabel
Anda bisa mendapatkan informasi lebih rinci daripada pernyataan DESCRIBE dari kueri berikut.
> SHOW CREATE TABLE TABLE_NAME;
Hapus Tabel
> DROP TABLE IF EXISTS TABLE_NAME
You're about to run a destructive command.
Do you want to proceed? (y/n): y
Your call!
Periksa indeks
> SHOW INDEX FROM TABLE_NAME;
-- example
> SHOW INDEX FROM members;
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
| members | 0 | PRIMARY | 1 | id | A | 0 | <null> | <null> | | BTREE | | |
| members | 0 | name | 1 | name | A | 0 | <null> | <null> | | BTREE | | |
| members | 0 | email | 1 | email | A | 0 | <null> | <null> | | BTREE | | |
| members | 1 | idx_members_id_01 | 1 | id | A | 0 | <null> | <null> | | BTREE | | for search member quickly |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
Arti dari indikasi di atas adalah sebagai berikut.
Item | Deskripsi |
---|---|
Tabel | Nama tabel |
Non_unik | 0 jika indeks tidak boleh berisi duplikat, 1 jika bisa. |
Nama_kunci | Nama indeks jika indeks ini adalah kunci utama, nama kuncinya selalu PRIMARY |
Seq_in_index | Nomor urut kolom dalam indeks, mulai dari 1. |
Nama_kolom | Nama kolom |
Koleksi | Bagaimana kolom diurutkan; di MySQL, ini adalah "A" (naik) atau NULL (tidak disortir) |
Kardinalitas | Ini mengacu pada jenis nilai yang dapat diambil oleh kolom. Semakin tinggi kardinalitas, semakin besar kemungkinan MySQL akan menggunakan indeks ini saat melakukan join. |
Sub_part | Jika kolom hanya diindeks sebagian, jumlah karakter yang diindeks. NULL jika seluruh kolom diindeks. |
Dikemas | Menunjukkan bagaimana kunci akan dikemas. NULL jika tidak dikemas. |
NULL | Jika kolom ini dapat berisi nilai NULL, maka YES digunakan; jika tidak, '' digunakan. |
Tipe_indeks | Metode pengindeksan yang digunakan (BTREE、FULLTEXT、HASH、RTREE) |
Komentar | Informasi tentang indeks ini (misalnya dinonaktifkan jika indeks dinonaktifkan) |
Index_comment | Komentar apa pun yang diberikan untuk indeks di atribut COMMENT saat indeks dibuat. |
Menambahkan indeks ke kolom dalam tabel yang telah dibuat
> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);
Hapus indeks
> DROP INDEX INDEX_NAME ON TABLE_NAME;
-- Or that following is also OK
> ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME;
Perbarui komentar indeks
> ALTER TABLE TABLE_NAME
DROP INDEX INDEX_NAME,
ADD FULLTEXT INDEX INDEX_NAME (COLUMN_NAME) COMMENT "COMMENT";
-- example
> ALTER TABLE members
DROP INDEX idx_members_id_01,
ADD INDEX idx_members_01 (id) COMMENT "ARA ARA";
Masukkan data
> INSERT INTO TABLE_NAME (COLUMN_NAME) VALUES (VALUE);
-- example1
> INSERT INTO members
VALUES
(1, 'Nobunaga Oda', '[email protected]', 'HOGE', '/oda_icon.jpg', '2020-12-02 1:14:22', '2020-12-02 1:14:22');
-- example2
> INSERT INTO members
(name, email, password, picture, created)
VALUES
('Hideyoshi Toyotomi', '[email protected]', 'FUGA', '/toyo_icon.jpg', '2020-12-01 10:00:00');
Hapus data
> DELETE FROM TABLE_NAME;
-- example1
DELETE FROM members;
-- example2
DELETE FROM members WHERE id=3;
Pilih data
> SELECT COLUMN_NAME, FROM TABLE_NAME;
-- example1
> SELECT id, name FROM members;
-- example2
> SELECT * FROM members;
-- example3
> SELECT * FROM members WHERE id=3;
+α Tempat penulis pernah terjebak.
Kolom dengan AUTO_INCREMENT
batasan harus disetel ke kunci.
Mari tambahkan indeks dan atur PRIMARY KEY
.
CREATE TABLE members (
id INT NOT NULL AUTO_INCREMENT,
name varchar(255)
);
(1075, 'Incorrect table definition; there can be only one auto column and it must be defined as a key')
Tidak bisa DROP INDEX
Periksa indeks berikut menggunakan SHOW INDEX
, dan coba hapus PRIMARY
tetapi,,,
> ALTER TABLE members DROP INDEX PRIMARY;
(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'PRIMARY ON members' at line 1")
Alasannya adalah bahwa nama indeks dari kunci utama selalu PRIMARY, tetapi PRIMARY adalah kata yang dicadangkan, jadi Anda harus menentukannya sebagai pengenal yang dikutip atau kesalahan akan terjadi. Ini akan berfungsi jika Anda melampirkannya di backquote sebagai berikut
> ALTER TABLE members DROP INDEX `PRIMARY`;
Catatan:Anda tidak dapat MENGHAPUS KUNCI kolom yang hanya memiliki satu KUNCI karena AUTO_INCREMENT
sudah diatur.
Referensi
dokumen resmi mycli
MyCLI – Klien MySQL/MariaDB dengan Pelengkapan Otomatis dan Penyorotan Sintaks / TecMint