4 լուծում, երբ եզակի սահմանափակումը խանգարում է ձեզ նոր գրառում տեղադրել SQL Server

Կիսվել հիմա ՝

Եթե ​​եզակի սահմանափակումների պատճառով չկարողացաք նոր գրառում տեղադրել աղյուսակում, բաց մի թողեք կարդալ այս հոդվածը: Դա կօգնի ձեզ լուծել այս խնդիրը։

Այս հոդվածում մենք կներկայացնենք խնդիրը լուծելու 4 մեթոդ, երբ դուք չեք կարողանում տեղադրել նոր գրառում, քանի որ այն խախտում է աղյուսակի եզակի սահմանափակումը: SQL Server.

Իրական դեպք.

Հիմա տեսնենք իրական դեպք. Մենք ունենք տվյալների բազա «Ապրանք» անունով և կա աղյուսակ, որը կոչվում է «DataNumenԱպրանք» տվյալների բազայում: Աղյուսակում կա երկու դաշտ, այսինքն՝ «ProductId» և «ProductName», համապատասխանաբար «int» և «varchar» տվյալների տեսակներով: Իսկ «ProductId»-ը եզակի սահմանափակումով առաջնային բանալին է:

Ներկայումս աղյուսակում կան որոշ գրառումներ, ինչպիսիք են ստորև.Գրառումներ աղյուսակում»DataNumenապրանք»

Նկար 1 Գրառումներ աղյուսակում «DataNumenապրանք»

Ենթադրելով, որ տվյալների բազայի համար կա երկու DBA, այսինքն՝ Ջիմ և Թոմ: Մի օր Ջիմը ջնջեց աղյուսակի առաջին ռեկորդը, ինչպես ստորև.

DELETE FROM DataNumenProduct
WHERE ProductId=1;

Երկրորդ օրը Թոմը աղյուսակում տեղադրեց նոր գրառում, որն ունի նույն հիմնական բանալին ջնջված գրառումով, ինչպես ստորև.

INSERT INTO DataNumenProduct
VALUES(1,'DataNumen OutLook Repair');

Այսպիսով, մեր աղյուսակը ունի հետևյալ գրառումները, ինչպես ստորև.

Թարմացված գրառումները աղյուսակում»DataNumenԱպրանքներ »

Նկար 2 Աղյուսակում թարմացված գրառումները «DataNumenԱպրանքներ »

Այժմ, եթե Ջիմը ցանկանում է վերականգնել ջնջված գրառումը աղյուսակում, դա կխախտի «ProductId» հիմնական բանալի եզակի սահմանափակումը: Նման դեպքում խնդիրը լուծելու համար մենք կարող ենք օգտագործել ստորև ներկայացված լուծումներից մեկը:

Լուծում 1. Փոխեք նոր գրառումների հիմնական բանալին՝ հակամարտությունը կանխելու համար

Մենք կարող ենք փոփոխել գրառման հիմնական բանալին, որը պետք է տեղադրվի նոր արժեքով, որը տարբերվում է աղյուսակում առկա բոլոր գրառումների արժեքներից: Վերցրեք վերը նշված դեպքը որպես օրինակ, որպեսզի գրառումը տեղադրվի, մենք կարող ենք փոփոխել առաջնային բանալին արժեքը 1-ից մինչև 5: Այնուհետև մենք կարող ենք վերականգնել նոր ստեղծված գրառումը աղյուսակում, ինչպես ստորև.

INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');

Ստորև ներկայացված են աղյուսակի վերջնական գրառումները.Վերջնական գրառումները աղյուսակում»DataNumen Ապրանքներ »

Գծապատկեր 3 Աղյուսակի վերջնական գրառումները «DataNumen Ապրանքներ »

Լուծում 2. Փոփոխել գոյություն ունեցող գրառումների հիմնական բանալին՝ կոնֆլիկտները կանխելու համար

  1. Նախ, մենք պետք է թարմացնենք գոյություն ունեցող գրառման հիմնական բանալի արժեքը, որը կարող է հակասություն առաջացնել, ինչպես ստորև.
UPDATE DataNumenProduct
SET ProductId = 6
WHERE ProductId = 1;

Ստորև ներկայացված են աղյուսակի թարմացված գրառումները.

Թարմացված գրառումները աղյուսակում»DataNumen Ապրանքներ »

Նկար 4 Աղյուսակում թարմացված գրառումները «DataNumen Ապրանքներ »

  1. Այնուհետև մենք կարող ենք վերականգնել ջնջված գրառումը աղյուսակում, ինչպես ստորև.
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair ');

Այժմ տեսնենք վերջնական տարբերակը, ինչպես ստորև.

