আজকে আমাদের আলোচনার বিষয় – SQL এর সূচনা যা অধ্যায়-৫ এর ডাটাবেস ম্যানেজমেন্ট সিস্টেম এ অন্তর্ভুক্ত। এটি চার বছর মেয়াদি কোর্সের আলোকে লেখা হয়েছে। ডাটাবেস ম্যানেজমেন্ট সিস্টেমের বিভিন্ন ইংরেজি বই অনুসরণ করেই রচনা করা হয়েছে। ইঞ্জিনিয়ারিং বিষয়ের যে-কোন বই সম্পূর্ণরূপে বাংলা ভাষায় রচনা করা সম্ভব নয়। এজন্যে কিছু কিছু ইংরেজি শব্দকে বাংলায় অনুবাদ করা হয়নি। ফলে ছাত্রছাত্রীদের হয়ত কিছুটা অসুবিধা হতে পারে।
Table of Contents
SQL এর সূচনা
সূচনা
Dr. F.R. Codd 1970 সালে Association of the Computer Machinery (ACM) নামক জার্নালে “A relational model of data for large shaped data bank” নামক এক নিবন্ধ প্রকাশ করেন। এ নিবন্ধে তিনি Relational Database Management System এর উপর একটি আদর্শ মডেল দাঁড় করান। Dr. F.R. Codd এর ডাটাবেসের মডেলটি রিলেশনাল ডাটাবেসের ক্ষেত্রে – সর্বজনগৃহীত আদর্শ মডেল হিসেবে স্বীকৃত।
পরবর্তীতে বিভিন্ন ধরনের ডাটাবেস ফাইল থেকে ডাটা নিয়ে কাজ করার জন্য IBM কোম্পানি SQL তৈরি করে। ১৯৭৯ সালে ওরাকল কর্পোরেশন সর্বপ্রথম SQL ল্যাঙ্গুয়েজকে বাণিজ্যিকভাবে ব্যবহার উপযোগী করেন এবং আমেরিকান ন্যাশনাল স্ট্যান্ডার্ড। ইনস্টিটিউট (ANSI) ১৯৮৬ সালে SQL-কে RDMS এ প্রণীত ল্যাঙ্গুয়েজ হিসাবে ব্যবহার শুরু করে।
১৯৮৬ সালেই ANSI এবং ISO, SQL স্ট্যান্ডার্ড হিসেবে SQL-86 এ প্রকাশ করে। পরবর্তীতে SQL এর এক্সটেন্ডেড স্ট্যান্ডার্ড হিসেবে SQL-89, SQL-92, SQL-99, SQL-2003, SQL-2006 এবং SQL-2008 ভার্শন প্রকাশ করে।
SQL-এর বিভিন্ন অংশের উল্লেখ
SQL কী?
Structured Query Language সংক্ষেপে SQL। এটি একটি শক্তিশালী ডাটা ম্যানিপুলেশন ও ডেফিনিশন ল্যাংগুয়েজ (Data Definition Language and Data Manipulation Language)। রিলেশনাল ডাটাবেস (RDMS) অ্যাকসেস করার জন্য SQL হচ্ছে একটি হাতিয়ার। অতীতে SQL কেবলমাত্র মেইনফ্রেম কম্পিউটারে ব্যবহার করা হত। বর্তমানে ডেস্কটপ কম্পিউটারেও রিলেশনাল ডাটাবেস প্লাটফর্ম ব্যবহৃত হওয়ার ফলে SQL ব্যবহার শুরু হয়েছে।
SQL কতগুলো স্টেটমেন্ট ব্যতিত আর কিছুই নয়। এগুলো এক বা একাধিক ডাটাবেস, টেবিল, কলাম ইনডেক্স ইত্যাদিতে প্রয়োগ করা হয়। অধিকাংশ SQL স্টেটমেন্টই ফলাফল হিসাবে একসেট রেকর্ড প্রদান করে।
SQL-এর প্রধান বৈশিষ্ট্যসমূহঃ
i. SQL ইংরেজ ভাষার কাছাকাছি টেক্সট বেসড একটি ল্যাংগুয়েজ।
ii. এতে SELECT, INSERT, DELETE- এ রকম শব্দসমূহ দ্বারা কমান্ড সেট তৈরি করা হয়েছে।
iii. SQL একটি non-procedural ল্যাগুয়েজ। কী তথ্যাবলী দরকার কেবলমাত্র তা বলে দিলেই হয়। কিভাবে কুয়েরি করা যাবে, তা বলার দরকার হয় না।
iv. SQL একই সময়ে এক একটি রেকর্ডকে প্রসেস না করে বরং একসেট রেকর্ড প্রসেস করে।
v. SQL বিভিন্ন শ্রেণীর ব্যবহারকারীগণ ব্যবহার করতে পারেন। যেমন ডাটাবেস Administrative, প্রোগ্রামার, ম্যানেজম্যান্ট বা বিভিন্ন End user গণ।
SQL Sentences গঠনের (লেখার) নিয়ম (Rules of SQL Sentence Construct):
Verb:
Clause 1]<paral: 1 paral: 2 paral:….n>,
[Clause 2]<para2: 1 para2: 2 para2:….n>…………[Clause n];
i. SQL কমান্ড এক বা একাধিক লাইনে লেখা যায়।
ii. একটি SQL statement শুরু করতে হয় verb দিয়ে। এ verb এর সাথে যুক্ত থাকে nouns এবং adjectives (An SQL statement starts with a verb. This verb may have additional nouns and adjectives.) ।
iii. প্রত্যেকটি verb এর অধীনে এক বা একাধিক ক্লজ থাকে (Each verb is followed by a number of clauses)।
iv. প্রত্যেকটি ক্লজ এর অধীনে এক বা একাধিক parameters থাকে (Each clause has one or more parameters)।
v. SQL statement এ দুইটি ক্লোজকে পৃথক করতে মাঝে একটি Space দিতে হয় (A space separates clauses within an SQL statement) ।
vi. Clause এর মধ্যে parameters কে পৃথক করতে Comma দিতে হয় (A comma separates parameters within a clause) |
vii. SQL statement শেষ করতে; (সেমিকোলন) ব্যবহার করতে হয় (A semi colon is used to terminate the SQL statement)।
viii. SQL statement আপার-কেস বা লোয়ার-কেস যে কোন অক্ষরে লেখা যায় অর্থাৎ Case সেনসিটিভ নয়।
ix. SQL প্রম্পটে Run কমান্ড প্রয়োগ করা যায়।
SQL সিনট্যাক্স ডায়াগ্রাম (SQL Language Syntax Diagram)
SQL গঠনের ডায়াগ্রাম নিম্নে দেয়া হলঃ
sql-stmt-list:
SQL-এর বিভিন্ন অংশ (Several parts of SQL):
SQL যে সমস্ত অংশসমূহের সমন্বয়ে গঠিত, তা হলঃ
১। DDL (Data Defination Language)
ক. Create statement
খ. Drop statement
গ. Alter statement
ঘ. Rename statement
২। DML (Data Manipulation Language)
ক. Insert Statement
খ. Update statement
গ. Delete statement
ঘ. Truncate statement
ঙ. Merge statement
৩। ইন্টিগ্রিটি (Integrity)
ক. এন্টিটি ইন্টিগ্রিটি (Entity Integrity)
খ. ডোমেইন ইন্টিগ্রিটি (Domain Integrity)
গ. রেফারেন্সিয়াল ইন্টিগ্রিটি (Referential Integrity)
৪। ভিউ ডেফিনিশন (View Definition)
৫। ট্র্যানজ্যাকশন কন্ট্রোল (Transaction control)
ক. Start Transaction
খ. Commit
গ. Rollback
৬। এমবেডেড SQL (Embedded SQL)
৭। ডাইনামিক SQL (Dynamic SQL)
৮। অথরাইজেশন (Authorization)
১. DDL (Data Definition Language) : SQL-এর এ DDL অংশ রিলেশনাল স্কীমাগুলোকে ডিফাইন, ডিলিটিং, ইনডেক্স, ক্রিয়েটিং, মডিফাইং (For defining, deleting, Indexing and modifying relation schemas) করার জন্য প্রয়োজনীয় কমান্ডসমূহ সরবরাহ করে থাকে।
ব্যবহৃত কমান্ডসমূহঃ
ক. Creaie statement
খ. Drop statement
গ. Alter statement
ঘ. Rename statement
ক. Create statement : Create statement কমান্ড দ্বারা রিলেশনাল ডাটাবেসে সাধারণত ডাটাবেসের টেবিল তৈরি করা হয়। টেবিল তৈরি করার জন্য সবার আগে জানতে হবে টেবিল তৈরির Syntax (নিয়ম)। নিম্নে টেবিল তৈরির Syntex. (নিয়ম) দেয়া হলঃ
Syntax:
Column Name | Data Type | size |
Client_no | varchar2 | 6 |
Name | varchar2 | 20 |
Address | varchar2 | 30 |
City | varchar2 | 15 |
Pincode | number | 6 |
Remark | varchar2 | 60 |
bal_due | number | 10,2 |
DESCRIBE tablename;
উদাহরণ-২ঃ product_master নামে আরো একটি table তৈরি করা যাক, যার structure হলঃ
Column Name | Data Type | size |
product_no | varchar2 | 6 |
description | varchar2 | 25 |
profit_percent | number | 4,2 |
unit_measure | varchar2 | 10 |
qty_no_hand | number | 8 |
sell_price | number | 8,2 |
cost_price | number | 8,2 |
টেবিলের কোড:
SQL> create table product master
2 (product_no varchar2 (6), description varchar2 (25),
3 profit_percent number (4, 2), unit_measure varchar2 (10),
4 qty_no_hand number (8), sell_price number (8, 2),
5 qty_price number (8, 2);
খ. Drop statement: টেবিল মুছে ফেলার জন্য DROP স্টেটমেন্ট ব্যবহার করা হয়। এজন্য সিন্ট্যাক্স হলঃ
Syntax:
DROP TABLE table_name;
উদাহরণ : ধরি, Supplier নামের টেবিলটি মুছে ফেলার জন্য নিম্নরূপ কমান্ড প্রয়োগ করে ফলাফল লক্ষ করিঃ
SQL> DROP TABLE Supplier;
গ. Alter statement : কোন টেবিল তৈরি করার পরে বিভিন্ন কারণে তা পরিবর্তন বা সংশোধন করার প্রয়োজন হতে পারে। এ কারণে টেবিলের স্ট্রাকচার পরিবর্তন করার জন্য সাধারণত টেবিলে কোন নতুন কলাম সংযোগ করা যায় কিংবা কোন টেবিলের কলামের বর্তমান ডাটাটাইপকে পরিবর্তন করে মডিফাই করা যায়। এ জন্য Alter স্টেটমেন্ট ব্যবহার করা হয়।
নতুন কলাম যোগ করার সিন্ট্যাক্স হল-
Syntax :
ALTER TABLE table_name
ADD(newcolumn_name datatype(size), newcolumn_name datatype(size),);
উদাহরণ-১: ধরি, Client_master নামক টেবিলে client_tel ও client_fax নামক দু’টি কলাম যোগ করা হবে। প্রথম কলামটির দৈর্ঘ্য হবে ৭ সংখ্যা এবং দ্বিতীয় কলামটির দৈর্ঘ্য হবে ১০ সংখ্যা। এজন্য নিম্নরূপ কমান্ড প্রয়োগ করে ফলাফল লক্ষ করিঃ
লক্ষ করিঃ দু’টি নতুন কলাম যুক্ত হয়েছে।
টেবিলের কলাম-এর বর্তমান ডাটাটাইপকে পরিবর্তন করে মডিফাই করা যায়। তার জন্য সিন্ট্যাক্স হলঃ
Syntax:
ALTER TABLE table_name
MODIFY (columnname newdatatype(newsize));
উদাহরণ-২: ধরি, Client_master নামক টেবিলে client_fax নামক কলামে বর্তমান ডাটাটাইপকে Varchar2 এবং বর্তমা দৈর্ঘ্য ১০ কে পরিবর্তন করে ১৫ দ্বারা পরিবর্তন করা যায়। এজন্য নিম্নরূপ কমান্ড প্রয়োগ করে ফলাফল লক্ষ করি:
SQL> Alter table client_master 2 Modify (client_fax varchar2 (15));
এবং
লক্ষ্য করলে দেখা যাচ্ছে যে, client_master টেবিলটির client_fax নামক কলাম পরিবর্তিত হয়েছে, যা তীর চিহ্ন যা চিহ্নিত করা হয়েছে।
ঘ. Rename statement : RENAME স্টেটমেন্ট দ্বারা টেবিলের নাম পরিবর্তন করা যায়। তার জন্য সিন্ট্যাক্স হল:
Syntax :
RENAME old_tablename TO new_tablename;
উদাহরণঃ ধরি, Client_master নামের টেবিলকে Client_master1 নামে পরিবর্তন করি। এজন্য নিম্নরূপ কমান্ড প্রয়োগ ফলাফল লক্ষ করিঃ
উপরে চিহ্নিত টেবিলই পরিবর্তিত টেবিল।
২. DML (Data Manipulation Language) : SQL-এর এ DML অংশ রিলেশনাল অ্যালজেবরা এবং টুপল রিলেশনাল ক্যালকুলাস এর উপর ভিত্তি করে প্রতিষ্ঠিত একটি কুয়েরি ল্যাংগুয়েজ (DML includes a Query language based on both the relational algebra and the tupe relational calculus)। এতে যে সমস্ত কমান্ডসমূহ সরবরাহ করে থাকে, তা নিম্নে দেয়া হলঃ
ব্যবহৃত কমান্ডসমূহঃ
ক. Insert Statement
খ. Update statement
গ. Delete statement
ঘ. Truncate statement
ঙ. Merge statement
ক. Insert Statement : ডাটাবেসের টেবিলে সরাসরি টাইপ করে ডাটা ইনপুট করতে INSERT স্টেটমেন্ট ব্যবহৃত হয়। INSERT এর সাথে INTO ব্যবহৃত হয়। স্টেটমেন্ট এর Syntax নিম্নরূপঃ
Syntax:
INSERT INTO table name
(column_name, column_name)
VALUES (expression, expression);
- এখানে INSERT INTO কী- ওয়ার্ডটি লিখে যে টেবিলে ডাটা ইনপুট করতে হবে, তার নাম লিখতে হয়।
- যে সকল কলামে ডাটা ইনপুট করা হবে, সে সকল কলামের নামগুলো লিখতে হয়।
- VALUES কী-ওয়ার্ডটি উল্লেখ করে যে ডাটা ইনপুট করা হবে, তা লিখতে হয়।
উদাহরণঃ ধরি Client_master টেবিলের নিম্নোক্ত কলামসমূহে ডাটা ইনপুট করি :
Column Name | Value |
Client_no | C02000 |
Name | Smriti |
Address |
H-16, Thana line Halishahar
|
City | Chittagong |
Pincode | 400057 |
Remark | Elisted |
রেকর্ড ইনপুট করার জন্য নিম্নোক্তভাবে কোড লেখা যায়-
SQL> INSERT INTO client_master
2 (client_on, name, address, city,
3 pincode, remarks)
4 Values (‘C02000’, ‘Smriti’,
5 ‘H-16, thana line halishahar’,
6 ‘Chittagong’, 400057. ‘Enlisted’);
- উল্লেখ্য, Character value উল্লেখ করার সময় কোটেশন (‘) দ্বারা আবদ্ধ করতে হবে।
- Numerical value তে কোটেশন (”) দ্বারা আবদ্ধ করতে হবে না।
- কলাম নাম এবং ভ্যালুর মধ্যে রিলেশন রক্ষিত হয়। যেমনঃ প্রথম ভ্যালু প্রথম কলামে, দ্বিতীয় ভ্যালু দ্বিতীয় কলামে এভাবে সংরক্ষিত হয়।
- যদি কোন টেবিলে যতগুলো কলাম থাকে, হুবহু সব কলামের জন্য ভ্যালু উল্লেখ করলে, এক্ষেত্রে কলামের নাম উল্লেখ না করলেও চলবে।
কোন টেবিল থেকে Existing টেবিলে ডাটা ইনপুট করানো যায়। এক্ষেত্রে সিন্ট্যাক্সটি নিম্নরূপ:
Syntax:
INSERT INTO tablename
SELECT columnname, Columnname,
FROM tablename
খ. Update Statement: টেবিলের এক বা একাধিক রো-এর কোন কলাম বা কলামসমূহের ভ্যালু আপডেট করার প্রয়োজন হয়। টেবিলের রেকর্ড কোন ভ্যালু দ্বারা আপডেট করার জন্য UPDATE স্টেটমেন্ট ব্যবহার করা হয়। যে ভ্যালু দ্বারা কলাম আপডেট করা হবে, তা Set ক্লোজের সাথে উল্লেখ করতে হয়। UPDATE স্টেটমেন্ট দ্বারা নিম্নোক্ত ২টি কাজ করা যায়-
- সকল রো আপডেট করা (All the rows from a table)
- শর্তসাপেক্ষে কতিপয় রো আপডেট করা (A select set of rows from a table)
টেবিলের সকল রো আপডেট করার সিন্ট্যাক্স নিম্নরূপঃ
Syntax:
UPDATE tablename
SET columnname=expression, columnname=expression;
শর্তসাপেক্ষে কতিপয় রো আপডেট করার সিন্ট্যাক্স নিম্নরূপ :
Syntax:
UPDATE scheme.table
SET column value
WHERE condition
উদাহরণ: ধরি, Client_master টেবিলে সকল ক্লায়েন্টের bal due কলাম থেকে ৫০০ টাকা কমিশন দেয়া হবে। এজন্য bal_due কলামটি আপডেট করা প্রয়োজন। শুরুতে আগে bal_due এর পরিমাণ দেখে নেয়ার জন্য নিচের কোড এবং ফলাফল
লক্ষ করি:
এবার কলামটি আপডেট করার জন্য নিম্নরূপ কমান্ড প্রয়োগ করে ফলাফল লক্ষ করিঃ
গ. Delete Statement: ডাটাবেসের রেকর্ড বা টেবিল মুছে ফেলার জন্য Delete কমান্ডটি ব্যবহৃত হয়। এজন্য সিন্ট্যাক্সটি নিম্নরূপঃ
Syntax:
DELETE FROM tablename
উদাহরণ-১: Supplier table থেকে সকল রেকর্ড মুছে ফেলার জন্য কমান্ড এবং ফলাফল লক্ষ করিঃ
SQL> Delete From supplier,
2 rows deleted.
কোন টেবিল থেকে শর্তাসাপেক্ষে এক বা একাধিক রেকর্ড মুছে ফেলতেও Delete কমান্ডটি ব্যবহৃত হয়। এজন্য সিন্ট্যাক্সটি হচ্ছে-
Syntax:
DELETE FROM tablename
WHERE search_condition:
উদাহরণ-২: যে সকল Salesman-গণ ১০০ ডলারের কম কমিশন অর্জন করেছে, তাদেরকে Emp টেবিল থেকে মুছে ফলার জন্য নিচের মতো কমান্ড প্রয়োগ করে ফলাফলা লক্ষ করি:
SQL> Delete From emp
2 where comm<100;
1 row deleted.
ঘ. Truncate Statement: কোন টেবিল থেকে খুব দ্রুতভাবে সকল ডাটা মুছে ফেলার জন্য এ স্টেটমেন্টটি ব্যবহৃত হয়।
ঙ. Merge Statement: সাধারণত একাধিক টেবিল থেকে ডাটাগুলোকে একত্র করার জন্য এ কমান্ডটি ব্যবহৃত হয়। এটি Insert এবং Update কমান্ডকে একত্র (Combine) করে থাকে। এ জন্য একে মাঝে মাঝে “Upsert”-ও বলা হয়।
৩. ইন্টিগ্রিটি (Integrity): ডাটাবেসে প্রবেশকৃত বা এন্ট্রিকৃত ডাটা কি সঠিক (accurate)? বৈধ (valid)? সঙ্গতিপূর্ণ (Consistent)? ইত্যাদি স্পেসিফাই বা নিদিষ্ট করার জন্য প্রয়োজনীয় কমান্ডসমূহ SQL-এর এ অংশে অন্তর্ভুক্ত থাকে। এ জাতীয় কমান্ডের মাধ্যমে বাধ্যবাধকতা প্রয়োগ করে ডাটাবেসে ডাটা সংরক্ষণও করা যায়।
যেমনঃ কোন ব্যাংক অ্যাকাউন্ট থেকে ক্রেডিট/ডেবিট কার্ডের মাধ্যমে একবারে সর্বোচ্চ ৫০,০০০ টাকা চেয়ে বেশি উত্তোলন করা যাবে না এবং অ্যাকাউন্টে ৫,০০০/- টাকার নিচে থাকলে কোন টাকা উত্তোলন করা যাবে না।
ডাটা ইন্টিগ্রিটিকে তিন ভাগে ভাগ করা যায়ঃ
ক. এন্টিটি ইন্টিগ্রিটি (Entity Integrity)
খ. ডোমেইন ইন্টিগ্রিটি (Domain Integrity)
গ. রেফারেন্সিয়াল ইন্টিগ্রিটি (Referential Integrity)।
৪. ভিউ ডেফিনিশন (View Definition) : ভিউ হচ্ছে একটি লজিক্যাল টেবিল। এক বা একাধিক টেবিল থেকে কতগুলো কলাম নিয়ে ভিউ তৈরি করা হয়। সাধারণত কোন টেবিল তৈরি করার পরে সকল ইউজারকে টেবিলের সকল কলাম ব্যবহার করতে দেয়া নিরাপদ নাও হতে পারে। এ ক্ষেত্রে কোন ইউজারকে যে সকল কলামে অ্যাকসেস করতে দেয়া হবে, সে সকল কলামের সমন্বয়ে একটি ভিউ তৈরি করা হবে এবং তাকে অনুমোদন দেয়া হবে।
একটি ভিউ সাধারণ টেবিলের মতোই কাজ করে। ইহার কলামগুলো বিভিন্ন টেবিল হতে নেয়া হয়। যে টেবিল হতে কলামগুলো নেয়া হয়, তাকে বেস (Base) টেবিল বলে।
ভিউতে টেবিলের মতো ডাটা সংরক্ষণ করার ক্ষমতা থাকে না। কেবলমাত্র রেকর্ডসমূহ প্রদর্শন করতে পারে। বরং এটি একটি অস্থায়ী টেবিলের মতো কাজ করে। ভিউতে কাজ করার সময় টেবিলের মূল ডাটায় প্রবেশ করা যায় না। ফলে টেবিলের নিরাপত্তা বিধান করা সহজ হয়।
ভিউ নিম্নলিখিত ২টি টেবিল হিসাবে কাজ করেঃ
১. ভার্চুয়াল টেবিল
২. লজিক্যাল টেবিল।
Creation of View (ভিউ তৈরি করা): ভিউ তৈরি করার সিন্ট্যাক্স নিম্নরূপঃ
Syntax:
CREATE VIEW view_name AS
SELECT column_name, column_name
FROM tablename
WHERE columnname=expression list;
উদাহরণ-১: নিচের উদাহরণে Emp টেবিলের Sal কলামকে ১২ দ্বারা গুণ করে বার্ষিক বেতন নির্ণয় এবং প্রত্যেক কর্মচারীদে নাম ও তাদের বার্ষিক বেতন ভিউতে অন্তর্ভুক্ত করার জন্য কমান্ড প্রয়োগ করে ফলাফল লক্ষ করি।
SQL> CREATE VIEW emp_view AS
2 SELECT ename, sal * 12 “annual salary”
3 FROM emp
4 WHERE deptno = 20;
View created.
এবার আমরা দেখি যে, কিভাবে একাধিক টেবিল থেকে ভিউ তৈরি করা হয়।
SQL> CREATE VIEW emp_dept_view
2 AS
3 SELECT empno, ename, loc, emp, deptno
4 FROM emp, dept
5 WHERE emp. deptno – dept. deptno;
এখানে emp, dept. টেবিল দু’টির সমন্বয়ে cmp_dept_view নামের একটি তৈরি করা হয়।
Creation of Read Only View (রিড অনলি ভিউ তৈরি করা):
WITH READ ONLY অপশনের সহায়তায় রিড অনলি ভিউ করা যায়। নিচে একটি উদাহরণের মাধ্যমে তা দেখানো হলঃ
SQL> CREATE VIEW emp_dept_view_1
2 AS
3 SELECT empno, ename, loc, emp, deptno
4 FROM emp, dept
5 WHERE emp. deptno = dept. deptno
6 WITH REAN ONLY;
View created.
Use of View (ভিউ এর ব্যবহার):
ভিউ ব্যবহার করে ডাটাবেসের নিরাপত্তা বাড়ানো যায়। বিভিন্ন ধরনের ইউজার বা ব্যবহারকারী বিদ্যমান। সীমিত কার্যক্রম চালানো অনুমতি দেয়া হয়-এমন ইউজারের জন্য ভিউ থেকে কুয়েরি করতে দেয়া হয়। ভিউ এর আরো কিছু সাধারণ ব্যবহার নিচে উল্লেখ করা হলঃ
- জটিল ডাটাসমূহ গোপন রাখাঃ ডাটাবেসের অভ্যন্তরে একটি টেবিলের কিছু কলাম গোপন রাখা প্রয়োজন। যেমন:একটি Employee রেকর্ডে Salary এবং job-grade- এর মতো কিছু গোপনীয় কলাম থাকতে পারে। আমরা যদি টেবিলের এ কলামগুলো বাদ দিয়ে কোন ভিউ তৈরি করি এবং পরে ব্যবহারকারীদেরকে শুধু উক্ত ভিউ এর উপর কাজ করার অধিকার দেই, তাহলে সাধারণ ব্যবহারকারীগণ আর উক্ত কলামের ডাটাগুলো দেখতে পারবে না। এতে ডাটাবেসের গোপনীয়তা এবং সাথে সাথে নিরাপত্তা বজায় থাকবে।
- ডাটার একটি সাবসেট উপস্থাপন করা: নিরাপত্তার কারণে ব্যবহারকারীকে টেবিলের সকল রেকর্ডসমূহ দেখতে দেয়া হয়।
না। এক্ষেত্রে নির্বাচিত কলামসমূহ হতে নির্বাচিত রেকর্ড নিয়ে ভিউ তৈরি করা যায়। - জটিল ধরনের জয়েন গোপন রাখা: ভিউতে কুয়েরি থাকে। এখানে ব্যবহারকারীর নিকট টেবিলসমূহের মধ্যে সম্পর্ক গোপন রাখা সম্ভব হয়।
৫. ট্র্যানজ্যাকশন কন্ট্রোল (Transaction control): ট্র্যানজ্যাকশনের শুরু এবং শেষ নির্ধারনের জন্য যে সমস্ত কমান্ড প্রয়োজন তা SQL-এর এ অংশে অন্তর্ভুক্ত আছে।
ট্র্যানজ্যাকশন হল একটি লজিক্যাল অপারেশন, যা পুরাপুরি সম্পূর্ণ হতে পারে আবার নাও হতে পারে। পুরোপুরি সম্পূর্ণ হতে হলে কিছু কন্ডিশনের মধ্য দিয়ে অতিবাহিত হতে হয়। আর এতে রেকর্ডের আপডেট বা পরিবর্তন হয়।
ব্যবহৃত কমান্ডসমূহঃ
ক. Start Transaction, খ. Commit, গ. Rollback
ক. Start Transaction: ডাটাবেসের ট্র্যানজ্যাকশন বা কাজ শুরু করতে এ স্টেটমেন্টটি ব্যবহৃত হয়।
খ. Commit: ডাটাবেসের রিলেশন বা টেবিলের এন্টিটি বা রেকর্ডের যাবতীয় পরিবর্তন বা আপডেটকে স্থায়ীভাবে সংরক্ষণ করার জন্য Commit স্টেটমেন্টটি ব্যবহৃত হয়।
গ. Rollback: কন্ডিশন যদি অগ্রাহ্য হয়ে থাকে অর্থাৎ কন্ডিশনের কারনে ডাটাবেসের রিলেশন বা টেবিলের ডাটার পরিবর্তন বা আপডেট যদি অগ্রাহ্য হয়ে থাকে, তাহলে পূর্বের রেকর্ডকে অপরিবর্তন রাখার জন্য Rollback স্টেটমেন্টটি ব্যবহৃত হয়। কিন্তু একবার যদি Commit স্টেটমেন্ট সম্পূর্ণ (Complete) হয়ে থাকে, তাহলে Rollback স্টেটমেন্টটি ব্যবহার করে ডাটা বা রেকর্ডের আগের অবস্থার ফিরে আনা যায় না।
উদাহরণঃ কোন এক ব্যাংকের অ্যাকাউন্ট নং ১২৩৪ থেকে অ্যাকাউন্টের মালিক ২০,০০০/- উত্তোলন করবে। এক্ষেত্রে যদি ঐ অ্যাকাউন্টে উক্ত টাকার চেয়ে বেশি থাকে (ধরি ২১০০০/- আছে), তাহলে উক্ত মালিক টাকা উত্তোলন করতে পারবে এবং উত্তোলনের পর বাকি টাকা তার অ্যাকাউন্টে থাকবে (২১,০০০ ২০,০০০ = ১০০০/-)। অর্থাৎ রেকর্ড কন্ডিশনের মধ্য দিয়ে ট্র্যানজ্যাকশন বা পরিবর্তন হল। এ পরিবর্তীত রেকর্ডকে স্থায়ীভাবে সংরক্ষণ করতে হবে।
আর যদি ঐ অ্যাকাউন্টে উক্ত টাকার চেয়ে কম থাকে তাহলে ঐ ব্যক্তি টাকা উত্তোলন করতে পারবে না। অর্থাৎ রেকর্ড পরিবর্তন বা ট্র্যানজ্যাকশন হতে গিয়েও কন্ডিশনের কারণে পরিবর্তন ট্র্যানজ্যাকশন হতে পারলো না।
উক্ত কাজের জন্য কমান্ড নিম্নরূপঃ
START TRANSACTION:
UPDATE Account SET amount amount-200 WHERE account_number=1234; IF ERRORS-0 COMMIT:
IF ERRORS <>0 ROLLBACK;
৬ & ৭. ইমবেডেড SQL এবং ডাইনামিক SQL (Embedded and Dynamic SQL):
SQL-এর এ অংশে জেনারেল পারপাস প্রোগ্রামিং ল্যাংগুয়েজ যেমন- PL/I, Cobol, Pascal, Java, Fortran, C/C++ ইত্যাদিতে কিভাবে SQL স্টেটমেন্টসমূহ হতে পারে, তার আলোচনা এতে অন্তর্ভুক্ত আছে।
৮. অথরাইজেশন (Auhorization) : SQL-এর এ অংশে রিলেশনে, ভিউতে কিংবা ডাটাবেসে প্রবেশাধিকার (access rights) নির্ধারণে, ডাটাবেসকে কন্ট্রোল করার জন্য প্রয়োজনীয় কমান্ডসমূহ অন্তর্ভুক্ত আছে।
আরও দেখুনঃ