मुख्य सामग्री पर जाएं
मॉड्यूल 9 · पाठ 3 का 4पाठ्यक्रम में 35/57~10 min
मॉड्यूल पाठ (3/4)

संरचना बदलना: तालिका बदलें

किसी एप्लिकेशन की ज़रूरतें समय के साथ बदलती रहती हैं, और डेटाबेस को अपडेट रहना चाहिए। ALTER TABLE एक (बेहद बहुमुखी) कमांड है जो मौजूदा टेबल स्कीमा को बिना हटाए संशोधित करने के लिए समर्पित है (अंदर के डेटा को जोखिम में डाले बिना)।

कॉलम संशोधित करना (जोड़ें/छोड़ें/बदलें)

कॉलम जोड़ने में सावधानी की आवश्यकता होती है. यदि तालिका में पहले से ही डेटा है, तो "नॉट न्यूल" कॉलम जोड़ने से पोस्टग्रेज में एक त्रुटि आएगी: इसे पुरानी पंक्तियों में क्या सम्मिलित करना चाहिए? आपको एक 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;

केवल जोड़ना या हटाना ही नहीं: आपको अक्सर किसी कॉलम या उसकी किसी बाधा के प्रकार को फिर से कॉन्फ़िगर करने की आवश्यकता होती है:

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 की तरह, हम उत्पादन ऐप में पहले से ही उपयोग में आने वाली तालिका में CONSTRAINT संलग्न करने के लिए ALTER TABLE का उपयोग कर सकते हैं।

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लोड हो रहा है...

'उत्पाद' तालिका में वर्तमान में एक 'नाम' कॉलम है। 'नाम' कॉलम का नाम बदलकर 'शीर्षक' करके तालिका को संशोधित करें। नाम बदलें कॉलम ऑपरेशन का उपयोग करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

सिंटैक्स: तालिका बदलें... कॉलम का नाम बदलें... से...

3 प्रयासों के बाद समाधान उपलब्ध है

पोस्ट-प्रोडक्शन में बाधाएँ जोड़ना

व्यायाम#sql.m9.l3.e2
प्रयास: 0लोड हो रहा है...

एक CHECK बाधा (जिसे 'verifica_prezzo' नाम दिया गया है) जोड़कर 'उत्पाद' तालिका को संशोधित करें जिसके लिए मूल्य (कॉलम 'कीमत') 0 से अधिक होना आवश्यक है। बाधा को मूल कॉलम को हटाए बिना जोड़ा जाना चाहिए।

संपादक लोड हो रहा है...
संकेत दिखाएँ

सिंटैक्स: परिवर्तन तालिका तालिका बाधा नाम जोड़ें चेक (...)

3 प्रयासों के बाद समाधान उपलब्ध है