ডেটাবেস দক্ষতা উন্নত করতে সবচেয়ে সাধারণ MySQL কমান্ডগুলি জানুন
আজকে আমরা খুব সহজে MySQL ডাটাবেজের বহুল প্রচলিত কমান্ড সমূহ রিয়েল লাইফে ব্যবহার করেতে করতে শিখবো।
আমি একটা ইউনিভার্সিটিতে কম্পিউটার বিজ্ঞান ও ইঞ্জিনিয়ারিং এ পড়ছি। আমাদের এই সেমিস্টারে ডাটাবেজ ম্যানেজমেন্ট সিস্টেম কোর্স রয়েছে এবং সেই কোর্সের অংশ হিসেবে আমাদেরকে MySQL শিখানো হচ্ছে।
যা শিখছি তা আমার ব্যাচমেটদের সাথে শেয়ার করার উদ্দেশ্যে এই আর্টিকেল লেখা। সেই প্রেক্ষাপট থেকে আজকে আমাদের ইউজকেস হিসেবে দেখবো আমাদের এই সেমিস্টারের কোর্স সমূহ নিয়ে।
আমাদের স্প্রিং-২২ সেমিস্টারে উপরের কোর্স সমূহ আছে। এই কোর্স গুলো নিয়ে আজকের ডাটাবেজ, টেবিল ইত্যাদি তৈরি করার মাধ্যমে বহুল প্রচলিত কমান্ড সমূহের ব্যবহার দেখবো ইনশাআল্লাহ।
SHOW Databases
যেকোনো নতুন জায়গায় কাজ করতে গেলে আমাদের প্রথমে দেখে নেয়া উচিত সেখানে অলরেডি কি কি জিনিস বিদ্যমান আছে আর কি কি করতে হবে। এতে করে আমাদের কাজ গুলো সহজ হয়ে যায় এবং এভাবে কাজ করলে কাজের প্লানিং টাও অনেক গুছানো হয়ে থাকে।
তাই আমরা নিচের কমান্ড ব্যবহার করে দেখে নিবো যে, আমাদের MySQL সার্ভারে বর্তমানে কি কি ডাটাবেজ আছেঃ
SHOW databases;
আউটপুটঃ
এটা আমার পিসির 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
ডাটাবেজে কোনো টেবিল তৈরি করিনি। তাই আউটপুট আসবে ফাঁকাঃ
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
হচ্ছে আমাদের টেবিলের নাম।
রিলেশনাল ডাটাবেজে ডাটা সমূহ মাইক্রোসফট এক্সেলের মত রো এবং কলাম অনুযায়ী থাকে।
উপরের ছবিতে মাইক্রোসফট এক্সেলের একটা লেআউট দেখা যাচ্ছে। এখানে উপরের সারিতে 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;
তাহলে আমরা নিচের মত আউটপুট পাবো:
UPDATE
উপরের আউটপুট খেয়াল করলে দেখতে পাবেন যে, আমরা ভুল ক্রমে আমাদের প্রথম কোর্সের কোর্স টাইপ দেয়নি। কোর্স টাইপ ডেটা আপডেট করতে নিচের কমান্ড রান করুনঃ
UPDATE courses
SET
course_type = 'Theory'
WHERE
course_id = 1
এবার যদি আমরা courses
টেবিলের ডেটা গুলো দেখিঃ
SELECT * FROM courses;
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;
WHERE Clause
আমরা courses
টেবিল থেকে compiler
কোর্সের ইন্সট্রাক্টরের নাম দেখতে চাইঃ
SELECT
course_instructor
FROM
courses
WHERE
course_title = 'Compiler'
Output:
উপরের কোডটি লক্ষ্য করুন, আমরা আমদের কোডে স্পষ্ট ভাবে আমাদের চাহিদা জানিয়ে দিয়েছি এবং ঠিক সেই রকম আউটপুট পেয়েছিঃ
- আমরা কি দেখতে চাই?
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';
আউটপুটঃ
আমরা যদি জানতে চাই যে, কোর্স টাইপ Lab অথবা কোর্সের ক্রেডিট ২ এর বেশি এমন কোর্স গুলো শুধু দেখবোঃ
SELECT
course_title, course_instructor, course_type, course_credit
FROM
courses
WHERE
course_type = 'Lab'
OR course_credit > 2;
Output:
আউটপুটে প্রায় সব ডেটা চলে এসেছে এর কারণ আমাদের শর্ত ছিলো ক্রেডিট ২ এর অধিক হতে হবে অথবা ল্যাব কোর্স হতে হবে। এখানে দুইটাই শর্ত পূরণ হয়েছে দুইটা আলাদা আলাদা ক্ষেত্রে তাই সব কোর্স দেখাচ্ছেঃ
- যে কোর্সের ক্রেডিট ২ এর অধিক সেগুলো ল্যাব না তবে ২ এর অধিক এটা সত্য।
- আবার যাদের ক্রেডিট ২ এর অধিক নয় সেগুলো ল্যাব কোর্স এটাও সত্য।
OR অপারেটরের ক্ষেত্রে যেকোনো একটা শর্ত সত্য হলে সেটা সত্য।
এবার যদি দেখতে চাই যে, সব গুলো কোর্স দেখবো তবে যাদের ক্রেডিট ২ এর কম সেগুলো ছাড়াঃ
SELECT
course_title, course_instructor, course_type, course_credit
FROM
courses
WHERE
NOT course_credit < 2;
Output:
RENAME TABLE
আমরা টেবিল এর নাম দিয়েছি courses
এবং ডেটা রেখেছি spring-22 সেমিস্টারের কোর্স সমূহ। এখন অন্য সেমিস্টারের কোর্স গুলো রাখতে চাইলে সে টেবিল গুলো কি নাম দেবো? যদি সব গুলো সেমিস্টারের নামে আলাদা আলাদ টেবিল থাকে তবে সেই সব টেবিল থেকে ডেটা রিড, রাইট বা আপডেট করা আরো সহজ হতো না? হুম অনেক সহজ হতো। তাহলে প্রথমে আমরা আমাদের বর্তমান টেবিল এর নাম পরিবর্তন করিঃ
RENAME TABLE courses TO courses_spring_2022;
RENAME TABLE কমান্ডের সাথে প্রথমে বর্তমান টেবিল এবং TO দিয়ে নতুন টেবিল নাম লিখে রান করলে টেবিল নাম পরিবর্তন হয়ে যাবে।
এখন যদি আমাদের কি কি টেবিল আছে দেখতে চাই তবে আমাদের পরিবর্তিত নাম টা দেখাবেঃ
SHOW TABLES;
Output:
DELETE
আমরা যদি আমাদের courses_spring_2022
টেবিল থেকে কোন রো ডিলেট করতে চাই তবেঃ
DELETE FROM courses_spring_2022
WHERE
course_id = 2
এখন Select কমান্ড দিয়ে ডাটা গুলো দেখলে ২ নাম্বার কোর্স টা পাবো নাঃ
SELECT * FROM courses_spring_2022;
আমরা যদি আমাদের 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 ইউজারনামে।