ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 8 · 4లో పాఠం 3కోర్సులో 31/57~12 min
మాడ్యూల్ పాఠాలు (3/4)

పట్టికలు మరియు పరిమితులను సృష్టిస్తోంది: DDL

మీరు ఇప్పటి వరకు ఇప్పటికే ఉనికిలో ఉన్న పట్టికలపై పని చేస్తున్నారు (customers, orders…). DDL ("డేటా డెఫినిషన్ లాంగ్వేజ్") ప్రకటనలను సూచిస్తుంది ** స్కీమాను సృష్టించండి మరియు సవరించండి**: పట్టికలు, నిలువు వరుసలు, పరిమితులు, సూచికలు.

పట్టికను సృష్టించండి: వాక్యనిర్మాణం

SQL
CREATE TABLE nome_tabella (
  colonna  TIPO  [vincoli_colonna],
  …,
  [vincoli_tabella]
);

ఉదాహరణ: కస్టమర్‌లు మరియు ఉత్పత్తులను లింక్ చేసే కోరికల జాబితా:

SQL
CREATE TABLE wishlists (
  id           SERIAL PRIMARY KEY,
  customer_id  INTEGER NOT NULL REFERENCES customers(id),
  product_id   INTEGER NOT NULL REFERENCES products(id),
  added_on     DATE NOT NULL DEFAULT CURRENT_DATE,
  note         TEXT,
  UNIQUE (customer_id, product_id)
);

దానిని ముక్కల వారీగా విడగొడదాం.

అత్యంత సాధారణ రకాలు

రకంఇది ఏమి కలిగి ఉంది
INTEGER / INTపూర్తి సంఖ్యలు (-2.1B … +2.1B)
BIGINTపెద్ద పూర్ణాంకాలు
NUMERIC(p, s)ఖచ్చితమైన దశాంశాలు — డబ్బు, శాతాలు
TEXTవేరియబుల్-లెంగ్త్ స్ట్రింగ్స్
VARCHAR(n)గరిష్ఠ పొడవు n
BOOLEANTRUE / FALSE / NULL
DATEతేదీ మాత్రమే
TIMESTAMPతేదీ + సమయం (సమయమండలి లేదు)
TIMESTAMPTZటైమ్‌జోన్‌తో తేదీ + సమయం
SERIALINTEGER ఆటో-ఇంక్రిమెంటింగ్ సీక్వెన్స్‌తో

పరిమితులు

పరిమితి అనేది PostgreSQL స్వయంచాలకంగా అమలు చేసే నియమం: ఒకవేళ INSERT/UPDATE దానిని ఉల్లంఘిస్తుంది, ఆపరేషన్ విఫలమవుతుంది.

SQL
PRIMARY KEY                         -- identifica univocamente la riga, non NULL
NOT NULL                            -- vieta NULL
UNIQUE                              -- vieta duplicati su questa colonna
REFERENCES tabella(colonna)         -- foreign key
CHECK (espressione_booleana)        -- es. CHECK (price > 0)
DEFAULT espressione                 -- valore di default se non fornito

పరిమితులను కాలమ్‌లో ఇన్‌లైన్ లేదా **టేబుల్-లెవల్‌గా ప్రకటించవచ్చు పరిమితులు ** (క్షేత్రాల క్రింద). మిశ్రమానికి ఉదాహరణ UNIQUE:

SQL
UNIQUE (customer_id, product_id)   -- niente coppia (cliente, prodotto) duplicata

పరిమితిని తనిఖీ చేయండి

CHECK అనుకూల నియమాన్ని అమలు చేస్తుంది:

SQL
CREATE TABLE stock_alerts (
  product_id   INTEGER PRIMARY KEY REFERENCES products(id),
  threshold    INTEGER NOT NULL CHECK (threshold >= 0),
  notify_email TEXT    NOT NULL,
  active       BOOLEAN NOT NULL DEFAULT true
);

threshold తప్పనిసరిగా ≥ 0; ఎవరైనా INSERT … threshold = -5ని ప్రయత్నించినట్లయితే, అది నిర్బంధ లోపంతో విఫలమవుతుంది.

పడిపోవడం మరియు మార్చడం

SQL
DROP TABLE wishlists;                                 -- elimina la tabella (e i dati!)
DROP TABLE IF EXISTS wishlists;                       -- senza errore se non esiste
ALTER TABLE customers ADD COLUMN newsletter BOOLEAN NOT NULL DEFAULT false;
ALTER TABLE customers DROP COLUMN newsletter;

మీ వంతు

వ్యాయామం#sql.m8.l3.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

కింది నిలువు వరుసలతో విష్‌లిస్ట్‌ల పట్టికను సృష్టించండి: id (సీరియల్ ప్రైమరీ కీ), customer_id (INTEGER NULL రిఫరెన్స్‌లు కాదు కస్టమర్‌లు(id)), product_id (INTEGER NULL రిఫరెన్స్‌లు కాదు (id)), add_on (DATE NULL DEFAULT CURRENT_DATEతో). జతపై UNIQUE పరిమితిని జోడించండి (customer_id, product_id).

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

UNIQUE (customer_id, product_id) దిగువన పట్టిక-స్థాయి అడ్డంకిగా ఉంటుంది.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#sql.m8.l3.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

డిఫాల్ట్ తప్పుతో బూలియన్ రకం, శూన్యం కాదు, వార్తాలేఖ కాలమ్‌ను కస్టమర్‌లకు టేబుల్‌కి జోడించండి. ఒకే ఆల్టర్ టేబుల్ స్టేట్‌మెంట్‌ని ఉపయోగించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

డిఫాల్ట్ లేకుండా, ALTER విఫలమవుతుంది ఎందుకంటే అడ్డు వరుసలు ఇప్పటికే ఉన్నాయి మరియు కొత్త నిలువు వరుస శూన్యం కాదు.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది