Introducerea rândurilor într-o tabelă care conține un câmp cu creștere automată

Multe produse comerciale permit utilizarea coloanelor cu incrementare automată în tabele, adică câmpurile a căror valoare este generată automat atunci când se adaugă noi înregistrări.





Aceste coloane sunt utilizate pe scară largă ca chei primare ale tabelului. ele oferă automat unicitate. Un exemplu tipic pentru o coloană de acest tip este un numărător secvențial care, atunci când este inserat, generează o valoare mai mare decât valoarea anterioară (valoarea obținută la introducerea rândului anterior).







Următoarea este un exemplu de creare a unui tabel cu o coloană (cod) cu incrementare automată în MS SQL Server.

CREATE TABLE [Printer_Inc] ([code] [int] IDENTITY (1,1) PRIMARY KEY. [Model] [varchar] (4) NOT NULL. [Color] [char] (1) NOT NULL. [Type] [varchar ] (6) NOT NULL. [preț] [float] NOT NULL)

Câmpul auto-incrementat este definit de constructul IDENTITY (1, 1). În acest caz, primul parametru al proprietății IDENTITY (1) determină de la ce valoare va începe numărarea și al doilea - ce pas va fi folosit pentru a crește valoarea. Astfel, în exemplul nostru, prima înregistrare introdusă va avea o valoare de 1 în coloana codului, o a doua intrare de 2 și așa mai departe.

Deoarece valoarea din câmpul de cod este generată automat, operatorul

INSCRIEȚI ÎN VALORILE Printer_Inc (15, 3111, "y", "laser", 2599);

va duce la o eroare, chiar dacă nu există o linie în tabel cu o valoare în câmpul de cod. egal cu 15. Prin urmare, pentru a insera un rând în tabel, pur și simplu nu specificăm acest câmp exact ca în cazul utilizării valorii implicite, adică

INSCRIEȚI ÎN Printer_Inc (model, culoare, tip, preț) VALORI (3111, "y", "laser", 2599);

Ca urmare a acestui operator, informațiile despre modelul 3111 al unei imprimante laser color, costul căruia este de 2599 dolari, vor fi introduse în tabelul Printer_Inc. În codul de câmp va exista o valoare, care se întâmplă doar a fi egală cu 15. În cele mai multe cazuri, acest lucru este suficient, deoarece valoarea campului auto-incrementat, de regulă, nu conține nicio informație; principalul lucru este că ar trebui să fie unic.

Cu toate acestea, există cazuri în care este necesară înlocuirea unei valori foarte specifice în câmpul automat incrementat. De exemplu, trebuie să transferați datele existente într-o structură nou creată; în timp ce aceste date sunt implicate într-o relație one-to-many din partea "unu". Astfel, nu putem permite arbitraritatea aici. Pe de altă parte, nu vrem să abandonăm domeniul auto-incrementat, deoarece Acesta va simplifica prelucrarea datelor în operarea ulterioară a bazei de date.

Deoarece limbajul standard SQL nu presupune prezența câmpurilor de incrementare automată, nu există o abordare uniformă. Aici arătăm cum este implementat acest lucru în MS SQL Server. operator

dezactivează (ON) sau permite (OFF) utilizarea incrementării automate. Prin urmare, pentru a insera un șir cu o valoare de 15 în câmpul de cod. trebuie să scrie

SET IDENTITY_INSERT Printer_Inc ON; INSERT INTO Printer_Inc (cod, modelul, culoarea, tipul, preț) values ​​(15, 3111, 'cu laser '' y', 2599);

Rețineți că lista coloanelor în acest caz este obligatorie, adică nu putem scrie astfel:

SET IDENTITY_INSERT Printer_Inc ON; INSCRIEȚI ÎN VALORILE Printer_Inc (15, 3111, "y", "laser", 2599);

și, în plus, nu

SET IDENTITY_INSERT Printer_Inc ON; INSCRIEȚI ÎN Printer_Inc (model, culoare, tip, preț) VALORI (3111, "y", "laser", 2599);

În acest din urmă caz, valoarea din codul de coloană lipsă nu poate fi înlocuită automat, deoarece Creșterea automată este dezactivată.

Este important de notat că, dacă o valoare de 15 ar fi cea mai mare în coloana de mai jos codul, apoi continuați numerotarea va continua cu valorile 16. Desigur, dacă includeți avtoinkrementirovanie: SET IDENTITY_INSERT Printer_Inc OFF.

În cele din urmă, luați în considerare un exemplu de introducere a datelor din tabelul Produs în tabelul Product_Inc. salvarea valorilor din cod:

SET IDENTITY_INSERT Printer_Inc ON; INSCRIEȚI ÎN Printer_Inc (cod, model, culoare, tip, preț) SELECT * FROM Printer;

În ceea ce privește coloanele cu incrementare automată, ar trebui să spuneți și următoarele. Lăsați ultima valoare în câmpul de cod să fie 16, după care linia cu această valoare a fost ștearsă. Ce valoare va fi în această coloană după inserarea unei noi linii? Așa e, 17, pentru că Ultima valoare a contorului este păstrată, în ciuda eliminării liniei care o conține. Prin urmare, numerotarea valorilor ca rezultat al ștergerii și adăugării rândurilor nu va fi consecventă. Acesta este un alt motiv pentru introducerea unui rând cu o valoare specificată (lipsă) în coloana incrementării automate.







Trimiteți-le prietenilor: