MySQL কমান্ড গাইড: শুরুকারী থেকে মধ্যম স্তরের মৌলিক বিষয়, CRUD, ব্যবহারকারী, ব্যাকআপ ও ট্রাবলশুটিং

目次

১. পরিচিতি

MySQL হল ডেটাবেস ম্যানেজমেন্ট সিস্টেম (DBMS) গুলোর মধ্যে ব্যাপকভাবে ব্যবহৃত একটি ওপেন-সোর্স রিলেশনাল ডেটাবেস। এটি বিশেষত ওয়েব অ্যাপ্লিকেশন এবং এন্টারপ্রাইজ সিস্টেমে জনপ্রিয়। এই প্রবন্ধে আমরা গুরুত্বপূর্ণ MySQL কমান্ডগুলো বিস্তারিতভাবে ব্যাখ্যা করব এবং বিষয়বস্তু এমনভাবে গঠন করব যাতে নবীন থেকে মধ্যম স্তরের ব্যবহারকারীরা সহজে শিখতে পারেন।

১.১ MySQL কী?

MySQL হল একটি সফটওয়্যার যা রিলেশনাল ডেটাবেস (RDB) পরিচালনা করতে ব্যবহৃত হয়। ডেটা টেবিলে সংরক্ষিত হয়, এবং আপনি SQL (স্ট্রাকচার্ড কুয়েরি ল্যাঙ্গুয়েজ) ব্যবহার করে ডেটা ম্যানিপুলেট করেন। MySQL-এ নিম্নলিখিত বৈশিষ্ট্যগুলো রয়েছে:

  • ওপেন-সোর্স এবং যে কেউ ব্যবহার করতে পারে এমন ফ্রি
  • দ্রুত এবং হালকা পারফরম্যান্স
  • বহু প্রোগ্রামিং ভাষার সাথে সামঞ্জস্যপূর্ণ (যেমন PHP, Python, এবং Java)
  • বৃহৎ স্কেলের ডেটাবেস পরিচালনার জন্য উপযুক্ত

১.২ MySQL কমান্ড শিখার সুবিধা

MySQL কার্যকরভাবে ব্যবহার করতে হলে মৌলিক কমান্ডগুলো বোঝা গুরুত্বপূর্ণ। প্রধান সুবিধাগুলো হল:

  • আরও কার্যকর ডেটা ম্যানেজমেন্ট : SQL কমান্ডে পারদর্শী হয়ে আপনি দ্রুত ডেটা রিট্রিভ, আপডেট এবং ডিলিট করতে পারেন
  • ওয়ার্কফ্লো অটোমেশন : স্ক্রিপ্ট ব্যবহার করে আপনি ডেটাবেস অপারেশন স্বয়ংক্রিয় করতে পারেন
  • স্মুথ ত্রুটি হ্যান্ডলিং : সমস্যার সময় আপনি উপযুক্ত SQL কমান্ড দিয়ে সমাধান করতে পারেন

১.৩ এই প্রবন্ধে আপনি কী শিখবেন

এই প্রবন্ধে নিম্নলিখিত বিষয়গুলো বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে:

  • MySQL এর মৌলিক অপারেশন (শুরু করা, সংযোগ করা, এবং ডেটাবেস অপারেশন)
  • ডেটা যোগ করা, রিট্রিভ করা, আপডেট করা এবং ডিলিট করা (CRUD অপারেশন)
  • ইউজার ম্যানেজমেন্ট এবং প্রিভিলেজ সেটিংস
  • উপযোগী কমান্ড এবং ট্রাবলশুটিং

পরবর্তীতে আমরা প্রতিটি সেকশন ক্রমানুসারে আলোচনা করব। চলুন MySQL এর মৌলিক অপারেশন দিয়ে শুরু করি।

২. MySQL এর মৌলিক অপারেশন (শুরুয়াতি-বন্ধু)

২.১ MySQL শুরু করা এবং সংযোগ করা

২.১.১ MySQL শুরু করা

MySQL একটি সার্ভার প্রোগ্রাম হিসেবে চলায়, প্রথমে আপনাকে সার্ভারটি চালু করতে হবে। স্টার্টআপ পদ্ধতি অপারেটিং সিস্টেমের উপর নির্ভর করে ভিন্ন হয়।

লিনাক্স / macOS-এ শুরু করা

লিনাক্স এবং macOS-এ, আপনি systemctl কমান্ড ব্যবহার করে MySQL চালু করতে পারেন।

sudo systemctl start mysql

MySQL চালু আছে কিনা পরীক্ষা করুন

sudo systemctl status mysql

যদি আপনি “active (running)” দেখেন, তবে MySQL স্বাভাবিকভাবে চালু আছে।

উইন্ডোজে শুরু করা

