Dacă nu ați reușit să inserați o înregistrare nouă într-un tabel din cauza constrângerii unice, nu ratați să citiți acest articol. Vă va ajuta să rezolvați această problemă.
În acest articol, vom introduce 4 metode pentru a rezolva problema atunci când nu reușiți să introduceți o înregistrare nouă, deoarece încalcă constrângerea unică a tabelului din SQL Server.
Un caz real:
Acum să vedem un caz real. Avem o bază de date numită „Produs” și există un tabel numit „DataNumenProdus” în baza de date. Există două câmpuri în tabel, adică „ProductId” și „ProductName”, cu tipuri de date „int” și, respectiv, „varchar”. Și „ProductId” este o cheie primară cu constrângere unică.
În prezent există câteva înregistrări în tabel, după cum urmează:
Figura 1 Înregistrări în tabelul „DataNumenProdus"
Presupunând că există două DBA pentru baza de date, adică Jim și Tom. Într-o zi, Jim a șters prima înregistrare din tabel, după cum urmează:
DELETE FROM DataNumenProduct WHERE ProductId=1;
În a doua zi, Tom a inserat o înregistrare nouă în tabel, care are aceeași cheie primară cu înregistrarea ștearsă, după cum urmează:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Deci, tabelul nostru are următoarele înregistrări, după cum urmează:
Figura 2 Înregistrări actualizate în tabelul „DataNumenProduse"
Acum, dacă Jim dorește să restaureze înregistrarea ștearsă înapoi în tabel, va încălca constrângerea unică a cheii primare „ProductId”. Într-un astfel de caz, putem folosi una dintre soluțiile de mai jos pentru a rezolva problema.
Soluție 1: modificați cheia primară a noii înregistrări pentru a preveni conflictele
Putem modifica cheia primară a înregistrării care urmează să fie inserată la o nouă valoare care este diferită de cea a tuturor înregistrărilor existente din tabel. Luați ca exemplu cazul de mai sus, pentru ca înregistrarea să fie inserată, putem modifica valoarea cheii primare de la 1 la 5. Apoi putem restaura noua înregistrare generată înapoi în tabel, după cum urmează:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Mai jos sunt înregistrările finale din tabel:
Figura 3 Înregistrările finale din tabelul „DataNumen Produse"
Soluția 2: modificați cheia principală a înregistrării existente pentru a preveni conflictele
- În primul rând, trebuie să actualizăm valoarea cheii primare a înregistrării existente, care poate provoca conflicte, după cum urmează:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Mai jos sunt înregistrările actualizate din tabel:
Figura 4 Înregistrări actualizate în tabelul „DataNumen Produse"
- Apoi putem restabili înregistrarea ștearsă înapoi în tabel, după cum urmează:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Acum să vedem versiunea finală, după cum urmează:
Figura 5 Înregistrările finale din tabelul „DataNumen Produse"
Soluția 3: dezactivați Tempo de constrângere unicărarily prin SQL
- Pentru a rezolva problema, putem șterge constrângerea cheii primare „pk” din tempo-ul tabeluluirarily, ca mai jos:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Apoi putem adăuga înapoi înregistrarea ștearsă la tabel, după cum urmează:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Acum să vedem înregistrările din tabel:
Figura 6 Înregistrări actualizate în tabelul „DataNumen Produse"
- Apoi, deoarece două înregistrări au aceleași valori ale cheii primare, trebuie să modificăm una dintre ele pentru a preveni conflictele, după cum urmează:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- În cele din urmă, adăugăm înapoi constrângerea cheii primare „pk” la tabel, după cum urmează:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Acum există câteva înregistrări în tabel, după cum urmează:
Figura 7 Conținut actualizat în tabelul „DataNumen Produse"
Soluția 4: dezactivați Tempo de constrângere unicărarily via SQL Server Studio de management:
- În primul rând, ștergem constrângerea cheii primare „pk” din tabel prin GUI, după cum urmează:
Figura 8 Ștergeți constrângerea cheii primare „pk” prin GUI
- Apoi introducem înregistrarea ștearsă în caz real în tabel, ca mai jos.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Acum există câteva înregistrări în tabel, după cum urmează:
Figura 9 Conținut actualizat în tabelul „DataNumen Produse"
- Apoi modificăm valoarea cheii primare a înregistrării existente în tabel, după cum urmează:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- În cele din urmă, adăugăm înapoi constrângerea cheii primare „pk” la tabel prin GUI, după cum urmează:
Figura 8 Adăugați înapoi constrângerea cheii primare „pk” prin GUI
Rezolva SQL Server Corupția bazei de date
În afară de constrângerile unice, SQL Server corupţie este, de asemenea, o problemă foarte comună care îi enervează pe DBA. În mod normal, putem folosi SQL Server comenzi încorporate pentru a rezolva corupțiile. Cu toate acestea, dacă nu funcționează, atunci putem apela la unele terțe părți SQL Server instrumente de recuperare a datelor.
Introducerea autorului:
Jim Hu este un expert în recuperarea datelor DataNumen, Inc., care este lider mondial în tehnologiile de recuperare a datelor, inclusiv Reparație acces și dbf repararea produselor software. Pentru mai multe informații vizitați www.datanumen.com









