この記事の対象読者
-
MariaDB(またはMySQL)はすでにインストールされています
-
SQLを知っている
SELECT
について聞いたことがある場合 およびINSERT
、大丈夫です。 -
CLI(端末の黒い画面)を使用してDBをいじりたい
フルスケールのDBを操作する場合は、Sequel ProなどのGUIを使用する方が簡単ですが、DBに触れるだけの場合は、ターミナルでmycliを使用する方が簡単です。
※この記事の日本語版を読みたい場合は、
これに行ってください。
準備mycliを設定しましょう!
とにかくmycliとは何ですか?
mycliは、MySQL(およびMariaDB)などの一般的なDB管理システム用のCLIインターフェイスです。
※mycliはMySQLデータベースクライアントの略です。
では、mycliを使用して何に満足していますか?
最良の部分は、補完により、端末でコマンドを入力しやすくなり、タイプミスを減らすことができることです。
- 基本的なコマンドが補完されます。
- テーブル名とその他の補完候補が表示されます。
- 色設定で見やすい。
上のスクリーンショットは、通常のmysqlコマンドを使用した接続画面を示しています。見づらく、コマンド補完が機能しません。
これは、mycliコマンドとの接続のスクリーンショットです。色付きで、候補者のリストがあります!
mycliをインストールする
mycliはhomebrew
でインストールできます またはpip
。
-- If you're Mac user
$ brew update
$ brew install mycli
-- If you're not
$ pip install mycli
その後、mycliが正常にインストールされていることを確認します。
$ mycli --version
Version: 1.21.1
mycliの設定、色、キーバインドなどを構成します、、、
構成ファイル~/.myclirc
を変更します 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
mycliでMariaDB(MySQL)を微調整してみましょう。
DB(データベース)に接続
DBをまだ作成していない場合、または使用しているDBの種類を覚えていない場合は、データベース名を省略して、次の「DBリストの確認」を試してください。
$ mycli -u(USER_NAME) -p(PASSWORD) [DATABASE_NAME]
-- example
$ mycli -uroot -pBARBAR foo_db
DBリストを確認する
> SHOW DATABASES;
DBを作成
> CREATE DATABASE IF NOT EXISTS test;
DBを削除
> DROP DATABASE IF EXISTS test;
接続先のホスト名を確認してください。
> SHOW VARIABLES LIKE 'hostname';
テーブルの作成
次のクエリは、このようなテーブルを作成します。
リレーションは次のようになります(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)
);
テーブルリストを表示
> SHOW TABLES;
テーブル構造を確認する
-- DESCRIBE is a synonym for EXPLAIN.
> DESCRIBE TABLE_NAME;
-- example
> DESCRIBE members;
テーブルの作成クエリを表示する
次のクエリから、DESCRIBEステートメントよりも詳細な情報を取得できます。
> SHOW CREATE TABLE TABLE_NAME;
テーブルの削除
> DROP TABLE IF EXISTS TABLE_NAME
You're about to run a destructive command.
Do you want to proceed? (y/n): y
Your call!
インデックスを確認する
> 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 |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
上記の表示の意味は次のとおりです。
アイテム | 説明 |
---|---|
テーブル | テーブル名 |
Non_unique | インデックスに重複を含めることができない場合は0、重複を含めることができる場合は1。 |
Key_name | インデックス名このインデックスが主キーの場合、キーの名前は常にPRIMARYです |
Seq_in_index | インデックス内の1から始まる列シーケンス番号。 |
Column_name | 列名 |
照合 | 列の並べ替え方法。 MySQLでは、これは「A」(昇順)またはNULL(ソートなし)のいずれかです |
カーディナリティ | 列が取ることができる値のタイプを指します。カーディナリティが高いほど、MySQLが結合を実行するときにこのインデックスを使用する可能性が高くなります。 |
Sub_part | 列が部分的にのみ索引付けされている場合、索引付けされた文字の数。列全体にインデックスが付けられている場合はNULL。 |
梱包済み | キーのパック方法を示します。パックされていない場合はNULL。 |
NULL | この列にNULL値を含めることができる場合は、YESが使用されます。それ以外の場合は、''が使用されます。 |
Index_type | 使用されるインデックス作成方法(BTREE、FULLTEXT、HASH、RTREE) |
コメント | このインデックスに関する情報(たとえば、インデックスが無効になっている場合は無効になります) |
Index_comment | インデックスの作成時にCOMMENT属性のインデックスに提供されたコメント。 |
すでに作成されているテーブルの列にインデックスを追加します
> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);
インデックスを削除
> DROP INDEX INDEX_NAME ON TABLE_NAME;
-- Or that following is also OK
> ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME;
インデックスコメントの更新
> 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";
データを挿入
> 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');
データを削除
> DELETE FROM TABLE_NAME;
-- example1
DELETE FROM members;
-- example2
DELETE FROM members WHERE id=3;
データを選択
> SELECT COLUMN_NAME, FROM TABLE_NAME;
-- example1
> SELECT id, name FROM members;
-- example2
> SELECT * FROM members;
-- example3
> SELECT * FROM members WHERE id=3;
+α作者がかつて行き詰まった場所。
AUTO_INCREMENT
の列 制約をキーに設定する必要があります。
インデックスを追加して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')
DROP INDEX
はできません
SHOW INDEX
を使用して次のインデックスを確認してください 、PRIMARY
を削除してみてください しかし、、、
> 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")
その理由は、主キーのインデックス名は常にPRIMARYですが、PRIMARYは予約語であるため、引用符で囲まれた識別子として指定する必要があります。そうしないと、エラーが発生します。次のようにバッククォートで囲むと機能します
> ALTER TABLE members DROP INDEX `PRIMARY`;
注:AUTO_INCREMENT
のため、KEYが1つしかない列のKEYを削除することはできません。 設定されています。
リファレンス
mycli公式文書
MyCLI –オートコンプリートと構文ハイライト/ TecMint