documentația standard de pro postgres 9
UPDATE modifică valorile coloanelor specificate în toate rândurile care satisfac condiția. Clauza SET trebuie să fie specificate, numai acele coloane care vor fi schimbate; coloanele nu au fost modificate în mod explicit să păstreze valorile lor anterioare.
Schimbarea rândurile din tabel, folosind informații din alte tabele din baza de date în două moduri: folosind interogări imbricate sau specificând tabele suplimentare în clauza FROM. Alegerea opțiunea preferată depinde de circumstanțele particulare.
RETURNAREA clauză specifică faptul că declarația UPDATE este de a calcula și de a reveni valori pentru fiecare linii de fapt schimbat. Se calculează în ea poate fi orice expresie coloanele tabelei destinație și / sau coloanele alte tabele menționate în LA. În acest caz, noile (modificate) valorile coloanele tabelului care urmează să fie utilizate în expresie. Lista RETURNAREA are aceeași sintaxă ca și lista SELECT.
Pentru a rula această comandă, trebuie să aveți dreptul de a actualiza masa, sau cel puțin pentru coloanele enumerate în lista de variabile. Trebuie să aibă, de asemenea, dreptul la toate coloanele SELECT, valorile care sunt citite în expresiile sau starea.
Nume (eventual diagrama mărită) a tabelului în cazul în care rândurile sunt schimbate. În cazul în care partea din față a numelui tabel este adăugat numai. rândurile respective sunt modificate numai în tabelul specificat. Fără rânduri numai ca sunt, de asemenea, modificate în toate tabelele, moștenite de la specificat. Dacă se dorește, după numele tabelului, puteți specifica *. să indice în mod clar faptul că operațiunea afectează toate masa copilului. alias
Alternativa țintă nume de tabel. Când specificați un nume, se ascunde complet numele real al tabelului. De exemplu, interogarea UPDATE foo AS f componente suplimentare UPDATE trebuie să se refere la un tabel țintă f numit. în loc de foo. COLUMN_NAME
numele coloanei din table_name. Numele coloanei, dacă este necesar, poate fi completată cu numele câmpului încorporat sau indexul în matrice. Numele tabelului pentru a adăuga la numele coloanei țintă nu este necesară - de exemplu, înregistrarea UPDATE nume_tabelă SET table_name.col = 1 este greșită. expresie
Exprimarea, rezultatul căreia îi este atribuită în coloană. Puteți folosi valorile anterioare ale acestei și alte coloane din tabelul din această expresie. DEFAULT
Asociați o valoare prestabilită coloană (care poate fi NULL, o dacă nu este definită o expresie implicită pentru coloana). vlozhennyy_SELECT
SELECT subinterogare. emitent ca coloane de ieșire, astfel cum sunt enumerate în lista de coloana precedentă în paranteze. Prin aceasta subinterogare trebuie să fie primite cel mult un rând. Dacă se produce un rând, valorile coloanelor din ea sunt atribuite coloanele țintă; dacă el nu se întoarce șirul, coloana țintă este setat la NULL. Acest subinterogare se poate referi la valoarea anterioară a rândului curent variabil în tabel. spisok_FROM
Listă de expresii de masă, care să permită utilizarea în expresiile clauza unde și coloanele de atribuire din alte tabele. Această listă este similar cu ceea ce este specificat în oferta oferta de la SELECT. Rețineți că tabela destinație trebuie să adăugați numai spisok_FROM atunci când se formează un compus închis (în acest caz, ar trebui să apară în spiske_FROM pseudonimă). condiție
O expresie care returnează o valoare de tip boolean. Schimbarea va pierde numai apa, pentru care această expresie returneaza true. cursor_name
Numele cursorului care va fi utilizat în starea unde prezena. Cu o astfel de condiție va fi schimbat rând, ieși din acest ultim cursor. Cursorul ar trebui să fie format cerere, să nu se aplice gruparea la tabela destinație a unei declarații UPDATE. Rețineți că actuala UNDE nu pot fi specificate împreună cu o condiție booleană. Pentru mai multe informații despre utilizarea cursoare cu unde prezena, se referă la DECLAR. vyrazhenie_rezultata
O expresie care este evaluată și comanda UPDATE pentru a reveni, după fiecare linie se modifica. Puteți utiliza numele de orice coloane în tabel sau tabele table_name În această expresie, enumerate în din listă. Pentru a obține toate coloanele, puteți scrie *. imya_rezultata
Numele atribuit coloana de retur.
Informațiile afișate
După finalizarea cu succes, comanda UPDATE returnează o etichetă în formă de
Aici, numărul indică numărul de linii modificate, inclusiv cele care să fie o schimbare de linie, valori care nu au fost modificate. Rețineți că acest număr poate fi mai mic decât numărul de rânduri care satisfac condiția. atunci când modificările sunt aruncate de declanșare ÎNAINTE UPDATE. Dacă numărul este 0, cererea nu sa schimbat o singură linie (nu este o eroare).
În cazul în care declarația UPDATE conține o propunere REVENIREA. rezultatul său va fi similar cu rezultatul SELECT (cu aceleași coloane și valorile care sunt conținute în lista REVENIREA) obținute pentru rândurile care au schimbat cu aceasta comanda.
Atunci când există propunerea. tabel țintă este legată în mod esențial la tabelele enumerate în spiske_FROM. și fiecare linie de ieșire este o operație de schimbare compus în tabela destinație. Aplicarea Propoziția FROM. necesare pentru a se asigura că conexiunea a emis un maxim de o linie de ieșire pentru fiecare linie pe care doriți să îl modificați. Cu alte cuvinte, linia de țintă nu ar trebui să fie conectat la mai mult de o linie de alte tabele. Dacă această condiție este încălcată, doar una dintre liniile de conexiune vor fi folosite pentru a schimba linia de țintă, dar ceea ce nu poate fi prezis.
Din cauza acestei incertitudini este mai sigur să se facă referire la alte tabele în doar sub-interogări, chiar dacă există de multe ori mai rău decât citit și mai lent decât conexiunea.
Schimbarea Drama cuvânt dramatic în tabelul de filme de tip coloană.
Modificarea temperaturii și resetarea precipitării la vremea implicită într-un rând al tabelului.
Efectuarea aceeași operație pentru a produce un fișier de intrări modificate:
Aceeași modificare, folosind o sintaxă alternativă la lista de coloane:
Creșterea contor de vânzări pentru managerul responsabil al companiei Acme, folosind sugestii din.
Efectuarea aceeași operație, cu o subinterogare în clauza WHERE.
Schimbarea numelui unui contact în tabelul conturilor (ar trebui să fie numele atribuit managerului de vânzări):
Un rezultat similar poate fi obținut prin aplicarea compusului:
Cu toate acestea, în cazul în care vânzătorii .id - nu este o cheie unică, a doua solicitare poate duce la rezultate imprevizibile, în timp ce prima cerere este garantat pentru a arunca o eroare dacă găsi mai multe intrări cu un singur id. În plus, în cazul în care conturile o intrare corespunzătoare .sales_id nu se va găsi, prima cerere se va scrie în câmpul NULL numele, iar al doilea nu se schimba șirul.
Actualizarea statisticilor în tabelul de sinteză, în conformitate cu datele curente:
O încercare de a adăuga un nou produs cu numărul. În cazul în care există deja această intrare, în schimb, pentru a crește cantitatea de produs într-o înregistrare existentă. Pentru a pune în aplicare această abordare, care nu se îndepărtează întreaga tranzacție, puteți utiliza punctul de salvare:
Schimbarea filmelor tip coloană din tabel, în linie, care este în prezent c_films cursorul.
compatibilitate
Această comandă este în conformitate cu standardul SQL. cu excepția și reîntorcîndu. care sunt extensii ale Postgres Pro. precum și posibilitatea de a aplica UPDATE WITH.
În alte baze de date sunt, de asemenea, sprijinite de propuneri suplimentare de la. dar se presupune că tabela destinație ar trebui să fie din nou menționată în această propoziție. Postgres Pro preia clauza FROM nu este, astfel încât să fie atenți atunci când portarea aplicațiile care utilizează această limbă extensie.
Conform standardului, valoarea inițială pentru o listă imbricată cu numele coloanelor din paranteze pot fi orice expresie, rând remarcabile cu numărul necesar de coloane. Postgres Pro ia această valoare ca doar o listă de expresii închise în paranteze sau SELECT. Valoarea variabilă a unei singure coloană poate fi desemnat cuvânt standard în cazul în lista de expresii, dar nu într-un SELECT imbricate.