Đối tượng mục tiêu cho bài viết này
-
MariaDB (hoặc MySQL) đã được cài đặt
-
Biết một số SQL
Nếu bạn đã nghe nói vềSELECT
vàINSERT
, bạn sẽ ổn thôi. -
Muốn chơi với DB bằng CLI (màn hình đen của thiết bị đầu cuối)
Nếu bạn muốn vận hành một DB quy mô đầy đủ, sẽ dễ dàng hơn khi sử dụng GUI như Sequel Pro, nhưng nếu bạn chỉ muốn chạm vào DB, thì việc sử dụng mycli trên thiết bị đầu cuối sẽ dễ dàng hơn.
※ Nếu bạn muốn đọc phiên bản tiếng Nhật của bài viết này,
làm ơn đi tới cái này.
Chuẩn bị Hãy thiết lập mycli!
Mycli vẫn là gì?
mycli là một giao diện CLI cho các hệ thống quản lý DB phổ biến như MySQL (và MariaDB).
※ mycli là viết tắt của MySQL db client.
Vậy bạn hài lòng với điều gì khi sử dụng mycli?
Phần tốt nhất là việc hoàn thành giúp bạn nhập lệnh trên thiết bị đầu cuối dễ dàng hơn và giảm lỗi chính tả.
- Các lệnh cơ bản sẽ được bổ sung.
- Tên bảng và các đề xuất hoàn thành khác sẽ được hiển thị.
- Dễ dàng nhìn thấy với cài đặt màu sắc.
Ảnh chụp màn hình ở trên hiển thị màn hình kết nối bằng lệnh mysql bình thường. Thật khó để xem và hoàn thành lệnh không hoạt động.
Đây là ảnh chụp màn hình kết nối với lệnh mycli. Nó có màu và có một danh sách ứng viên đẹp!
Cài đặt mycli
Bạn có thể cài đặt mycli bằng homebrew
hoặc pip
.
-- If you're Mac user
$ brew update
$ brew install mycli
-- If you're not
$ pip install mycli
Sau đó, kiểm tra mycli đã được cài đặt thành công.
$ mycli --version
Version: 1.21.1
Định cấu hình cài đặt của mycli, màu sắc, liên kết khóa, v.v. ,,,
Chúng tôi sẽ thay đổi tệp cấu hình ~/.myclirc
bằng cách tham khảo trang web chính thức của 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
Hãy thử điều chỉnh MariaDB (MySQL) với mycli.
Kết nối với DB (DataBase)
Nếu bạn chưa tạo DB hoặc nếu bạn không nhớ mình đã có loại DB nào, hãy bỏ qua tên cơ sở dữ liệu và thử "Kiểm tra danh sách DB" sau.
$ mycli -u(USER_NAME) -p(PASSWORD) [DATABASE_NAME]
-- example
$ mycli -uroot -pBARBAR foo_db
Kiểm tra danh sách DB
> SHOW DATABASES;
Tạo DB
> CREATE DATABASE IF NOT EXISTS test;
Xóa DB
> DROP DATABASE IF EXISTS test;
Kiểm tra tên máy chủ của đích kết nối.
> SHOW VARIABLES LIKE 'hostname';
Tạo bảng
Truy vấn sau sẽ tạo một bảng như thế này.
Đây là mối quan hệ trông như thế nào (được tạo bởi 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)
);
Hiển thị danh sách bảng
> SHOW TABLES;
Kiểm tra cấu trúc bảng
-- DESCRIBE is a synonym for EXPLAIN.
> DESCRIBE TABLE_NAME;
-- example
> DESCRIBE members;
Hiển thị truy vấn Tạo của Bảng
Bạn có thể nhận được nhiều thông tin chi tiết hơn các câu lệnh DESCRIBE từ truy vấn sau.
> SHOW CREATE TABLE TABLE_NAME;
Xóa bảng
> DROP TABLE IF EXISTS TABLE_NAME
You're about to run a destructive command.
Do you want to proceed? (y/n): y
Your call!
Kiểm tra chỉ mục
> 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 |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
Ý nghĩa của các chỉ dẫn trên như sau.
Item | Mô tả |
---|---|
Bảng | Tên bảng |
Non_unique | 0 nếu chỉ mục không thể chứa trùng lặp, 1 nếu có thể. |
Key_name | Tên chỉ mục nếu chỉ mục này là khóa chính thì tên của khóa luôn là CHÍNH |
Seq_in_index | Số thứ tự cột trong chỉ mục, bắt đầu từ 1. |
Column_name | Tên cột |
Đối chiếu | Cách sắp xếp cột; trong MySQL, đây là "A" (tăng dần) hoặc NULL (không được sắp xếp) |
Cardinality | Nó đề cập đến các loại giá trị mà một cột có thể nhận. Cardinality càng cao, càng có nhiều khả năng MySQL sẽ sử dụng chỉ mục này khi thực hiện phép nối. |
Sub_part | Nếu cột chỉ được lập chỉ mục một phần, số ký tự được lập chỉ mục. NULL nếu toàn bộ cột được lập chỉ mục. |
Đóng gói | Cho biết cách khóa sẽ được đóng gói. NULL nếu nó không được đóng gói. |
KHÔNG ĐỦ | Nếu cột này có thể chứa giá trị NULL, thì YES được sử dụng; nếu không, '' được sử dụng. |
Index_type | Phương pháp lập chỉ mục được sử dụng (BTREE 、 FULLTEXT 、 HASH 、 RTREE) |
Nhận xét | Thông tin về chỉ mục này (ví dụ:bị vô hiệu hóa nếu chỉ mục bị vô hiệu hóa) |
Index_comment | Bất kỳ nhận xét nào được cung cấp cho chỉ mục trong thuộc tính COMMENT khi chỉ mục được tạo. |
Thêm chỉ mục vào cột trong bảng đã được tạo
> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);
Xóa chỉ mục
> DROP INDEX INDEX_NAME ON TABLE_NAME;
-- Or that following is also OK
> ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME;
Cập nhật nhận xét chỉ mục
> 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";
Chèn dữ liệu
> 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');
Xóa dữ liệu
> DELETE FROM TABLE_NAME;
-- example1
DELETE FROM members;
-- example2
DELETE FROM members WHERE id=3;
Chọn dữ liệu
> SELECT COLUMN_NAME, FROM TABLE_NAME;
-- example1
> SELECT id, name FROM members;
-- example2
> SELECT * FROM members;
-- example3
> SELECT * FROM members WHERE id=3;
+ α Nơi tác giả từng gặp khó khăn.
Các cột có AUTO_INCREMENT
ràng buộc phải được đặt thành khóa.
Hãy thêm các chỉ mục và đặt 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')
Không thể DROP INDEX
Kiểm tra chỉ mục sau bằng cách sử dụng SHOW INDEX
và cố gắng xóa PRIMARY
nhưng,,,
> 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")
Lý do là tên chỉ mục của khóa chính luôn là PRIMARY, nhưng PRIMARY là một từ dành riêng, vì vậy bạn phải chỉ định nó làm định danh được trích dẫn nếu không sẽ xảy ra lỗi. Nó sẽ hoạt động nếu bạn đính kèm nó trong một backquote như sau
> ALTER TABLE members DROP INDEX `PRIMARY`;
Lưu ý:bạn không thể BỎ KHÓA của cột chỉ có một KHÓA vì AUTO_INCREMENT
được thiết lập.
Tham khảo
tài liệu chính thức của mycli
MyCLI - Ứng dụng khách MySQL / MariaDB với tính năng Tự động hoàn thành và tô sáng cú pháp / TecMint