Implementarea câmpurilor cheie autoincremente

Pentru a crea un câmp a cărui valoare este incrementată automat de una, trebuie să faceți mai multe lucruri:

1. Creați un generator pentru câmpul cheie. Câmpul cheie trebuie să fie de tip INTEGER, nu NULL și declarat ca KEY PRIMARY.





De fapt, generatorul poate fi folosit pentru orice câmp autoincrement, nu neapărat unul cheie. Dar, de cele mai multe ori, generatoarele îl folosesc pentru câmpurile cheie.

2. Alocați valoarea 0 generatorului (sau altfel, dacă tabela este transferată dintr-o altă bază de date și conține deja înregistrări).







3. Creați un declanșator BEFORE INSERT care crește această valoare cu 1.

Deci, să începem. În baza noastră de date există un tabel denumit Tovar, în care primul câmp din ID este declarat INTEGER NOT NULL. Din păcate, câmpul nu a fost declarat ca un chei primar cheie. Schimbați tabelul adăugând cheia primară în câmpul ID:

ALTER TABLE TOVAR ADAUGATI KEY PRIMARY (ID);

Acum faceți acest câmp automat:

CREATE GENERATOR GenTovar;

/ * Alocați valoarea inițială generatorului * /

SET GENERATOR GenTovar TO 0;

CREAȚI TRIGGER PENTRU PRODUS

ACTIVE ÎNAINTE DE INSERT AS

DACĂ (NEW.ID ESTE NULL), atunci NEW.ID = GEN_ID (Gen_Tovar, 1); Enda

/ * Terminarea tranzacției: * / COMMIT;

Operatorii din acest exemplu oferă creșterea automată a valorii câmpului de 1. Astfel, introducând prima înregistrare a seta valoarea 1. Următoarea intrare ar fi 2, și așa mai departe. Toate acestea sunt implementate în cadrul tranzacției, adică chiar dacă o mulțime de utilizatori fac schimbări în tabel, valorile generatorului vor fi întotdeauna unice. Apropo, tocmai pentru că modificările tabele apar într-o tranzacție, iar cererea ar putea avea nevoie să învețe valoarea câmpului înainte de tranzacție este finalizată, se recomandă cu tărie că, în loc de o simplă atribuire:

NEW.ID = GEN_ID (Gen_Tovar, 1);

faceți acest lucru împreună cu un cec pentru NULL:

DACĂ (NEW.ID ESTE NULL), atunci NEW.ID = GEN_ID (Gen_Tovar, 1);

Acum putem testa performanța autoincrementului nostru. Creați următoarea interogare:

INTRODUCEȚI ÎN VALOARE (Nazvanie, Stoimost) ("Sugar", 10.50); INSCRIEȚI-VĂ ÎN TOVAR (Nazvanie, Stoimost) VALUES ("Croup", 8.20); SELECT * FROM Produse;

Dacă ați făcut totul corect, în tabel vor apărea două înregistrări, iar câmpul ID va crește automat cu 1:

Implementarea câmpurilor cheie autoincremente

Fig. 20.4. Demonstrarea muncii unui domeniu autoincrementar

Rețineți că am introdus valori numai în câmpurile Nazvanie și Stoimost. Valorile pentru câmpul ID au fost generate automat de declanșator. Nu uitați să închideți tranzacția cu COMMIT înainte de a închide fereastra Interactive SQL.

Spre deosebire de procedurile stocate, nu există nici o partiție pentru declanșatoarele din arborele serverului utilitarului IBConsole. Cu toate acestea, puteți vedea declanșatorul nostru. Declanșatorul a fost creat pentru masa Tovar. Selectați-l, faceți clic dreapta și selectați Proprietăți din meniul contextual. Se deschide fereastra proprietăților tabelului, în care ar trebui să accesați fila Metadate. În această fereastră, după ce descrieți crearea mesei, veți vedea o descriere a declanșatorului TrTovar.

Cursul 21. Comenzi pentru modificarea datelor DML. Script-uri.

Comenzile de modificare a datelor se referă la limba DML (Data Manipulation Language), care este un subset al limbajului SQL. Valorile pot fi plasate într-un tabel, modificate sau șterse de următorii operatori:

UPDATE (Modificare) DELETE (Ștergere)

În aplicația client, putem folosi componenta Tabel din tabel, în care aceste acțiuni pot fi efectuate utilizând metode, dar acest lucru nu este întotdeauna posibil. De exemplu, vom introduce o intrare nouă folosind metoda Append într-un tabel care are un câmp auto-incremental pe care declanșatorul îl umple automat. Apoi introduceți toate valorile, cu excepția autoincrementului. În continuare, dacă încercați să executați o metodă de postare care salvează înregistrarea, vom obține cel mai probabil o eroare. Acest lucru se datorează faptului că declanșatorul BEFORE INSERT este declanșat după ce componenta tabelă execută metoda Post. Deoarece câmpul cheie are un parametru NOT NULL, InterBase nu ne va permite să inserăm o înregistrare cu un câmp cheie gol. Dar inserarea unei înregistrări cu o interogare INSERT este simplă. Prin urmare, editarea datelor este cel mai adesea mutată la componenta Interogare, a cărei proprietate SQL este atribuită interogării necesare. Deci, trebuie să cunoașteți comenzile de modificare și să le puteți aplica.

Programarea bazelor de date în Delphi

TEORIA DE PROIECTARE A DATELOR DE BAZĂ







Trimiteți-le prietenilor: