Егер сіз ерекше шектеулерге байланысты кестеге жаңа жазбаны енгізе алмасаңыз, онда осы мақаланы оқып шығуды жіберіп алмаңыз. Бұл сізге осы мәселені шешуге көмектеседі.
Бұл мақалада жаңа жазба енгізілмеген кезде мәселені шешудің 4 әдісін енгіземіз, себебі ол кестенің ерекше шектеулерін бұзады SQL Server.
Нақты жағдай:
Енді нақты істі көрейік. Бізде «Өнім» деп аталатын мәліметтер базасы бар және «DataNumenӨнім »базасында. Кестеде екі өріс бар, яғни сәйкесінше «int» және «varchar» деректер типтері бар «ProductId» және «ProductName». «ProductId» - бұл ерекше шектеулі негізгі кілт.
Қазіргі уақытта кестеде төмендегідей бірнеше жазбалар бар:
1-сурет «Кестедегі жазбаларDataNumenӨнім »
Деректер базасы үшін екі DBA бар, яғни Джим мен Том. Бірде Джим кестедегі бірінші жазбаны төмендегідей өшірді:
DELETE FROM DataNumenProduct WHERE ProductId=1;
Екінші күні Том кестеге жойылған жазбамен бірдей негізгі кілтке ие жаңа жазбаны енгізді, төмендегідей:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Сонымен, біздің кестеде төмендегідей жазбалар бар:
2-сурет «Кестедегі жаңартылған жазбаларDataNumenӨнімдер »
Енді Джим жойылған жазбаны кестеге қайтарғысы келсе, бұл «ProductId» негізгі кілтінің ерекше шектеулерін бұзады. Мұндай жағдайда біз мәселені шешу үшін төмендегі уақытша шешімдердің бірін қолдана аламыз.
Уақытша шешім: қақтығыстардың алдын алу үшін жаңа жазбаның негізгі кілтін өзгертіңіз
Жазбаның негізгі кілтін кестедегі барлық жазбалардан өзгеше жаңа мәнге өзгерте аламыз. Мысал ретінде жоғарыдағы жағдайды алыңыз, жазбаны енгізу үшін біз негізгі кілт мәнін 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-сурет GUI арқылы «pk» бастапқы кілтін шектеуді алып тастаңыз
- Содан кейін біз жойылған жазбаны нақты жағдайда кестеге төмендегідей етіп енгіземіз.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Енді кестеде төмендегідей бірнеше жазбалар бар:
9-сурет «Кестедегі жаңартылған мазмұнDataNumen Өнімдер »
- Содан кейін кестеде бар жазбаның негізгі кілт мәнін төмендегідей өзгертеміз:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Соңында, біз «pk» кілтінің шектеуін GUI арқылы кестеге төмендегідей етіп қосамыз:
8-сурет GUI арқылы «pk» бастапқы кілттерін шектеу
Шешіңіз SQL Server Дерекқордың бұзылуы
Бірегей шектеулерден басқа, SQL Server жемқорлық бұл DBA-ны тітіркендіретін өте жиі кездесетін мәселе. Әдетте біз қолдана аламыз SQL Server сыбайлас жемқорлықты жоюға арналған командалар. Алайда, егер олар жұмыс істемесе, біз үшінші тарапқа жүгіне аламыз SQL Server деректерді қалпына келтіру құралдары.
Автордың кіріспесі:
Джим Ху - деректерді қалпына келтіру бойынша сарапшы DataNumen, Соның ішінде деректерді қалпына келтіру технологиялары бойынша әлемдік көшбасшы болып табылатын Inc. Кіруді жөндеу және dbf бағдарламалық жасақтама өнімдерін жөндеу. Қосымша ақпарат алу үшін кіріңіз WWW.datanumen.com








