Дипломного проекта  разработка серверной части веб 



жүктеу 0,72 Mb.
Pdf просмотр
бет8/22
Дата22.05.2018
өлшемі0,72 Mb.
#16329
түріДиплом
1   ...   4   5   6   7   8   9   10   11   ...   22

32 

 

Енді мысал ретінде қолайыз жазба енгізіледі: 



 INSERT INTO weather VALUES ('Berkeley', 45, 53, 0.0, '1994-11-28'); 

ОШИБКА: INSERT или UPDATE в таблице "weather"  нарушает ограничение 

внешнего 

ключа "weather_city_fkey" 

ПОДРОБНОСТИ: Ключ (city)=(Berkeley) отсутствует в таблице "cities". 

Пайдаланушы  қосымшасының  талабы  бойынша  ішкі  кілттердің 

мінез



құлқын орналастыруға болады.  



 

4.3  Транзакциялар 

 

Транзакциялар 



  бұл  барлық  ДҚБЖ  негізгі  іргетасы.  Транзакциялар 

мағынасы  әсерлер  тізімін  бір  «барлығы  немесе  ештеңе»  операциясына 

біріктіргенінде.  Тізім  ішіндегі  интервал  жағдайлары  басқа  транзакцияларға 

көрінбейді,  және  де  егер  транзакцияны  сәтті  аяқтауға  бір  нәрсе  бөгет  болған 

жағдайда,  осы  амалдардың  бірде

біреуі  деректер  қорында  сақталмайды. 



Мысалы,  клиент  шоттары  және  банк  филиалдарының  ортақ  сомасы  туралы 

мәлімет  бар  банктің  деректер  қоры  қарастырылады.  Алиса  шотынан  Боб 

шотына 

100 


доллар 

ауыстыру 

керек. 

Жеңілдік 



үшін 

сәйкес 


SQL

командаларын келесі түрде жазуға болады: 



UPDATE accounts SET balance = balance - 100.00 

WHERE name = 'Alice'; 

UPDATE branches SET balance = balance - 100.00 

WHERE  name  =  (SELECT  branch_name  FROM  accounts  WHERE  name  = 

'Alice'); 

UPDATE accounts SET balance = balance + 100.00 

WHERE name = 'Bob'; 

UPDATE branches SET balance = balance + 100.00 

WHERE name = (SELECT branch_name FROM accounts WHERE name = 'Bob'); 

Командалардың нақты мазмұны мазмұны маңызды емес; маңыздысы тек 

осы қарапайым операцияны орындауға бірнеше жеке операция орындау қажет 

болғаны.  Сонымен  қатар  банк  тұрғысынан  қарағанда  осы  амалдардың  бәрі 

бірге  орындалғаны  қажет,  немесе  мүлдем  орындалмауы  тиіс.  Егер  Боб  100 

доллар  алса,  бірақ  Алисаның  шотынан  алынбаса,  бұны  жүйенің  қателігі  деп 

айтуға  болмайды.  Және,  керісінше,  Алиса  ақша  аударып  Бобқа  жетпеген 

жағдай  да  жақсы  деп  атауға  келмейді.  Операцияны  соңына  дейін  орындауға 

бір  нәрсе  бөгет  болған  жағдайда,  бір  де  бір  амал  деректер  қорында  ізін 

қалдырмайды  деген  кепілдік  керек.  Ондай  кепілдікті  амалдарды  бір 

транзакцияға  бірітіру  жолымен  алады.  Транзакция  атомарлық  дейді 

  басқа 



транзакциялар  тұрғысынан  ол  орындалып  толық  бекітіледі  немесе  мүлдем 

бекітілмейді.  Сонымен  қатар  кепілдік  керек:    аяқталғаннан  кейін  және 

деректер  қоры  жүйесімен  транзакция  расталғаннан  кейін,  оның  нәтижелері 

шынында  сақталады  және  апат  болған  жағдайдың  өзінде  жоғалмайды. 

Мысалы,  егер  сомасы  есептен  шығарылды  және  Бобқа  берілді;  ол  банктен 



33 

 

шыққан сәтте шотындаңы сомасы қайта орнына келу мүмкіндігін болдырмау 



керек.  Транзакциондық  деректер  қоры  барлық  өзгертулер  транзакция 

аяқталғанша  тұрақты  қоймада  (мысалы,  дискіге)  сақаталады  деген  кепілдік 

береді.  Транзакциялық  деректер  қорының  басқа  маңызды  сипаттамасы 

атомарлық  өзгертулермен  тығыз  байланысты:    бір  уақытта  бірнеше 

транзакциялар  орындалған  сәтте  олардың  әрқайсысы  басқалары  орындайтын 

аяқталмаған  өзгертулерді  көрмейді.    Мысалы,  егер  бір  транзакция  бөлім 

бойынша  балансты  санап  жатқан  уақытта,  егер  Боб  бөлімін  келуді 

қарастырмай,    Алисаның  бөліміндегі  шығынды  санаса  дұрыс  емес  болады. 

Сол  себептен  транзакция  «барлығы  немесе  ештеңе»  қасиеті  өзгертулер 

деректер  қорында  қалай  сақталатыны  ғана  емес,  сонымен  қатар  жұмыс 

процесінде  қалай  көрінетінін  анықтау  керек.  Ашық  транзакция  өндіретін 

өзгертулер  операция  аяқьалғанша  басқа  транзакцияларға  көрінбейді,  одан 

кейін  олардың  барлығы  бәріне  бірден  көрінеді.  PostgreSQL  транзакциялар 

SQL


командалар жиынтығымен анықталады, BEGIN және 

COMMIT  командаларымен  қоршалған.  Осылайша,  банк  транзакциясы  келесі 

түрде болуы керек еді: 

BEGIN; 

Расширенные возможности 



16 

UPDATE accounts SET balance = balance - 100.00 

WHERE name = 'Alice'; 

-- ... 


COMMIT; 

Егер  транзакция  орындау  процесінде  олардың  өзгертулерін  бекітпеу 

шешімі қабылданса (мысалы, Алиса балансы минус болса), COMMIT орнына 

ROLLBACK  командасын  орындауға  болады,  және  барлық  өзгертулер  күшін 

жояды.  

 

PostgreSQL  шынында  барлық  SQL



операторды  транзакция  ретінде 

өңдейді.  Егер  пайдаланушы  BEGIN  командасын  қоймаса,  онда  әрбір  жеке 

оператор  айқын  емес  BEGIN  және  COMMIT  командаларымен  қоршалаып 

қалады  (сәтті  аяқталу  жағдайында).  BEGIN  және  COMMIT  командаларымен 

қоршалатын  операторлар  тобын  кейде  транзакция  блогы  деп  атайды.  Кейбір 

клиенттік кітапханалар BEGIN және COMMIT командаларын автоматты түрде 

қосады  және  пайдаланушы  орнына  айқын  емес  транзакция  блоктарын 

жасайды.  Транзакциялардағы  операторлармен  сақтау  нүктелерін  қолдана 

отырып  егжей

тегжейлі  басқаруға  болады.  Сақтау  нүктелері  таңдаулы  түрде 



транзакцияның  кейбір  бөліктерінің  күшін  жойдыруға  және  қалғандарын 

бекітуге  мүмкіндік  береді.  Сақтау  нүктесін  SAVEPOINT  көмегімен  анықтап, 

керек  болса  оған  ROLLBACK  TO  командасы  көмегі  арқылы  қайта  оралуға 

болады.  Сақтау  нүктесінен  қайтарымға  дейінгі  деректер  қорында  болған 

барлық  өзгерістер  күшін  жояды,  бірақ  алдында  болған  өзгерістер  сақталады.       

Пайдаланушы сақтау нүктесіне қайта келгенде нүкте жұмысын жалғастырады; 

оған  бірнеше  рет  қайтарым  орындай  аласыз.  Басқа  жағынан  қарағанда, 



жүктеу 0,72 Mb.

Достарыңызбен бөлісу:
1   ...   4   5   6   7   8   9   10   11   ...   22




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау