সহজে MySQL এর কমান্ড সমূহ-১ম পর্ব

আজকে আমরা খুব সহজে MySQL ডাটাবেজের বহুল প্রচলিত কমান্ড সমূহ রিয়েল লাইফে ব্যবহার করেতে করতে শিখবো।

Photo by Boitumelo Phetla on Unsplash

আমি একটা ইউনিভার্সিটিতে কম্পিউটার বিজ্ঞান ও ইঞ্জিনিয়ারিং এ পড়ছি। আমাদের এই সেমিস্টারে ডাটাবেজ ম্যানেজমেন্ট সিস্টেম কোর্স রয়েছে এবং সেই কোর্সের অংশ হিসেবে আমাদেরকে MySQL শিখানো হচ্ছে।

যা শিখছি তা আমার ব্যাচমেটদের সাথে শেয়ার করার উদ্দেশ্যে এই আর্টিকেল লেখা। সেই প্রেক্ষাপট থেকে আজকে আমাদের ইউজকেস হিসেবে দেখবো আমাদের এই সেমিস্টারের কোর্স সমূহ নিয়ে।

spring_22 courses

আমাদের স্প্রিং-২২ সেমিস্টারে উপরের কোর্স সমূহ আছে। এই কোর্স গুলো নিয়ে আজকের ডাটাবেজ, টেবিল ইত্যাদি তৈরি করার মাধ্যমে বহুল প্রচলিত কমান্ড সমূহের ব্যবহার দেখবো ইনশাআল্লাহ।

SHOW Databases

যেকোনো নতুন জায়গায় কাজ করতে গেলে আমাদের প্রথমে দেখে নেয়া উচিত সেখানে অলরেডি কি কি জিনিস বিদ্যমান আছে আর কি কি করতে হবে। এতে করে আমাদের কাজ গুলো সহজ হয়ে যায় এবং এভাবে কাজ করলে কাজের প্লানিং টাও অনেক গুছানো হয়ে থাকে।

তাই আমরা নিচের কমান্ড ব্যবহার করে দেখে নিবো যে, আমাদের MySQL সার্ভারে বর্তমানে কি কি ডাটাবেজ আছেঃ

SHOW databases;

আউটপুটঃ

output of show databases command

এটা আমার পিসির MySQL সার্ভার। আপনার সার্ভার আপনাকে অন্য কোন লিস্ট দেখাবে। তবে যায় দেখাক এগুলো এই সার্ভারে বিদ্যমান ডাটাবেজ।

Create a New Database

আমাদের DBMS কোর্সের জন্য নতুন একটা ডাটাবেজ তৈরি করা দরকার। নিচের কোড টা রান করে আমাদের কোর্সের জন্য নতুন একটা ডাটাবেজ তৈরি করতে পারিঃ

CREATE DATABASE ius_dbms_course_db;

উপরের কোড দেখেই নিশ্চয় বুঝতে পারছেন একটা ডাটাবেজ ক্রিয়েট করতে বলা হচ্ছে। এখানে ius_dbms_course_db এটা হচ্ছে আমাদের ডাটাবেজের নাম। আপনি চাইলে অন্য যেকোনো নাম দিতে পারেন। তবে আমরা আমাদের এই আর্টিকেল এই নাম টা বার বার ব্যবহার করবো সেক্ষেত্রে আমার দেয়া নামটা ব্যবহার করলে সামনে অনেক কনফিউশন থেকে বেঁচে যাবো ইনশাআল্লাহ।

Use a Database

আমাদের নতুন তৈরি করা ius_dbms_course_db ডাটাবেজ ব্যবহার করতে নিচের use কমান্ড ব্যবহার করবোঃ

USE ius_dbms_course_db;

আপনি যে ডাটাবেজ ব্যবহার করতে চান use লিখে সেই ডাটাবেজের নাম লিখে রান করলে সেই ডাটাবেজ কাজ করা শুরু করবে।

Show list of tables in a Database

আমাদের নতুন তৈরি করা ius_dbms_course_db ডাটাবেজে কি কি টেবিল আছে তা দেখতে নিচের show কমান্ড ব্যবহার করবোঃ

SHOW tables;

এখন পর্যন্ত যেহেতু আমরা ius_dbms_course_db ডাটাবেজে কোনো টেবিল তৈরি করিনি। তাই আউটপুট আসবে ফাঁকাঃ

output of show tables command

Create a New Table

coursesনামে একটা নতুন টেবিল তৈরি করবো নিচের মত কোড লিখেঃ

CREATE TABLE courses (
course_id INTEGER,
course_title VARCHAR(100),
course_instructor VARCHAR(200),
course_type VARCHAR(10),
course_credit FLOAT
);

