MySQL স্কিমা কী? ডেটাবেস, টেবিল এবং মেটাডেটা কীভাবে পরীক্ষা করবেন (সম্পূর্ণ গাইড)

目次

MySQL‑এ “Schema” কী? (শব্দাবলি এবং মৌলিক ধারণা)

অনেক নবীন ব্যবহারকারী, যারা সদ্য MySQL ব্যবহার শুরু করেছেন, অথবা অন্য ডেটাবেস সিস্টেম থেকে স্থানান্তরিত হচ্ছেন, তারা প্রায়ই “schema” শব্দে আটকে যান। যদিও “schema” শব্দটি বিভিন্ন ডেটাবেসে ব্যবহৃত হয়, এর অর্থ সিস্টেমের ওপর নির্ভর করে ভিন্ন হতে পারে। শুরু থেকেই এটি স্পষ্টভাবে বোঝা অত্যন্ত গুরুত্বপূর্ণ।

মূলত, “schema” মানে “গঠন” বা “নকশা”। রিলেশনাল ডেটাবেস ম্যানেজমেন্ট সিস্টেম (RDBMS) এর প্রেক্ষাপটে, এটি সাধারণত ডেটাবেসের সম্পূর্ণ গঠন সংজ্ঞা, যার মধ্যে টেবিলের কনফিগারেশন, কলামের তথ্য, ইনডেক্স, ভিউ, স্টোরড প্রোসিডিউর ইত্যাদি অন্তর্ভুক্ত

তবে, MySQL‑এ “schema” এবং “database” প্রায় সমান অর্থে ব্যবহৃত হয়। অফিসিয়াল MySQL ডকুমেন্টেশন স্পষ্টভাবে বলে যে “schema = database”, এবং দুটোই পরস্পরের বদলে ব্যবহার করা হয়। উদাহরণস্বরূপ, স্কিমা তৈরি করতে আপনি CREATE DATABASE কমান্ড ব্যবহার করেন।

অন্যান্য RDBMS সিস্টেম যেমন Oracle এবং PostgreSQL‑এ “schema” এবং “database” স্পষ্টভাবে আলাদা করা হয়:

  • Oracle : একটি স্কিমা হল ব্যবহারকারী অনুযায়ী পরিচালিত অবজেক্টের সংগ্রহ। ডেটাবেস হল শারীরিক কন্টেইনার, এবং এর মধ্যে একাধিক স্কিমা থাকে।
  • PostgreSQL : একটি ডেটাবেসে একাধিক স্কিমা (নেমস্পেস) থাকতে পারে, যা টেবিল ও ভিউকে শ্রেণীবদ্ধ ও পরিচালনা করতে সহায়তা করে।

এর বিপরীতে, MySQL‑এ “database” = “schema”। ব্যাখ্যায় যেই শব্দই ব্যবহার করা হোক, বাস্তবিক অপারেশন ও ব্যবস্থাপনা পদ্ধতি একই থাকে। তাই MySQL‑এ “schema পরীক্ষা করা” মূলত “ডেটাবেস পরীক্ষা করা”ই বোঝায়।

ইংরেজি ডকুমেন্টেশনে উভয় “schema” এবং “database” শব্দই দেখা যায়, এবং MySQL ম্যানুয়াল কখনও কখনও সেগুলোকে একসাথে ব্যবহার করে। বাস্তবে, MySQL ডকুমেন্টেশনে “schema” দেখা গেলে আপনি এটিকে “database” হিসেবে বুঝতে পারেন।

MySQL‑নির্দিষ্ট শব্দাবলীর ব্যবহার সঠিকভাবে বুঝে আপনি সিস্টেম পরিচালনা বা প্রযুক্তিগত ডকুমেন্টেশন রেফারেন্স করার সময় বিভ্রান্তি এড়াতে পারবেন। পরবর্তী অংশ থেকে আমরা ধাপে ধাপে MySQL‑এ স্কিমা (ডেটাবেস) কীভাবে পরীক্ষা করা যায় তা স্পষ্টভাবে ব্যাখ্যা করব।

[Basics] MySQL স্কিমা কীভাবে পরীক্ষা করবেন (লিস্ট, সুইচ, টেবিল)

“MySQL‑এ একটি “schema (database)” এর বিষয়বস্তু বুঝতে, মৌলিক কমান্ড ও প্রক্রিয়া জানা গুরুত্বপূর্ণ। এই অংশে আমরা সাধারণ অপারেশনগুলো—স্কিমা তালিকা থেকে টেবিল ও কলাম তথ্য পরীক্ষা করা পর্যন্ত—ধৈর্যসহকারে ব্যাখ্যা করব। নবীন ব্যবহারকারীরাও সহজে অনুসরণ করতে পারবেন।

স্কিমা (ডেটাবেস) তালিকা করা

MySQL‑এ আপনি সার্ভারে একাধিক ডেটাবেস (স্কিমা) তৈরি করতে পারেন।
তাদের তালিকা দেখতে নিম্নলিখিত কমান্ড ব্যবহার করুন:

SHOW DATABASES;

এই কমান্ড চালালে সার্ভারের সব স্কিমা (ডেটাবেস) এর নাম প্রদর্শিত হবে। কিছু পরিবেশে আপনি SHOW SCHEMATA; ব্যবহার করতে পারেন, যা SHOW DATABASES; এর সমান ফলাফল দেয়। সংস্করণ পার্থক্য নিয়ে উদ্বিগ্ন হলে অফিসিয়াল ম্যানুয়াল দেখুন।

সক্রিয় স্কিমা পরিবর্তন করা

নির্দিষ্ট কোনো স্কিমা (ডেটাবেস) এ কাজ করতে হলে প্রথমে সেটি নির্বাচন করতে হবে।

স্কিমা পরিবর্তন করতে ব্যবহার করুন:

USE database_name;

উদাহরণস্বরূপ, sample_db নামের স্কিমা ব্যবহার করতে লিখুন:

USE sample_db;

এরপরের সব অপারেশন এই নির্বাচিত স্কিমা (ডেটাবেস) এ প্রয়োগ হবে।

টেবিল ও কলাম গঠন পরীক্ষা করা

প্রতিটি স্কিমা বহু টেবিল ধারণ করে।
টেবিলের তালিকা পেতে ব্যবহার করুন:

SHOW TABLES;

এই কমান্ড বর্তমান নির্বাচিত স্কিমার সব টেবিলের নাম দেখাবে।

নির্দিষ্ট টেবিলের গঠন (কলামের নাম, ডেটা টাইপ, NULL সেটিং ইত্যাদি) দেখতে নিম্নলিখিত কমান্ডগুলোর যেকোনো একটি ব্যবহার করুন:

DESCRIBE table_name;

অথবা

SHOW COLUMNS FROM table_name;

দুইটি কমান্ডের ফলাফল প্রায় একই। উদাহরণস্বরূপ, users টেবিলের কলাম গঠন দেখতে লিখুন:

DESCRIBE users;

স্কিমা বিস্তারিত সেটিংস পরীক্ষা করা

স্কিমা-নির্দিষ্ট সেটিংস যেমন ক্যারেক্টার সেট ও কলেশন পর্যালোচনা করতে ব্যবহার করুন:

SHOW CREATE DATABASE database_name;

এই কমান্ডটি স্কিমা (ডাটাবেস) তৈরি করতে ব্যবহৃত SQL স্টেটমেন্ট আউটপুট করে। এটি ক্যারেক্টার এনকোডিং এবং কলেশন সেটিংস যাচাই করার জন্য বিশেষভাবে উপযোগী, যাতে কনফিগারেশন-সম্পর্কিত সমস্যাগুলি প্রতিরোধ করা যায়।

মূল পয়েন্টগুলি

  • সমস্ত মৌলিক পরিদর্শন কাজ স্ট্যান্ডার্ড MySQL কমান্ড ব্যবহার করে সম্পন্ন করা যায়।
  • ফলাফলগুলি সরাসরি টার্মিনাল (কমান্ড লাইন) এ প্রদর্শিত হয়, যা আপনাকে দক্ষতার সাথে অগ্রসর হতে সহায়তা করে।
  • অধিকাংশ কাজ GUI টুল যেমন MySQL Workbench বা phpMyAdmin ব্যবহার করেও করা যায়, তবে সমস্যার সমাধানে CLI কমান্ডগুলি প্রায়শই আরও নির্ভরযোগ্য হয়।

এই বিভাগে পরিচিত করা কমান্ডগুলি MySQL নিয়মিত ব্যবহারকারী যে কারো জন্য মৌলিক জ্ঞান।

[Advanced] INFORMATION_SCHEMA ব্যবহার করে বিশদ তথ্য পুনরুদ্ধার

যদিও মৌলিক MySQL কমান্ডগুলি আপনাকে স্কিমা এবং টেবিলের গঠন পরীক্ষা করতে দেয়, আরও বিশদ তথ্য বা বৃহৎ পরিমাণে এক্সট্র্যাকশন INFORMATION_SCHEMA ব্যবহার করে সর্বোত্তমভাবে পরিচালনা করা যায়। INFORMATION_SCHEMA হল একটি সিস্টেম ডাটাবেস যা আপনাকে MySQL সার্ভার দ্বারা অভ্যন্তরীণভাবে পরিচালিত মেটাডেটা স্ট্যান্ডার্ড SQL টেবিল হিসেবে রেফারেন্স করতে সক্ষম করে।

এটি প্রয়োজনীয় তথ্যের নমনীয় SQL-ভিত্তিক পুনরুদ্ধার সক্ষম করে, ফলে অটোমেশন এবং রিপোর্টিংয়ের জন্য এটি অত্যন্ত উপযোগী।

INFORMATION_SCHEMA কী?

INFORMATION_SCHEMA হল MySQL-এ ডিফল্টভাবে অন্তর্ভুক্ত সিস্টেম ডাটাবেসগুলোর একটি।
এতে “SCHEMATA”, “TABLES”, এবং “COLUMNS” ইত্যাদি টেবিল রয়েছে, যা ডাটাবেস (স্কিমা), টেবিল এবং কলাম সম্পর্কিত মেটাডেটা সংরক্ষণ করে।

আপনি এই টেবিলগুলোকে স্ট্যান্ডার্ড SELECT স্টেটমেন্ট ব্যবহার করে কুয়েরি করে অভ্যন্তরীণ কনফিগারেশন এবং গঠনগত বিশদ বের করতে পারেন।

প্রধান ব্যবহার ক্ষেত্রসমূহ:

  • বিশদ স্কিমা এবং টেবিল তথ্য পুনরুদ্ধার
  • ডেটা টাইপ, কনস্ট্রেইন্ট এবং ডিফল্ট মান যাচাই
  • ফিল্টার এবং অ্যাগ্রিগেশন ব্যবহার করে নমনীয় এক্সট্র্যাকশন সম্পাদন

স্কিমা তথ্য পুনরুদ্ধার

সমস্ত স্কিমা (ডাটাবেস) এর তালিকা এবং বৈশিষ্ট্য পুনরুদ্ধার করতে:

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA;

এই কুয়েরি স্কিমা নাম (SCHEMA_NAME), ডিফল্ট ক্যারেক্টার সেট (DEFAULT_CHARACTER_SET_NAME), কলেশন (DEFAULT_COLLATION_NAME) এবং অন্যান্য কনফিগারেশন বিবরণ প্রদান করে।

টেবিল এবং কলাম তথ্য পুনরুদ্ধার

বৃহৎ পরিমাণে বিশদ টেবিল বা কলাম তথ্য পুনরুদ্ধার করতে, “TABLES” এবং “COLUMNS” টেবিল ব্যবহার করুন।

উদাহরণ: একটি স্কিমার মধ্যে সমস্ত টেবিল তথ্য পুনরুদ্ধার

SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'target_schema_name';

উদাহরণ: বিশদ কলাম তথ্য পুনরুদ্ধার

SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'target_schema_name' 
  AND TABLE_NAME = 'target_table_name';

এটি কলাম নাম (COLUMN_NAME), ডেটা টাইপ (DATA_TYPE), NULL সেটিংস (IS_NULLABLE), ডিফল্ট মান (COLUMN_DEFAULT), এবং সর্বোচ্চ দৈর্ঘ্য (CHARACTER_MAXIMUM_LENGTH) প্রদান করে।

ব্যবহারিক ফিল্টারিং উদাহরণ

INFORMATION_SCHEMA WHERE ক্লজ ব্যবহার করে নমনীয় ফিল্টারিংকে সমর্থন করে।

উদাহরণ ১: একটি স্কিমার মধ্যে সমস্ত INT-টাইপের কলাম এক্সট্র্যাক্ট করুন

SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'target_schema_name'
  AND DATA_TYPE = 'int';

উদাহরণ ২: নির্দিষ্ট কলেশন ব্যবহারকারী টেবিলগুলি খুঁজে বের করুন

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'target_schema_name'
  AND TABLE_COLLATION LIKE 'utf8mb4%';

INFORMATION_SCHEMA ব্যবহার করে MySQL-এর অভ্যন্তরীণ গঠনকে নমনীয় SQL-ভিত্তিক এক্সট্র্যাকশন এবং বিশ্লেষণ করা যায়।

[Expert] InnoDB মেটাডেটা এবং sys স্কিমা ব্যবহার (MySQL 8.0+)

স্কিমা এবং টেবিল তথ্য পুনরুদ্ধারে স্বাচ্ছন্দ্যবোধ করার পর, আপনি উন্নত ব্যবস্থাপনা এবং পারফরম্যান্স বিশ্লেষণের দিকে অগ্রসর হতে পারেন। বিশেষত InnoDB স্টোরেজ ইঞ্জিন ব্যবহার করা বা বৃহৎ-স্কেল সিস্টেম পরিচালনা করার সময়, INFORMATION_SCHEMA-এর InnoDB টেবিল এবং sys স্কিমা অত্যন্ত উপযোগী।

InnoDB ইঞ্জিন মেটাডেটা

InnoDB হল MySQL-এর ডিফল্ট স্টোরেজ ইঞ্জিন এবং এটি ট্রানজ্যাকশন, রো-লেভেল লকিং এবং ফরেন কী কনস্ট্রেইন্ট সমর্থন করে।

উপযোগী InnoDB-সম্পর্কিত টেবিলগুলোর মধ্যে রয়েছে:

  • INNODB_TABLES : InnoDB-পরিচালিত টেবিলগুলির মৌলিক তথ্য
  • INNODB_COLUMNS : কলাম তথ্য
  • INNODB_INDEXES : ইন্ডেক্সের বিশদ
  • INNODB_LOCKS : বর্তমান লক তথ্য
  • INNODB_TRX : সক্রিয় লেনদেন

উদাহরণ: বর্তমান লক স্ট্যাটাস পরীক্ষা করুন

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

sys স্কিমা ব্যবহার করা

MySQL 5.7 এবং পরের সংস্করণে (বিশেষত 8.0+) ডিফল্টভাবে উপলব্ধ, sys স্কিমা INFORMATION_SCHEMA এবং পারফরম্যান্স স্কিমা ডেটার মানব-বান্ধব সংক্ষিপ্ত ভিউ প্রদান করে।

সাধারণত ব্যবহৃত ভিউগুলো:

  • sys.schema_table_statistics : টেবিল অ্যাক্সেস পরিসংখ্যান
  • sys.schema_index_statistics : ইন্ডেক্স ব্যবহার পরিসংখ্যান
  • sys.innodb_lock_waits : লক অপেক্ষা তথ্য
  • sys.user_summary : ব্যবহারকারী কার্যকলাপের সারাংশ

উদাহরণ: বর্তমান লক অপেক্ষা পরীক্ষা করুন

SELECT * FROM sys.innodb_lock_waits;

উদাহরণ: সব টেবিলের জন্য রিড/রাইট পরিসংখ্যান পরীক্ষা করুন

SELECT * FROM sys.schema_table_statistics;

সারাংশ

INFORMATION_SCHEMA এবং sys স্কিমা হল SQL এর মাধ্যমে MySQL-এর অভ্যন্তরীণ অবস্থা ভিজ্যুয়ালাইজ করার শক্তিশালী টুল
এগুলো বিশেষত InnoDB ব্যবহারকারী প্রোডাকশন পরিবেশে অথবা উন্নত অপারেশন ও পারফরম্যান্স অপ্টিমাইজেশনের লক্ষ্য রাখে এমন পরিবেশে মূল্যবান।

[Quick Reference by Use Case] প্রস্তাবিত কমান্ডসমূহ

MySQL-এ স্কিমা বা টেবিলের গঠন পরীক্ষা করার সময়, আপনার লক্ষ্য অনুযায়ী সঠিক কমান্ড নির্বাচন করা দক্ষতার জন্য গুরুত্বপূর্ণ। নিচের টেবিলটি উদ্দেশ্য অনুযায়ী সাধারণত ব্যবহৃত কমান্ডগুলো সংক্ষেপে দেখায়।

PurposeCommand / SQL ExampleNotes
List all schemas on the serverSHOW DATABASES;Most basic command
List tables in the selected schemaSHOW TABLES;Displays tables in current schema
Retrieve all table info in a schemaSELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'schema_name';Includes table attributes
Quickly check column definitionsDESCRIBE table_name;
SHOW COLUMNS FROM table_name;
Shows column names and types
Retrieve detailed column infoSELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'schema_name' AND TABLE_NAME = 'table_name';Includes NULL and default values
Check schema creation settingsSHOW CREATE DATABASE schema_name;Includes COLLATE and CHARSET
Check table creation detailsSHOW CREATE TABLE table_name;Includes indexes and foreign keys
Check InnoDB locks and transactionsSELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
SELECT * FROM sys.innodb_lock_waits;
Useful for InnoDB
Check table/index access statisticsSELECT * FROM sys.schema_table_statistics;
SELECT * FROM sys.schema_index_statistics;
Uses sys schema
Check user privilegesSHOW GRANTS FOR 'username'@'hostname';Verify user permissions

[Troubleshooting and Error Handling]

