इस लेख के दर्शकों को लक्षित करें
-
मारियाडीबी (या MySQL) पहले से ही स्थापित है
-
कुछ एसक्यूएल जानें
अगर आपनेSELECT
. के बारे में सुना है औरINSERT
, आपको ठीक होना चाहिए। -
सीएलआई (टर्मिनल की काली स्क्रीन) का उपयोग करके डीबी के साथ खेलना चाहते हैं
यदि आप एक पूर्ण पैमाने पर डीबी संचालित करना चाहते हैं, तो सीक्वल प्रो जैसे जीयूआई का उपयोग करना आसान है, लेकिन अगर आप डीबी को छूना चाहते हैं, तो टर्मिनल पर mycli का उपयोग करना आसान है।
※ यदि आप इस लेख का जापानी संस्करण पढ़ना चाहते हैं,
कृपया इस पर जाएं।
तैयारी आइए mycli सेट करें!
वैसे भी mycli क्या है?
mycli सामान्य DB प्रबंधन प्रणालियों जैसे MySQL (और MariaDB) के लिए एक CLI इंटरफ़ेस है।
mycli का मतलब MySQL db क्लाइंट है।
तो, आप mycli का उपयोग करने से क्या खुश हैं?
सबसे अच्छी बात यह है कि पूरा होने से टर्मिनल पर कमांड टाइप करना और टाइपो को कम करना आसान हो जाता है।
- बुनियादी आदेशों को पूरा किया जाएगा।
- तालिका नाम और अन्य पूर्णता सुझाव प्रदर्शित किए जाएंगे।
- रंग सेटिंग के साथ देखने में आसान.
ऊपर दिया गया स्क्रीनशॉट सामान्य mysql कमांड का उपयोग करके कनेक्शन स्क्रीन दिखाता है। यह देखना मुश्किल है और कमांड पूरा करना काम नहीं करता है।
यहाँ mycli कमांड के साथ कनेक्शन का स्क्रीनशॉट है। यह रंगीन है और इसमें उम्मीदवारों की एक अच्छी सूची है!
mycli इंस्टॉल करें
आप homebrew
. द्वारा mycli इंस्टॉल कर सकते हैं या 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
आइए मारियाडीबी (MySQL) को mycli के साथ ट्वीक करने का प्रयास करें।
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;
डीबी हटाएं
> 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 |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
उपरोक्त संकेतों के अर्थ इस प्रकार हैं।
आइटम | <थ>विवरण|
---|---|
टेबल | तालिका का नाम |
गैर_अद्वितीय | 0 अगर इंडेक्स में डुप्लीकेट नहीं हो सकते हैं, तो 1 अगर हो सकता है। |
कुंजी_नाम | सूचकांक नाम यदि यह अनुक्रमणिका प्राथमिक कुंजी है, तो कुंजी का नाम हमेशा प्राथमिक होता है |
Seq_in_index | इंडेक्स में कॉलम अनुक्रम संख्या, 1 से शुरू। |
Column_name | कॉलम का नाम |
संयोजन | कॉलम को कैसे सॉर्ट किया जाता है; MySQL में, यह या तो "A" (आरोही) या NULL (बिना क्रमबद्ध) है |
कार्डिनैलिटी | यह उन मानों के प्रकारों को संदर्भित करता है जो एक कॉलम ले सकता है। कार्डिनैलिटी जितनी अधिक होगी, उतनी ही अधिक संभावना है कि MySQL इस इंडेक्स का उपयोग जॉइन करते समय करेगा। |
उप_भाग | यदि स्तंभ केवल आंशिक रूप से अनुक्रमित है, तो अनुक्रमित वर्णों की संख्या। NULL यदि संपूर्ण स्तंभ अनुक्रमित है। |
पैक किया हुआ | दिखाता है कि कुंजी कैसे पैक की जाएगी। NULL अगर इसे पैक नहीं किया गया है। |
शून्य | यदि इस कॉलम में NULL मान हो सकते हैं, तो YES का उपयोग किया जाता है; अन्यथा, '' का प्रयोग किया जाता है। |
इंडेक्स_टाइप | अनुक्रमण विधि का उपयोग किया गया (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")
कारण यह है कि प्राथमिक कुंजी का सूचकांक नाम हमेशा प्राथमिक होता है, लेकिन प्राथमिक एक आरक्षित शब्द है, इसलिए आपको इसे एक उद्धृत पहचानकर्ता के रूप में निर्दिष्ट करना होगा अन्यथा कोई त्रुटि होगी। यदि आप इसे बैककोट में निम्नानुसार संलग्न करते हैं तो यह काम करेगा
> ALTER TABLE members DROP INDEX `PRIMARY`;
नोट:आप उस कॉलम की KEY को DROP नहीं कर सकते जिसमें केवल एक KEY हो, क्योंकि AUTO_INCREMENT
सेट है।
संदर्भ
mycli आधिकारिक दस्तावेज
MyCLI - स्वत:पूर्णता और सिंटैक्स-हाइलाइटिंग / TecMint के साथ एक MySQL/MariaDB क्लाइंट