এখানে CREATE TABLE কমান্ড দ্বারা একটা নতুন টেবিল তৈরি করতে নির্দেশ দেয়া হচ্ছে এবং courses হচ্ছে আমাদের টেবিলের নাম।

রিলেশনাল ডাটাবেজে ডাটা সমূহ মাইক্রোসফট এক্সেলের মত রো এবং কলাম অনুযায়ী থাকে।

Microsoft Excel

উপরের ছবিতে মাইক্রোসফট এক্সেলের একটা লেআউট দেখা যাচ্ছে। এখানে উপরের সারিতে A, B, C, D… দেখছেন এগুলা এক একটা কলাম। আর বাম পাশে 1, 2, 3, 4… দেখছেন এগুলা এক একটা রো।

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

আমাদের courses টেবিলে আমরা course_id, course_title, course_instructor, course_type and course_credit নামে ৫ টি ভিন্ন ভিন্ন কলাম রেখেছি।

MySQL এ কলাম নাম গুলো ডিফাইন করার সময় সেই কলাম কি ধরণের ডাটা থাকবে সেটাও বলে দিতে হয়।

  • course_id INTEGER মানে course_id গুলো নাম্বার টাইপ হবে।
  • course_title, course_instructor, course_type এগুলো যেহেতু স্ট্রিং ডাটা তাই varchar ডাটা টাইপ ব্যবহার করেছি এবং প্রতিটার জন্য সর্বোচ্চ কত গুলো character রাখতে পারবো সেটাও বলে দিয়েছি।
  • course_credit যেহেতু dot precision যুক্ত decimal number তাই আমরা এক্ষেত্রে float ডাটা টাইপ ব্যবহার করেছি।

আমাদের coursesটেবিল তৈরি করা হয়েছে কিন্তু একটা টেকনিক্যাল সমস্যা থেকে গেছে। আমরা course_id নামে একটা কলাম নিয়েছি। তবে সেটার মান আমাদেরকে ম্যানুয়ালি ইনপুট দিতে হবে। বিশেষ করে আইডি গুলো অটো জেনারেট হয়ে থাকে। আমরা এখন course_id কলামের ধরন পরিবর্তন করে ফেলতে পারি ALTER COLUMN কমান্ড ব্যবহার করে।

ALTER TABLE

ALTER TABLE courses 
MODIFY COLUMN course_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY;

এখন থেকে course_id কলাম নতুন রো ইনপুট দেয়ার সাথে সাথে অটো জেনারেট হবে এবং এই ID কে আমরা প্রাইমারি কি হিসেবে ব্যবহার করবো। Primary Key একটা বুঝার মত বড় টপিক। এ বিষয়ে আমরা স্বতন্ত্র আরেকটি আর্টিকেল লিখবো ইনশাআল্লাহ।

INSERT INTO

আমাদের নতুন তৈরি করা courses টেবিলে একটা কোর্সের ইনফো অ্যাড করিঃ

INSERT INTO courses (
course_title,
course_instructor,
course_credit
) VALUES ("Data Science with R", "Golam Kaderye", 3);

উপরের কোডে দেখতে পাচ্ছেন যে, প্রথমে আমরা কি কি কলামে ডাটা রাখবো সেটা বলে দিয়েছি এবং পরে সেই কলাম গুলোর ভ্যালু দিয়েছি।

SELECT command to Read data from a Table

আমাদের courses টেবিলের ডেটা সমূহ দেখতে:

SELECT * FROM courses;

তাহলে আমরা নিচের মত আউটপুট পাবো:

read data from courses table

UPDATE

উপরের আউটপুট খেয়াল করলে দেখতে পাবেন যে, আমরা ভুল ক্রমে আমাদের প্রথম কোর্সের কোর্স টাইপ দেয়নি। কোর্স টাইপ ডেটা আপডেট করতে নিচের কমান্ড রান করুনঃ

UPDATE courses 
SET
course_type = 'Theory'
WHERE
course_id = 1

এবার যদি আমরা courses টেবিলের ডেটা গুলো দেখিঃ

SELECT * FROM courses;
read data from courses table after updating the course type

Insert multiple data

আমরা যদি আমাদের অন্য সব গুলো কোর্সের ইনফো একসাথে অ্যাড করতে চাই তাহলে সব গুলো ইনফো একসাথে নিচের মত করে সাজিয়ে রান করবোঃ

INSERT INTO courses (
course_title,
course_instructor,
course_type,
course_credit
) VALUES
("Data Science with R Lab", "Golam Kaderye", "Lab", 1.5),
("Microprocessor and Interfacing", "Ashif Mahmud Joy", "Theory", 3),
("Database Management System", "Akm Monzurul Islam", "Theory", 3),
("Database Management System Lab", "Akm Monzurul Islam", "Lab", 1.5),
("Compiler", "Reduanul Bari Shovon", "Theory", 3),
("Compiler Lab", "Reduanul Bari Shovon", "Lab", 1.5),
("Operating System", "Akm Monzurul Islam", "Theory", 3),
("Operating System", "Akm Monzurul Islam", "Lab", 1.5),
("Mobile Apps Development Lab", "Reduanul Bari Shovon", "Lab", 1.5);

এবার আউটপুট দেখিঃ

SELECT * FROM courses;
Read data from courses table

WHERE Clause

আমরা courses টেবিল থেকে compiler কোর্সের ইন্সট্রাক্টরের নাম দেখতে চাইঃ

SELECT 
course_instructor
FROM
courses
WHERE
course_title = 'Compiler'

Output:

Read specific data from courses table

উপরের কোডটি লক্ষ্য করুন, আমরা আমদের কোডে স্পষ্ট ভাবে আমাদের চাহিদা জানিয়ে দিয়েছি এবং ঠিক সেই রকম আউটপুট পেয়েছিঃ

  • আমরা কি দেখতে চাই? course_instructor
  • আমরা কোথা থেকে দেখতে চাই? courses টেবিল থেকে
  • আমরা কোন কোর্সের ইন্সট্রাক্টরকে দেখতে চাই? course_title="Compiler"

এভাবে আমরা আমাদের চাহিদা জানানোর মাধ্যমে MySQL এর টেবিল থেকে আমাদের কাঙ্ক্ষিত ডেটা খুঁজে বের করতে পারি।

আমরা যদি শুধু মাত্র Lab কোর্স গুলো দেখতে চাইঃ

SELECT * FROM courses
WHERE course_type = 'Lab'

Output:

AND, OR, NOT এর ব্যবহার

আমাদের যদি Reduanul Bari Shovon স্যারের শুধু Lab কোর্স গুলো জানার প্রয়োজন হয় তবে আমরা নিচের মত কোড লিখবোঃ

SELECT 
course_title, course_instructor, course_type, course_credit
FROM
courses
WHERE
course_type = 'Lab'
AND course_instructor = 'Reduanul Bari Shovon';

আউটপুটঃ

use of mysql and operator
Usage of AND operator

আমরা যদি জানতে চাই যে, কোর্স টাইপ Lab অথবা কোর্সের ক্রেডিট ২ এর বেশি এমন কোর্স গুলো শুধু দেখবোঃ

SELECT 
course_title, course_instructor, course_type, course_credit
FROM
courses
WHERE
course_type = 'Lab'
OR course_credit > 2;

Output:

Usage of OR operator

আউটপুটে প্রায় সব ডেটা চলে এসেছে এর কারণ আমাদের শর্ত ছিলো ক্রেডিট ২ এর অধিক হতে হবে অথবা ল্যাব কোর্স হতে হবে। এখানে দুইটাই শর্ত পূরণ হয়েছে দুইটা আলাদা আলাদা ক্ষেত্রে তাই সব কোর্স দেখাচ্ছেঃ

  • যে কোর্সের ক্রেডিট ২ এর অধিক সেগুলো ল্যাব না তবে ২ এর অধিক এটা সত্য।
  • আবার যাদের ক্রেডিট ২ এর অধিক নয় সেগুলো ল্যাব কোর্স এটাও সত্য।

OR অপারেটরের ক্ষেত্রে যেকোনো একটা শর্ত সত্য হলে সেটা সত্য।

এবার যদি দেখতে চাই যে, সব গুলো কোর্স দেখবো তবে যাদের ক্রেডিট ২ এর কম সেগুলো ছাড়াঃ

SELECT 
course_title, course_instructor, course_type, course_credit
FROM
courses
WHERE
NOT course_credit < 2;

Output:

Usage of NOT operator

RENAME TABLE

আমরা টেবিল এর নাম দিয়েছি courses এবং ডেটা রেখেছি spring-22 সেমিস্টারের কোর্স সমূহ। এখন অন্য সেমিস্টারের কোর্স গুলো রাখতে চাইলে সে টেবিল গুলো কি নাম দেবো? যদি সব গুলো সেমিস্টারের নামে আলাদা আলাদ টেবিল থাকে তবে সেই সব টেবিল থেকে ডেটা রিড, রাইট বা আপডেট করা আরো সহজ হতো না? হুম অনেক সহজ হতো। তাহলে প্রথমে আমরা আমাদের বর্তমান টেবিল এর নাম পরিবর্তন করিঃ

RENAME TABLE courses TO courses_spring_2022;

RENAME TABLE কমান্ডের সাথে প্রথমে বর্তমান টেবিল এবং TO দিয়ে নতুন টেবিল নাম লিখে রান করলে টেবিল নাম পরিবর্তন হয়ে যাবে।