MySQL-এ স্কিমা বা টেবিল পরীক্ষা করার সময়, আপনি কমান্ড চালু না হওয়া বা তথ্য না দেখানোর মতো সমস্যার সম্মুখীন হতে পারেন।

অনুমতি ত্রুটি (অ্যাক্সেস ডিনাইড)

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

ERROR 1044 (42000): Access denied for user 'user'@'host' to database 'mysql'
ERROR 1142 (42000): SHOW command denied to user 'user'@'host' for table 'database'

সমাধানসমূহ:

  • প্রশাসক অ্যাকাউন্ট দিয়ে লগইন করুন।
  • প্রয়োজনীয় SHOW বা SELECT অধিকার অনুরোধ করুন। GRANT SHOW DATABASES ON *.* TO 'user'@'host'; FLUSH PRIVILEGES;

বর্তমান অধিকার পরীক্ষা করুন:

SHOW GRANTS FOR 'user'@'host';

ডেটাবেস বা টেবিল পাওয়া যায়নি

উদাহরণ:

ERROR 1049 (42000): Unknown database 'db_name'
ERROR 1146 (42S02): Table 'db_name.table_name' doesn't exist

টাইপো, কেস সংবেদনশীলতা পরীক্ষা করুন, এবং নিম্নলিখিত দিয়ে অস্তিত্ব যাচাই করুন:

SHOW DATABASES;
SHOW TABLES;

ভার্সন পার্থক্য

কিছু ফিচার MySQL সংস্করণের উপর নির্ভরশীল।

সংস্করণ পরীক্ষা করুন:

SELECT VERSION();

অন্যান্য সমস্যাসমূহ

  • নেটওয়ার্ক/সার্ভার সমস্যার কারণে সংযোগ ব্যর্থতা
  • কুয়েরি টাইমআউট — কুয়েরি অপ্টিমাইজ করুন বা টাইমআউট সেটিংস সামঞ্জস্য করুন

FAQ (প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী)

Q1. MySQL স্কিমা কীভাবে Oracle বা PostgreSQL এর স্কিমা থেকে ভিন্ন?

A. MySQL-এ, স্কিমা = ডেটাবেস। Oracle এবং PostgreSQL-এ, স্কিমা এবং ডেটাবেস আলাদা ধারণা।

Q2. বিস্তারিত কলাম তথ্য পুনরুদ্ধারের সবচেয়ে কার্যকর পদ্ধতি কী?

A.

SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'database_name';

Q3. কীভাবে ক্যারেক্টার সেট বা কলেশন পরীক্ষা করতে পারি?

A. ব্যবহার করুন:

SHOW CREATE DATABASE database_name;
SHOW CREATE TABLE table_name;

Q4. তথ্য দেখার অনুমতি নেই। আমি কী করব?

A. প্রয়োজনীয় অধিকার অনুরোধ করুন। আপনার বর্তমান অনুমতিগুলি পরীক্ষা করুন:

SHOW GRANTS FOR 'username'@'hostname';

Q5. GUI টুলে স্কিমা তথ্য কীভাবে পরীক্ষা করব?

A. MySQL Workbench বা phpMyAdmin-এ, স্কিমা বাম নেভিগেশন প্যানেলে দেখা যায়। আপনি SQL ট্যাবে SQL কমান্ডও চালাতে পারেন।

উপসংহার এবং সম্পর্কিত লিঙ্কসমূহ

সারাংশ

  • MySQL-এ, স্কিমা = ডাটাবেস।
  • মৌলিক চেকগুলি SHOW DATABASES; , SHOW TABLES; , এবং DESCRIBE table_name; ব্যবহার করে করা যেতে পারে।
  • INFORMATION_SCHEMA এবং sys স্কিমা গভীর অন্তর্দৃষ্টি এবং পারফরম্যান্স দৃশ্যমানতা প্রদান করে।
  • অধিকাংশ সমস্যার মূল কারণ অনুমতি, নামকরণ ত্রুটি, অথবা সংস্করণ পার্থক্য।
  • দক্ষ অপারেশনের জন্য দ্রুত রেফারেন্স কমান্ডগুলি হাতে রাখুন।

সম্পর্কিত লিঙ্কগুলি

সমাপনী

আমরা আশা করি এই গাইডটি আপনাকে দৈনন্দিন অপারেশনে MySQL স্কিমা এবং টেবিলগুলি আরও ভালভাবে পরিচালনা করতে সহায়তা করবে। নতুন MySQL সংস্করণ এবং অপারেশনাল চাহিদা পরিবর্তনের সঙ্গে সঙ্গে আপনার জ্ঞান আপডেট করতে থাকুন।