উইন্ডোজে, MySQL প্রায়শই একটি সার্ভিস হিসেবে চালানো হয়, তাই আপনি net start কমান্ড ব্যবহার করতে পারেন।

net start mysql

অথবা, যদি আপনি XAMPP ব্যবহার করেন, XAMPP কন্ট্রোল প্যানেল খুলে “MySQL” এর জন্য “Start” ক্লিক করুন।

২.১.২ MySQL-এ সংযোগ করা

MySQL-এ সংযোগ করতে mysql কমান্ড ব্যবহার করুন। মৌলিক সংযোগ কমান্ডটি নিম্নরূপ:

mysql -u username -p
রুট ইউজার হিসেবে সংযোগ

ডিফল্টভাবে, root ইউজারকে অ্যাডমিনিস্ট্রেটর হিসেবে কনফিগার করা থাকে। আপনি নিম্নলিখিত কমান্ড দিয়ে সংযোগ করতে পারেন:

mysql -u root -p

Enter চাপার পর, আপনাকে পাসওয়ার্ড দিতে বলা হবে। সঠিক পাসওয়ার্ড দিলে আপনি MySQL-এ লগইন করতে পারবেন।

নির্দিষ্ট হোস্টে সংযোগ

রিমোট MySQL সার্ভারে সংযোগ করতে -h অপশন ব্যবহার করুন।

mysql -h hostname -u username -p

উদাহরণস্বরূপ, 192.168.1.100 এ থাকা MySQL সার্ভারে সংযোগ করতে লিখুন:

mysql -h 192.168.1.100 -u root -p
পোর্ট নম্বর নির্দিষ্ট করে সংযোগ

ডিফল্ট MySQL পোর্ট হল 3306। যদি এটি পরিবর্তন করা হয়ে থাকে, আপনি -P অপশন দিয়ে নির্দিষ্ট করতে পারেন।

mysql -h 192.168.1.100 -P 3307 -u root -p

২.২ MySQL এর মৌলিক কমান্ড

MySQL-এ সংযুক্ত হওয়ার পর, কিছু মৌলিক কমান্ড চালিয়ে দেখুন।

২.২.১ MySQL সংস্করণ পরীক্ষা করা

আপনি বর্তমানে যে MySQL সংস্করণ ব্যবহার করছেন তা পরীক্ষা করতে নিম্নলিখিত কমান্ড চালান:

SELECT VERSION();

২.২.২ বর্তমান ডেটাবেস পরীক্ষা করা

বর্তমানে কোন ডেটাবেস সিলেক্টেড আছে তা দেখতে চালান:

SELECT DATABASE();

যদি কোনো ডেটাবেস সিলেক্টেড না থাকে, তবে NULL রিটার্ন হয়।

২.২.৩ উপলব্ধ ডেটাবেসের তালিকা

MySQL-এ বিদ্যমান ডেটাবেসের তালিকা পেতে ব্যবহার করুন:

SHOW DATABASES;

২.৩ সাধারণ ত্রুটি এবং সমাধান

২.৩.১ “Access denied” ত্রুটি

উদাহরণ ত্রুটি:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
কিভাবে ঠিক করবেন:
  1. পাসওয়ার্ড সঠিক কিনা যাচাই করুন
  2. root অধিকারগুলি পরীক্ষা করুন এবং রিসেট করুন
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEW_PASSWORD';
    FLUSH PRIVILEGES;
    

2.3.2 “‘localhost’ এ MySQL সার্ভারে সংযোগ করা যাচ্ছে না” ত্রুটি

উদাহরণ ত্রুটি:

ERROR 2002 (HY000): Can't connect to MySQL server on 'localhost' (10061)
কিভাবে ঠিক করবেন:
  1. MySQL চালু আছে কিনা পরীক্ষা করুন ( systemctl status mysql )
  2. MySQL পুনরায় চালু করুন
    sudo systemctl restart mysql
    

2.4 সারাংশ

এই অংশে, আমরা কীভাবে MySQL শুরু করতে এবং এতে সংযোগ করতে হয় তা ব্যাখ্যা করেছি।

3. ডাটাবেস অপারেশনসমূহ

MySQL-এ, আপনি ডেটা পরিচালনার জন্য একটি ডাটাবেস তৈরি করেন, এবং তারপর তার মধ্যে টেবিল গুলি স্থাপন করে তথ্য সংগঠিত করেন। এই অংশে, আমরা ডাটাবেস তৈরি, নির্বাচন, তালিকাভুক্তি এবং মুছে ফেলা ইত্যাদি মৌলিক অপারেশনগুলো বিস্তারিতভাবে ব্যাখ্যা করব।

3.1 ডাটাবেস তৈরি করা

MySQL-এ ডাটাবেস তৈরি করতে, CREATE DATABASE কমান্ড ব্যবহার করুন।

3.1.1 একটি মৌলিক ডাটাবেস তৈরি করুন

