ডাটাবেসে জমা রাখা ডেটা সবসময় একই থাকে না – কর্মীর বেতন বাড়ে, ঠিকানা বদলায়, ফোন নম্বর আপডেট হয়। SQLite-তে বিদ্যমান রেকর্ড পরিবর্তন করার জন্য আমরা UPDATE স্টেটমেন্ট ব্যবহার করি। এটি DML (Data Manipulation Language) কমান্ড। UPDATE-এর সাথে WHERE ক্লজ ব্যবহার করে আমরা নির্দিষ্ট রেকর্ড চিহ্নিত করি। যদি WHERE না দেওয়া হয়, তাহলে টেবিলের সকল রেকর্ড আপডেট হয়ে যায় – যা প্রায়শই অনাকাঙ্ক্ষিত ও বিপজ্জনক। আজকের পর্বে আমরা UPDATE-এর সঠিক ও নিরাপদ ব্যবহার শিখব।
পূর্বপ্রস্তুতি
- SQLite ইন্সটল থাকতে হবে (সিরিজের ৩য় পর্ব দেখুন)।
company.dbডাটাবেসে আমাদের পরিচিতCOMPANYটেবিল। না থাকলে নিচের কোড চালিয়ে প্রস্তুত করুন:
bash
sqlite3 company.db
sql
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); INSERT INTO COMPANY VALUES (1, 'Paul', 32, 'California', 20000.00); INSERT INTO COMPANY VALUES (2, 'Allen', 25, 'Texas', 15000.00); INSERT INTO COMPANY VALUES (3, 'Teddy', 23, 'Norway', 20000.00); INSERT INTO COMPANY VALUES (4, 'Mark', 25, 'Rich-Mond', 65000.00); INSERT INTO COMPANY VALUES (5, 'David', 27, 'Texas', 85000.00); INSERT INTO COMPANY VALUES (6, 'Kim', 22, 'South-Hall', 45000.00); INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00);
- আউটপুট ফরম্যাটিং:
.header onও.mode column।
১. UPDATE-এর সিনট্যাক্স
মৌলিক গঠন:
sql
UPDATE table_name SET column1 = value1, column2 = value2, ..., columnN = valueN WHERE condition;
- table_name – যে টেবিলের ডেটা পরিবর্তন করতে চান।
- SET – এর পরে কলামের নাম ও তার নতুন মান। একাধিক কলাম একসাথে কমা দিয়ে আপডেট করা যায়।
- WHERE – ঐচ্ছিক কিন্তু অত্যন্ত গুরুত্বপূর্ণ। এই শর্তে নির্দিষ্ট সারি(গুলো) চিহ্নিত হয়। বাদ দিলে টেবিলের সব রেকর্ড আপডেট হবে।
২. নির্দিষ্ট রেকর্ড আপডেট (WHERE সহ)
ধরুন, ID 6-এর কর্মী Kim-এর ঠিকানা পরিবর্তন করতে হবে ‘Texas’-এ।
sql
UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
এখন পুরো টেবিল দেখুন:
sql
SELECT * FROM COMPANY;
ফলাফল:
text
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 Texas 45000.0 -- পরিবর্তিত 7 James 24 Houston 10000.0
শুধু ID 6-এর ADDRESS পরিবর্তিত হয়েছে, বাকিরা অপরিবর্তিত।
একাধিক কলাম একসাথে আপডেট:
sql
UPDATE COMPANY SET ADDRESS = 'Los Angeles', SALARY = 50000.00 WHERE NAME = 'Paul';
এটি Paul-এর ঠিকানা ও বেতন একই কমান্ডে আপডেট করে।
AND/OR দিয়ে জটিল শর্ত:
sql
UPDATE COMPANY SET SALARY = SALARY * 1.10 WHERE AGE > 25 AND ADDRESS = 'Texas';
টেক্সাসের ২৫+ বয়সী কর্মীদের বেতন ১০% বাড়ালাম।
৩. সকল রেকর্ড আপডেট (WHERE ছাড়া) – সতর্কতা
যদি আপনি WHERE ক্লজ বাদ দেন, তাহলে টেবিলের প্রতিটি সারি আপডেট হবে।
sql
UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 20000.00;
এখন SELECT * FROM COMPANY; দিলে পুরো টেবিল এরকম হয়ে যাবে:
text
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 Texas 20000.0 2 Allen 25 Texas 20000.0 3 Teddy 23 Texas 20000.0 4 Mark 25 Texas 20000.0 5 David 27 Texas 20000.0 6 Kim 22 Texas 20000.0 7 James 24 Texas 20000.0
এটি সাধারণত অনাকাঙ্ক্ষিত। তাই সব সময় UPDATE-তে WHERE ব্যবহার করার মানসিকতা তৈরি করুন, যতক্ষণ না আপনি নিশ্চিত যে পুরো টেবিল আপডেট করতেই চাচ্ছেন।
৪. UPDATE-তে এক্সপ্রেশন ও সাবকোয়েরি
UPDATE-তে শুধু নির্দিষ্ট মান নয়, ক্যালকুলেশন ও সাবকোয়েরিও ব্যবহার করা যায়।
গাণিতিক এক্সপ্রেশন:
sql
UPDATE COMPANY SET SALARY = SALARY + 5000 WHERE ID = 7;
সাবকোয়েরি ব্যবহার (অন্য টেবিল থেকে মান এনে):
sql
-- ধরুন আরেকটি টেবিল new_salaries (emp_id, new_sal) আছে UPDATE COMPANY SET SALARY = (SELECT new_sal FROM new_salaries WHERE emp_id = COMPANY.ID) WHERE ID IN (SELECT emp_id FROM new_salaries);
যদিও আমরা এখনো জয়েন বা সাবকোয়েরির গভীরে যাইনি, ধারণাটুকু বুঝে রাখুন।
৫. সাধারণ ভুল ও সতর্কতা
- WHERE ভুলে যাওয়া: এটি সবচেয়ে বড় বিপদ। প্রোডাকশন ডাটাবেসে একটি ভুল UPDATE পুরো সিস্টেমে বিপর্যয় ঘটাতে পারে। সর্বদা প্রথমে SELECT করে দেখুন কোন সারিগুলো আপডেট হবে:sqlSELECT * FROM COMPANY WHERE ID = 6; — আগে নিশ্চিত হন UPDATE COMPANY SET ADDRESS = ‘Texas’ WHERE ID = 6;
- প্রাইমারি কি আপডেট করা: সাধারণত প্রাইমারি কি পরিবর্তন করা উচিত নয়, কারণ অন্য টেবিলের ফরেন কি সম্পর্ক নষ্ট হতে পারে।
- কনস্ট্রেইন্ট লঙ্ঘন: UNIQUE বা NOT NULL কনস্ট্রেইন্ট থাকলে আপডেট করার সময় সতর্ক থাকুন। যেমন
NAMEকে NULL সেট করতে চাইলে এরর দেবে যদি NOT NULL থাকে। - ট্রানজ্যাকশন ব্যবহার: বড় বা সংবেদনশীল আপডেটের আগে
BEGIN;দিয়ে শুরু করুন, আপডেট সঠিক হলেCOMMIT;, নাহলেROLLBACK;দিয়ে ফিরিয়ে আনুন।
৬. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ
আমাদের অনুশীলনের জন্য শুধুমাত্র company.db ফাইলটি প্রয়োজন। কোনো অতিরিক্ত প্যাকেজের দরকার নেই। আপনি চাইলে পরীক্ষার আগে .backup দিয়ে মূল ডাটাবেসের ব্যাকআপ নিতে পারেন।
৭. প্র্যাকটিক্যাল টিপস
- প্রথমে SELECT, তারপর UPDATE: UPDATE লেখার আগে একই WHERE শর্তে SELECT চালিয়ে দেখে নিন কোন রেকর্ডগুলো নির্বাচিত হচ্ছে।
- LIMIT ব্যবহার (সাপোর্টেড সংস্করণে): SQLite 3.33+ তে
UPDATE ... LIMITসমর্থিত, যা দুর্ঘটনাবশত অনেক রেকর্ড আপডেট হওয়া ঠেকাতে পারে। - লগ রাখা: গুরুত্বপূর্ণ টেবিলে আপডেট করলে একটি লগ টেবিলে পুরনো ও নতুন মান সংরক্ষণ করা ভালো প্র্যাকটিস।
- টেস্ট ডাটাবেসে পরীক্ষা: প্রোডাকশনের আগে অবশ্যই টেস্ট ডাটাবেসে UPDATE পরীক্ষা করে নিন।
৮. সম্পূর্ণ অনুশীলন
নিচের ধাপগুলো অনুসরণ করে হাতে-কলমে শিখুন:
sql
-- নিরাপদ আপডেট: শুধু নির্দিষ্ট কর্মী UPDATE COMPANY SET SALARY = 48000 WHERE NAME = 'Kim'; -- একাধিক শর্তে UPDATE COMPANY SET ADDRESS = 'Dallas' WHERE ADDRESS = 'Texas' AND AGE < 25; -- সবাইকে একই ঠিকানায় না আনার ভুল দেখুন (ভুলেও করবেন না বাস্তবে!) -- UPDATE COMPANY SET ADDRESS = 'Nowhere'; -- এটি সব রেকর্ড বদলে দেবে -- এক্সপ্রেশন UPDATE COMPANY SET AGE = AGE + 1 WHERE ID = 3;
পরবর্তী পর্বে
আমরা শিখব SQLite DELETE Query – কিভাবে টেবিল থেকে রেকর্ড মুছে ফেলতে হয় এবং WHERE ক্লজের গুরুত্ব।
লেখকের কথা: UPDATE কমান্ড শক্তিশালী, তাই সতর্কতার সাথে ব্যবহার করুন। বাংলায় এই টিউটোরিয়াল সিরিজ চলমান রাখতে আপনার উৎসাহই প্রেরণা। ভালো লাগলে শেয়ার করুন, এবং নিয়মিত আপডেট পেতে ToLearnTeam.com সাবস্ক্রাইব করতে ভুলবেন না। কোনো প্রশ্ন থাকলে কমেন্টে জানান!
SQLite Full Course
- SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
- SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
- SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
- SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
- SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
- SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
- SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
- SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
- SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
- SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
- SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
- SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
- SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
- SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
- SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
- SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
- SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
- SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
- SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
- SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
- SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
- SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
- SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
- SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
- SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
- SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
- SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
- SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
- SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
- SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
- SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
- SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
- SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
- SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
- SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
- SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
- SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
- SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
- SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
