মূল কন্টেন্টে যান
মডিউল 9 · 3-এর পাঠ 4কোর্সে 35/57~10 min
মডিউল পাঠ (3/4)

গঠন পরিবর্তন: ALTER TABLE

একটি অ্যাপ্লিকেশনের প্রয়োজন সময়ের সাথে পরিবর্তিত হয়, এবং ডাটাবেস অবশ্যই রাখা উচিত। ALTER TABLE হল (অত্যন্ত বহুমুখী) কমান্ড যা বিদ্যমান টেবিল স্কিমাগুলিকে পরিবর্তন করার জন্য নিবেদিত হয় বিনাএগুলিকে ফেলে দেওয়া হয় (ভিতরের ডেটা ঝুঁকিতে)।

কলাম পরিবর্তন করা (ADD/DROP/ALTER)

একটি কলাম যোগ করার জন্য যত্ন প্রয়োজন। যদি টেবিলে ইতিমধ্যেই ডেটা থাকে, তাহলে "NOT NULL" কলাম যোগ করলে Postgres-এ একটি ত্রুটি দেখা দেবে: পুরানো সারিগুলিতে এটি কী সন্নিবেশ করা উচিত? আপনাকে অবশ্যই একটি DEFAULT সংযুক্ত করতে হবে৷

SQL
-- Aggiungiamo una colonna
ALTER TABLE users ADD COLUMN age INTEGER; -- Ok, sarà NULL ovunque

-- Aggiungiamo NOT NULL, quindi diamogli un deafult
ALTER TABLE users ADD COLUMN active BOOLEAN NOT NULL DEFAULT true;

-- Cancellare una colonna (ATTENZIONE! i dati andranno persi)
ALTER TABLE users DROP COLUMN age;

শুধু যোগ করা বা অপসারণ করা নয়: আপনাকে প্রায়শই একটি কলামের type বা এর সীমাবদ্ধতাগুলির একটিকে পুনরায় কনফিগার করতে হবে:

SQL
-- Cambia il tipo di dato (postgreSQL farà un 'cast' dei dati esistenti se possibile)
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(100);

-- Aggiunge il vincolo NOT NULL
ALTER TABLE users ALTER COLUMN username SET NOT NULL;

-- Rimuove il vincolo NOT NULL (ritorna ad accettare null)
ALTER TABLE users ALTER COLUMN username DROP NOT NULL;

রানটাইমে সীমাবদ্ধতা যোগ করা হচ্ছে

ঠিক যেমন CREATE TABLE এর সাথে, আমরা ALTER TABLE ব্যবহার করতে পারি একটি CONSTRAINT একটি টেবিলে সংযুক্ত করতে যা ইতিমধ্যেই উৎপাদন অ্যাপে ব্যবহৃত হচ্ছে৷

SQL
-- Aggiungi un nuovo Foreign Key
ALTER TABLE orders
  ADD CONSTRAINT fk_order_status FOREIGN KEY (status_id) REFERENCES statuses(id);

-- Aggiungi un CHECK
ALTER TABLE products
  ADD CONSTRAINT price_positive CHECK (price > 0);

-- E per distruggerli?
ALTER TABLE products DROP CONSTRAINT price_positive;

নাম পরিবর্তন করা হচ্ছে

উভয় কলাম এবং টেবিলের নাম পরিবর্তন করা যেতে পারে:

SQL
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;

চেষ্টা করে দেখুন

ব্যায়াম#sql.m9.l3.e1
প্রচেষ্টা: 0লোড হচ্ছে...

'পণ্য' টেবিলে বর্তমানে একটি 'নাম' কলাম রয়েছে। 'নাম' কলামের নাম পরিবর্তন করে 'শিরোনাম' করে টেবিলটি পরিবর্তন করুন। RENAME COLUMN অপারেশন ব্যবহার করুন৷

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

সিনট্যাক্স: সারণী পরিবর্তন করুন ... কলামের নাম পরিবর্তন করুন ... থেকে ...

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

পোস্ট-প্রোডাকশনে সীমাবদ্ধতা যোগ করা

ব্যায়াম#sql.m9.l3.e2
প্রচেষ্টা: 0লোড হচ্ছে...

একটি চেক সীমাবদ্ধতা (যার নাম 'verifica_prezzo') যোগ করে 'পণ্য' সারণী পরিবর্তন করুন যার মূল্য (কলাম 'দাম') 0-এর বেশি হওয়া প্রয়োজন। মূল কলামটি না ফেলেই সীমাবদ্ধতা যোগ করতে হবে।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

সিনট্যাক্স: ALTER TABLE টেবিল যোগ করুন সীমাবদ্ধতা নাম চেক (...)

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