Եթե եզակի սահմանափակումների պատճառով չկարողացաք նոր գրառում տեղադրել աղյուսակում, բաց մի թողեք կարդալ այս հոդվածը: Դա կօգնի ձեզ լուծել այս խնդիրը։
Այս հոդվածում մենք կներկայացնենք խնդիրը լուծելու 4 մեթոդ, երբ դուք չեք կարողանում տեղադրել նոր գրառում, քանի որ այն խախտում է աղյուսակի եզակի սահմանափակումը: SQL Server.
Իրական դեպք.
Հիմա տեսնենք իրական դեպք. Մենք ունենք տվյալների բազա «Ապրանք» անունով և կա աղյուսակ, որը կոչվում է «DataNumenԱպրանք» տվյալների բազայում: Աղյուսակում կա երկու դաշտ, այսինքն՝ «ProductId» և «ProductName», համապատասխանաբար «int» և «varchar» տվյալների տեսակներով: Իսկ «ProductId»-ը եզակի սահմանափակումով առաջնային բանալին է:
Ներկայումս աղյուսակում կան որոշ գրառումներ, ինչպիսիք են ստորև.
Նկար 1 Գրառումներ աղյուսակում «DataNumenապրանք»
Ենթադրելով, որ տվյալների բազայի համար կա երկու DBA, այսինքն՝ Ջիմ և Թոմ: Մի օր Ջիմը ջնջեց աղյուսակի առաջին ռեկորդը, ինչպես ստորև.
DELETE FROM DataNumenProduct WHERE ProductId=1;
Երկրորդ օրը Թոմը աղյուսակում տեղադրեց նոր գրառում, որն ունի նույն հիմնական բանալին ջնջված գրառումով, ինչպես ստորև.
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Այսպիսով, մեր աղյուսակը ունի հետևյալ գրառումները, ինչպես ստորև.
Նկար 2 Աղյուսակում թարմացված գրառումները «DataNumenԱպրանքներ »
Այժմ, եթե Ջիմը ցանկանում է վերականգնել ջնջված գրառումը աղյուսակում, դա կխախտի «ProductId» հիմնական բանալի եզակի սահմանափակումը: Նման դեպքում խնդիրը լուծելու համար մենք կարող ենք օգտագործել ստորև ներկայացված լուծումներից մեկը:
Լուծում 1. Փոխեք նոր գրառումների հիմնական բանալին՝ հակամարտությունը կանխելու համար
Մենք կարող ենք փոփոխել գրառման հիմնական բանալին, որը պետք է տեղադրվի նոր արժեքով, որը տարբերվում է աղյուսակում առկա բոլոր գրառումների արժեքներից: Վերցրեք վերը նշված դեպքը որպես օրինակ, որպեսզի գրառումը տեղադրվի, մենք կարող ենք փոփոխել առաջնային բանալին արժեքը 1-ից մինչև 5: Այնուհետև մենք կարող ենք վերականգնել նոր ստեղծված գրառումը աղյուսակում, ինչպես ստորև.
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Ստորև ներկայացված են աղյուսակի վերջնական գրառումները.
Գծապատկեր 3 Աղյուսակի վերջնական գրառումները «DataNumen Ապրանքներ »
Լուծում 2. Փոփոխել գոյություն ունեցող գրառումների հիմնական բանալին՝ կոնֆլիկտները կանխելու համար
- Նախ, մենք պետք է թարմացնենք գոյություն ունեցող գրառման հիմնական բանալի արժեքը, որը կարող է հակասություն առաջացնել, ինչպես ստորև.
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Ստորև ներկայացված են աղյուսակի թարմացված գրառումները.
Նկար 4 Աղյուսակում թարմացված գրառումները «DataNumen Ապրանքներ »
- Այնուհետև մենք կարող ենք վերականգնել ջնջված գրառումը աղյուսակում, ինչպես ստորև.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Այժմ տեսնենք վերջնական տարբերակը, ինչպես ստորև.
Գծապատկեր 5 Աղյուսակի վերջնական գրառումները «DataNumen Ապրանքներ »
Լուծում 3. Ժամանակավորապես անջատեք եզակի սահմանափակումը SQL-ի միջոցով
- Խնդիրը լուծելու համար մենք կարող ենք ժամանակավորապես ջնջել աղյուսակից «pk» առաջնային բանալու սահմանափակումը, ինչպես ցույց է տրված ստորև՝
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Այնուհետև մենք կարող ենք ետ ավելացնել ջնջված գրառումը աղյուսակում, ինչպես ստորև.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Այժմ տեսնենք աղյուսակի գրառումները.
Նկար 6 Աղյուսակում թարմացված գրառումները «DataNumen Ապրանքներ »
- Այնուհետև քանի որ երկու գրառումներն ունեն նույն հիմնական հիմնական արժեքները, մենք պետք է փոփոխենք դրանցից մեկը՝ հակամարտությունը կանխելու համար, ինչպես ստորև.
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Վերջապես, մենք նորից ավելացնում ենք հիմնական բանալին «pk» սահմանափակումը աղյուսակում, ինչպես ստորև.
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Այժմ աղյուսակում կան մի քանի գրառումներ, ինչպես ստորև.
Նկար 7 Աղյուսակի թարմացված բովանդակությունը «DataNumen Ապրանքներ »
Լուծում 4. Ժամանակավորապես անջատեք եզակի սահմանափակումը՝ SQL Server Կառավարման ստուդիա.
- Առաջին հերթին, մենք ջնջում ենք հիմնական բանալին «pk» սահմանափակումը աղյուսակում GUI-ի միջոցով, ինչպես ստորև.
Նկար 8 Ջնջել առաջնային բանալիների սահմանափակումը «pk»՝ GUI-ի միջոցով
- Այնուհետև ջնջված գրառումը իրական դեպքում տեղադրում ենք աղյուսակում, ինչպես ստորև։
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Այժմ աղյուսակում կան մի քանի գրառումներ, ինչպես ստորև.
Նկար 9 Աղյուսակի թարմացված բովանդակությունը «DataNumen Ապրանքներ »
- Այնուհետև մենք փոփոխում ենք աղյուսակում առկա գրառումների առաջնային բանալին, ինչպես ստորև.
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Ի վերջո, մենք աղյուսակում հետ ենք ավելացնում հիմնական բանալին «pk» սահմանափակումը GUI-ի միջոցով, ինչպես ստորև.
Նկար 8 Հետ ավելացրեք առաջնային բանալիների սահմանափակումը «pk»՝ GUI-ի միջոցով
Լուծել SQL Server Շտեմարանի կոռուպցիա
Եզակի սահմանափակումներից բացի, SQL Server կոռուպցիա նաև շատ տարածված խնդիր է, որը նյարդայնացնում է DBA-ներին: Սովորաբար մենք կարող ենք օգտագործել SQL Server ներկառուցված հրամաններ՝ կոռուպցիաները լուծելու համար: Այնուամենայնիվ, եթե դրանք չեն աշխատում, ապա մենք կարող ենք դիմել ինչ-որ երրորդ կողմի SQL Server տվյալների վերականգնման գործիքներ:
Հեղինակի ներածություն.
Ջիմ Հուն տվյալների վերականգնման մասնագետ է DataNumen, Inc., որը տվյալների վերականգման տեխնոլոգիաների համաշխարհային առաջատարն է, այդ թվում Մուտքի նորոգում և dbf նորոգել ծրագրային արտադրանքները: Լրացուցիչ տեղեկությունների համար այցելեք www.datanumen.com