Վերջնական գրառումները աղյուսակում»DataNumen Ապրանքներ »

Գծապատկեր 5 Աղյուսակի վերջնական գրառումները «DataNumen Ապրանքներ »

Լուծում 3. Ժամանակավորապես անջատեք եզակի սահմանափակումը SQL-ի միջոցով

  1. Խնդիրը լուծելու համար մենք կարող ենք ժամանակավորապես ջնջել աղյուսակից «pk» առաջնային բանալու սահմանափակումը, ինչպես ցույց է տրված ստորև՝
ALTER TABLE DataNumenProduct
DROP CONSTRAINT pk;
  1. Այնուհետև մենք կարող ենք ետ ավելացնել ջնջված գրառումը աղյուսակում, ինչպես ստորև.
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Այժմ տեսնենք աղյուսակի գրառումները.

Թարմացված գրառումները աղյուսակում»DataNumen Ապրանքներ »

Նկար 6 Աղյուսակում թարմացված գրառումները «DataNumen Ապրանքներ »

  1. Այնուհետև քանի որ երկու գրառումներն ունեն նույն հիմնական հիմնական արժեքները, մենք պետք է փոփոխենք դրանցից մեկը՝ հակամարտությունը կանխելու համար, ինչպես ստորև.
UPDATE DataNumenProduct SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Վերջապես, մենք նորից ավելացնում ենք հիմնական բանալին «pk» սահմանափակումը աղյուսակում, ինչպես ստորև.
ALTER TABLE DataNumenProduct
ADD CONSTRAINT pk PRIMARY KEY(ProductId);

Այժմ աղյուսակում կան մի քանի գրառումներ, ինչպես ստորև.

Թարմացված բովանդակությունը աղյուսակում»DataNumen Ապրանքներ »

Նկար 7 Աղյուսակի թարմացված բովանդակությունը «DataNumen Ապրանքներ »

Լուծում 4. Ժամանակավորապես անջատեք եզակի սահմանափակումը՝ SQL Server Կառավարման ստուդիա.

  1. Առաջին հերթին, մենք ջնջում ենք հիմնական բանալին «pk» սահմանափակումը աղյուսակում GUI-ի միջոցով, ինչպես ստորև.

Ջնջել առաջնային բանալիների սահմանափակումը «pk»՝ GUI-ի միջոցով

Նկար 8 Ջնջել առաջնային բանալիների սահմանափակումը «pk»՝ GUI-ի միջոցով

  1. Այնուհետև ջնջված գրառումը իրական դեպքում տեղադրում ենք աղյուսակում, ինչպես ստորև։
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Այժմ աղյուսակում կան մի քանի գրառումներ, ինչպես ստորև.

Թարմացված բովանդակությունը աղյուսակում»DataNumen Ապրանքներ »

Նկար 9 Աղյուսակի թարմացված բովանդակությունը «DataNumen Ապրանքներ »

  1. Այնուհետև մենք փոփոխում ենք աղյուսակում առկա գրառումների առաջնային բանալին, ինչպես ստորև.
UPDATE DataNumenProduct
SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Ի վերջո, մենք աղյուսակում հետ ենք ավելացնում հիմնական բանալին «pk» սահմանափակումը GUI-ի միջոցով, ինչպես ստորև.Հետ ավելացրեք հիմնական բանալիների սահմանափակումը «pk»՝ GUI-ի միջոցով

Նկար 8 Հետ ավելացրեք առաջնային բանալիների սահմանափակումը «pk»՝ GUI-ի միջոցով

Լուծել SQL Server Շտեմարանի կոռուպցիա

Եզակի սահմանափակումներից բացի, SQL Server կոռուպցիա նաև շատ տարածված խնդիր է, որը նյարդայնացնում է DBA-ներին: Սովորաբար մենք կարող ենք օգտագործել SQL Server ներկառուցված հրամաններ՝ կոռուպցիաները լուծելու համար: Այնուամենայնիվ, եթե դրանք չեն աշխատում, ապա մենք կարող ենք դիմել ինչ-որ երրորդ կողմի SQL Server տվյալների վերականգնման գործիքներ:

Հեղինակի ներածություն.

Ջիմ Հուն տվյալների վերականգնման մասնագետ է DataNumen, Inc., որը տվյալների վերականգման տեխնոլոգիաների համաշխարհային առաջատարն է, այդ թվում Մուտքի նորոգում և dbf նորոգել ծրագրային արտադրանքները: Լրացուցիչ տեղեկությունների համար այցելեք www.datanumen.com

Կիսվել հիմա ՝

Comments փակվում են: