এসকিউএল ইনসার্ট স্টেটমেন্ট – SQL INSERT

আগের দুইটা লেখায় আমরা অলরেডি ইন্সার্ট স্টেটমেন্ট ব্যবহার করেছি। এবার বিস্তারিত জানা যাক। আগের দুইটা লেখার লিঙ্কঃ

ইনসার্ট স্টেটমেন্ট নিয়ে কাজ করার পূর্বে আমাদের ডেটাবেজ ওপেন করে নিতে হবে। তার জন্যঃ

sqlite3 db_name.db

যদি এই নামে ডেটাবেজ না থাকে, তাহলে নতুন ডেটাবেজ তৈরি হবে।

এরপর আমরা একটা টেবিল তৈরি করে নিব id, name এবং email কলাম নামেঃ

CREATE TABLE users (id INTEGER PRIMARY KEY AUTO_INCREMENT, name TEXT, email TEXT);

এবার ইনসার্ট স্টেটমেন্ট লেখার জন্য প্রস্তুত। এর আগের লেখায় যদিও আমরা এভাবে ইনসার্ট স্টেটমেন্ট লিখেছি:

INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');

যা user টেবিলে একটা রেকর্ড ইনসার্ট করবে।

INSERT INTO স্টেটমেন্টের সিনট্যাক্স হচ্ছে নিচের মতঃ

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

মানে প্রথম ভ্যালু প্রথম কলামে, দ্বিতীয় ভ্যালু দ্বিতীয় কলামে ইনসার্ট হবে।

নির্দিষ্ট কলামে রেকর্ড ইনসার্ট করাঃ

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

INSERT INTO users (name) VALUES ('Charlie Veum');

এখানে id অটোমেটিক্যালি ইঙ্ক্রিমেন্ট হয়েছে। যা আমরা টেবিল তৈরি করার সময় বলে দিয়েছি id কলাম অটো ইঙ্ক্রিমেন্ট হতে। যদিও মডার্ড DBMS এ বলে না দিলেও id কলাম অটো ইঙ্ক্রিমেন্ট করে নেয়। আর email ফিল্ড নাল রয়েছে। এর মানে email কলামে এই রেকর্ডের ডেটা নেই।

সব গুলো কলামে ডেটা ইনসার্ট করাঃ

INSERT INTO users VALUES (NULL, 'Charlie Davis', '[email protected]');

উপড়ে আমরা কলামের নাম বলে দেইনি। এরপরও অটোম্যাটিক্যালি ডেটা name এবং email ফিল্ডে অটো ম্যাপ হয়ে ইনসার্ট হয়েছে। এখানে প্রথম ভ্যালু বা id কলামের ভ্যালু NULL দিয়ে বলে দিয়েছি অটো ইঙ্ক্রিমেন্ট করে নিতে।

অটো ম্যাপিং এর জন্য আমাদের টেবিলে যত গুলো কলাম আছে, ঠিক তত গুলো ভ্যালু দিতে হবে। যদি ভ্যালু কম দেই, তাহলে অটো ম্যাপিং হবে না। এরর দেখাবে। যেমন নিচের স্ট্যাটমেন্ট রান করে দেখতে পারেন:

INSERT INTO users VALUES ('John Doe', '[email protected]');

যা আমাদের Parse error: table users has 3 columns but 2 values were supplied এমন একটা এরর দেখাবে।

একাধিক রো-তে ডেটা ইনসার্ট

এর আগে আমরা দেখেছি কিভাবে একাধিক রেকর্ড ইনসার্ট করা যায়। আবার দেখিঃ

INSERT INTO users (name, email)
VALUES 
    ('Jane Smith', '[email protected]'),
    ('Alice Johnson', '[email protected]'),
    ('Bob Brown', '[email protected]');

INSERT OR REPLACE

SQLite এ INSERT OR REPLACE স্টেটমেন্ট রয়েছে যা দিয়ে নির্দিষ্ট প্রাইমারি কি যদি থাকে, তাহলে আগের ভ্যালুকে রিপ্লেস করবে অথবা নতুন রেকর্ড হিসেবে ইনসার্ট করবে।

INSERT OR REPLACE INTO users (id, name, email)
VALUES (1, 'Eve Adams', '[email protected]');

আমরা দেখব user টেবিলের প্রথম রেকর্ডটা পরিবর্তন হয়ে গিয়েছে।

এবার এমন একটা আইডি দিয়ে ট্রাই করে দেখেন, যে আইডিতে কোন রেকর্ড নেই। যেমনঃ

INSERT OR REPLACE INTO users (id, name, email) VALUES (10, 'Eve Adams', '[email protected]');

দেখব নতুন রেকর্ড যোগ হয়েছে।

ইনসার্টের পাশা পাশি আইডি রিটার্ণ পাওয়া

SQLite 3.35+ থেকে ইনসার্ট করার পাশা পাশি সদ্য ইনসার্ট হওয়া আইটেমের আইডি পাওয়া যায়। তার জন্য এভাবে INSERT স্ট্যাটমেন্ট লিখতে হয় RETURNING ক্লজ ব্যবহার করেঃ

INSERT INTO users (name, email)
VALUES ('Ada Lovelace', '[email protected]')
RETURNING id;

MySQL এ SELECT LAST_INSERT_ID(); স্টেটমেন্ট ব্যবহার করে লাস্ট রেকর্ডের আইডি পাওয়া যায়।

SQL নিয়ে অন্যান্য লেখা গুলো পাওয়া যাবে বাংলায় ডেটাবেজ টিউটোরিয়াল – SQL পেইজে।

Leave a Reply