নিম্নলিখিত SQL কমান্ড চালালে, আপনি my_database নামের একটি নতুন ডাটাবেস তৈরি করতে পারবেন।

CREATE DATABASE my_database;
সফলভাবে তৈরি হলে বার্তা
Query OK, 1 row affected (0.01 sec)

3.1.2 যখন আপনি ইতিমধ্যে বিদ্যমান একটি ডাটাবেস তৈরি করার চেষ্টা করেন

যদি ডাটাবেসটি ইতিমধ্যে থাকে, আপনি নিম্নরূপ একটি ত্রুটি দেখবেন:

ERROR 1007 (HY000): Can't create database 'my_database'; database exists

এই ত্রুটি এড়াতে, IF NOT EXISTS অপশন যোগ করা উপকারী।

CREATE DATABASE IF NOT EXISTS my_database;

আপনি যখন এই কমান্ড চালাবেন, ডাটাবেসটি শুধুমাত্র তখনই তৈরি হবে যদি তা আগে থেকে না থাকে।

3.2 ডাটাবেস তালিকাভুক্ত করা

বর্তমান MySQL সার্ভারে কোন ডাটাবেসগুলো আছে তা দেখতে, SHOW DATABASES কমান্ড ব্যবহার করুন।

SHOW DATABASES;

উদাহরণ আউটপুট:

+--------------------+
| Database          |
+--------------------+
| information_schema |
| my_database       |
| mysql             |
| performance_schema |
| sys               |
+--------------------+

দ্রষ্টব্য: mysql এবং information_schema এর মতো সিস্টেম ডাটাবেসগুলো MySQL প্রশাসনের জন্য প্রয়োজনীয়।

3.3 ডাটাবেস নির্বাচন করা

MySQL-এ, আপনাকে যে ডাটাবেসটি ব্যবহার করতে চান তা নির্বাচন করতে হবে। ডাটাবেস নির্দিষ্ট করতে, USE কমান্ড চালান।

USE my_database;
সফল হলে বার্তা
Database changed

বর্তমানে কোন ডাটাবেস নির্বাচিত আছে তা নিশ্চিত করতে, নিম্নলিখিত কমান্ড ব্যবহার করুন:

SELECT DATABASE();

উদাহরণ আউটপুট:

+------------+
| DATABASE() |
+------------+
| my_database |
+------------+

3.4 ডাটাবেস মুছে ফেলা

আপনি আর প্রয়োজন না এমন ডাটাবেস মুছে ফেলতে, DROP DATABASE কমান্ড ব্যবহার করুন।

DROP DATABASE my_database;

3.4.1 মুছে ফেলার আগে গুরুত্বপূর্ণ নোট

  • সতর্ক থাকুন: ডাটাবেস মুছে ফেললে সব ডেটা মুছে যাবে!
  • দুর্ঘটনাবশত ত্রুটি এড়াতে, আপনি IF EXISTS যোগ করতে পারেন।
    DROP DATABASE IF EXISTS my_database;
    

ডাটাবেস my_database না থাকলেও এই কমান্ড কোনো ত্রুটি ছাড়াই শেষ হবে।

3.5 সাধারণ ত্রুটি এবং সমাধান

3.5.1 “ব্যবহারকারীর জন্য প্রবেশাধিকার অস্বীকৃত” ত্রুটি

উদাহরণ ত্রুটি:

ERROR 1044 (42000): Access denied for user 'user_name'@'localhost' to database 'my_database'
কিভাবে ঠিক করবেন
  • GRANT কমান্ড ব্যবহার করে অধিকার প্রদান করুন
    GRANT ALL PRIVILEGES ON my_database.* TO 'user_name'@'localhost';
    FLUSH PRIVILEGES;
    

3.5.2 “ডাটাবেস ড্রপ করা যাচ্ছে না” ত্রুটি

উদাহরণ ত্রুটি:

ERROR 1010 (HY000): Error dropping database (can't rmdir './my_database', errno: 39)
কিভাবে ঠিক করবেন
  • MySQL পুনরায় চালু করুন
    sudo systemctl restart mysql
    
  • প্রথমে my_database এর সব টেবিল মুছে ফেলুন, তারপর DROP DATABASE চালান।

3.6 সারাংশ

এই অংশে, আপনি কীভাবে ডাটাবেস তৈরি, নির্বাচন, তালিকাভুক্ত এবং মুছে ফেলতে হয় শিখেছেন।

4. টেবিল অপারেশনসমূহ

After creating a database, you need to create tables inside it to organize data. A table is like a grid for storing data, consisting of columns and rows (records).

এই বিভাগে, আমরা টেবিল তৈরি, পরীক্ষা, তালিকাভুক্ত এবং মুছে ফেলা সহ মৌলিক অপারেশনগুলি বিস্তারিতভাবে ব্যাখ্যা করব।

4.1 Creating a Table

একটি টেবিল তৈরি করতে, CREATE TABLE কমান্ড ব্যবহার করুন। যদি আপনি নিম্নলিখিত SQL চালান, এটি users নামের একটি টেবিল তৈরি করবে।

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4.1.1 Explanation of each element when creating a table

  • id INT AUTO_INCREMENT PRIMARY KEY
  • id কলামটি একটি পূর্ণসংখ্যা (INT), স্বয়ংক্রিয়ভাবে বৃদ্ধি পায় (AUTO_INCREMENT), এবং প্রাইমারি কী (PRIMARY KEY) হিসেবে সেট করা হয়।

  • name VARCHAR(50) NOT NULL
  • name কলামটি একটি স্ট্রিং (VARCHAR) যা সর্বোচ্চ ৫০ অক্ষর এবং NOT NULL এর কারণে এটি বাধ্যতামূলক।

  • email VARCHAR(100) UNIQUE NOT NULL
  • email কলামটি সর্বোচ্চ ১০০ অক্ষরের একটি স্ট্রিং, এবং UNIQUE সীমাবদ্ধতা ডুপ্লিকেট ইমেইল ঠিকানা প্রতিরোধ করে।

  • created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  • created_at কলামটি স্বয়ংক্রিয়ভাবে বর্তমান তারিখ/সময়কে ডিফল্ট মান হিসেবে সেট করে।
Message when successful
Query OK, 0 rows affected (0.02 sec)

4.2 Checking Table Structure

আপনি যে টেবিলটি তৈরি করেছেন তার গঠন পরীক্ষা করতে, DESC অথবা SHOW COLUMNS ব্যবহার করুন।

DESC users;

Or

SHOW COLUMNS FROM users;

Example output:

+------------+--------------+------+-----+-------------------+----------------+
| Field      | Type         | Null | Key | Default           | Extra          |
+------------+--------------+------+-----+-------------------+----------------+
| id         | int(11)      | NO   | PRI | NULL              | auto_increment |
| name       | varchar(50)  | NO   |     | NULL              |                |
| email      | varchar(100) | NO   | UNI | NULL              |                |
| created_at | timestamp    | YES  |     | CURRENT_TIMESTAMP |                |
+------------+--------------+------+-----+-------------------+----------------+

4.3 Listing Tables

বর্তমান ডাটাবেসে বিদ্যমান টেবিলগুলি তালিকাভুক্ত করতে, SHOW TABLES কমান্ড চালান।

SHOW TABLES;

Example output:

+------------------+
| Tables_in_mydb   |
+------------------+
| users            |
| products         |
| orders           |
+------------------+

4.4 Deleting a Table

আপনি আর প্রয়োজন না এমন একটি টেবিল মুছে ফেলতে, DROP TABLE কমান্ড ব্যবহার করুন।

DROP TABLE users;

4.4.1 Important notes when deleting a table

  • সতর্ক থাকুন: টেবিল মুছে ফেললে ডেটা স্থায়ীভাবে মুছে যায়!
  • মুছে ফেলার সময় ত্রুটি এড়াতে, IF EXISTS যোগ করুন।
    DROP TABLE IF EXISTS users;
    
Message when successful
Query OK, 0 rows affected (0.01 sec)

4.5 Resetting Table Data (Delete All Rows)

যদি আপনি টেবিলের গঠন রাখতে চান কিন্তু ভিতরের ডেটা মুছে ফেলতে চান, TRUNCATE TABLE ব্যবহার করুন।

TRUNCATE TABLE users;
Difference from DROP TABLE
  • DROP TABLE টেবিলটি নিজেই মুছে দেয়।
  • TRUNCATE TABLE শুধুমাত্র ডেটা মুছে দেয় এবং টেবিলের গঠন বজায় রাখে।

4.6 Common Errors and Fixes

4.6.1 “Table already exists” error

Example error:

ERROR 1050 (42S01): Table 'users' already exists
How to fix
  • Check existing tables
    SHOW TABLES;
    
  • Create the table with IF NOT EXISTS
    CREATE TABLE IF NOT EXISTS users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50) NOT NULL,
        email VARCHAR(100) UNIQUE NOT NULL,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    

4.6.2 “Unknown table” error

Example error:

ERROR 1051 (42S02): Unknown table 'users'
How to fix
  • SHOW TABLES; ব্যবহার করে টেবিলটি আছে কিনা যাচাই করুন
  • যদি না থাকে, তবে IF EXISTS যোগ করুন
    DROP TABLE IF EXISTS users;
    

4.7 সারাংশ

এই অংশে, আমরা মৌলিক MySQL টেবিল অপারেশনগুলি কভার করেছি: টেবিল তৈরি, যাচাই, এবং মুছে ফেলা।