এখন যদি আমাদের কি কি টেবিল আছে দেখতে চাই তবে আমাদের পরিবর্তিত নাম টা দেখাবেঃ

SHOW TABLES;

Output:

show tables

DELETE

আমরা যদি আমাদের courses_spring_2022 টেবিল থেকে কোন রো ডিলেট করতে চাই তবেঃ

DELETE FROM courses_spring_2022 
WHERE
course_id = 2

এখন Select কমান্ড দিয়ে ডাটা গুলো দেখলে ২ নাম্বার কোর্স টা পাবো নাঃ

SELECT * FROM courses_spring_2022;
After deleting row 2

আমরা যদি আমাদের courses_spring_2022 টেবিলের সকল ডেটা মুছে ফেলতে চাইঃ

DELETE FROM courses_spring_2022;

যেকোনো ডাটাবেজ অপারেশনে DROP, DELETE বা UPDATE কমান্ড চালানোর পূর্বে অবশ্যই সেই ডাটাবেজ এর ব্যাকআপ নেয়া উচিৎ। আর প্রোডাকশন ডাটাবেজে এই কমান্ড গুলো চালানোর পূর্বে খুব বেশি সতর্কতার সাথে চেক করে নেয়া উচিত। অন্যথায় পুরা ডাটাবেজ হারায় যাবে এবং কাঁদতে কাঁদতে চোখের পানিও ফুরিয়ে যাবে।

গল্প অনেক হয়েছে ডিলেট কমান্ড তো আমরা রান করে দিয়েছি এবার টেবিলের খবর নিয়ে আসিঃ

SELECT * FROM courses_spring_2022;

কথা মত সব ডাটা মুছে গেছে, শুধু কলাম নাম গুলো দেখাচ্ছে।

DROP COLUMN

কোন একটা টেবিল থেকে যদি একটি নির্দিষ্ট কলাম বাদ দিতে হয়ঃ

ALTER TABLE courses_spring_2022 
DROP COLUMN course_type;

আমরা courses_spring_2022 টেবিল থেকে course_type কলাম টা বাদ দিয়েছি।

DROP TABLE

যদি কোন টেবিল কে ডিলেট করতে হয় সেক্ষেত্রেঃ

DROP TABLE courses_spring_2022;

এখন যদি আমাদের ius_dbms_course_db এর মধ্যে টেবিল গুলো দেখতে চাইঃ

SHOW TABLES;

কোন টেবিল অবশিষ্ট নাই।

ALTER DATABASE

মনের খুশিতে নাচতে নাচতে আমাদের সাধের টেবিল টা ডিলেট করে দিলাম 🤣। এমন যদি রেসট্রিকশন থাকতো যে, শুধু অ্যাডমিন কোন টেবিল ডিলেট করতে পারবে অন্য ইউজাররা ডিলেট করতে পারবে না। এজন্য DBMS এর ইউজার ম্যানেজমেন্ট অপশন গুলো ব্যবহার করা হয়ে থাকে। এখন অ্যাডমিন যদি ডাটাবেজের কোন টেবিল এর ধরন পরিবর্তন করতে চাই তবেঃ

ALTER DATABASE ius_dbms_course_db READ ONLY = 1;

উপরের কমান্ড দ্বারা ius_course_db ডাটাবেজ কে রিড অনলি করে দেয়া হয়েছে। এই ডাটাবেজ থেকে এখন শুধু ডাটা রিড করা যাবে তবে আপডেট বা ডিলেট করতে চাইলে হবে না।

আজকে এই পর্যন্ত। আগামী পর্বে MySQL এর আরও অনেক গুলো কমান্ড নিয়ে আলোচনা করবো ইনশাআল্লাহ।

আমার সম্পর্কেঃ

আমি মোঃ জামাল উদ্দিন, প্রতিনিয়ত শিখছি এবং যা কিছু শিখছি তা আপনাদের সাথে লেখালেখির মাধ্যমে শেয়ার করার চেষ্টা করছি। কাজ করছি সফটওয়্যার ডেভেলপার হিসেবে। আমার সম্পর্কে বিস্তারিত জানতে ভিজিট করুন https://jaamaalxyz.github.io ওয়েবসাইটে এবং প্রায় সবগুলো জনপ্রিয় সোশ্যাল সাইটে আমাকে পাবেন jaamaalxyz ইউজারনামে।

--

--

--

Sharing my own views about life and tech — https://jaamaalxyz.github.io

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Md. Jamal Uddin

Md. Jamal Uddin

Sharing my own views about life and tech — https://jaamaalxyz.github.io

More from Medium

5 Use Cases for SQL Window Functions in a Real-Life Cat System

Querying and Eager Loading Related Data with Knex.js and PostgreSQL

What is a Relational Database

How to load data directly from Mysql to Clickhouse