Преглед садржаја
Свака апликација која укључује базу података мора бити у складу са карактеристикама АЦИД -а, у апликацијама и професионалним менаџерима база података АЦИД концепт се односи на карактеристике или својства која гарантују да се трансакције у базама података изводе безбедно и да се могу конфигурисати. Конкретно, АЦИД означава атомскост, доследност, изолацију и издржљивост.Трансакција унутар базе података је, на пример, уметање записа или, ако то видимо као пословни модел, додавање новог купца, измена производа. Трансакције увек производе промену, уметање, измену, брисање, упит није трансакција јер не производи промене.
Навођење својстава АЦИД
Атомицити
То је својство које гарантује и проверава да ли је трансакција извршена или не, а ово својство указује на то да ако се операција не изврши до краја онда се отказује, на пример претпоставимо да убацујемо запис и сервер се руши, запис је снимљен у средини, тада због атомскости овај запис неће бити снимљен.
Још један пример ако се врши онлајн плаћање и износ се одузима са нашег рачуна, али уплата не успе или се систем сруши, тада се трансакција отказује и база података то не бележи.
Доследност
То је својство које гарантује да ће се трансакције које се могу завршити без проблема извршити. Овај концепт има везе са интегритетом базе података. Он спречава да се подаци промене, изгубе смисао или остану без икаквих референци, на пример, клијент се не може избрисати док је у неком тренутку обавио куповину. Ако желите да избришете купца, прво морате избрисати све рачуне и податке који се односе на тог корисника.
Изолација
Својство је оно што гарантује да ће се, ако се деси две или више трансакција у исто време, извршавати једна за другом и ако се изводе паралелно, свака ће то учинити независно једна од друге како би се избегле могуће грешке.
Трајност
То је власништво које је одговорно за гарантовање да је трансакција извршена, а промене извршене трансакцијом су трајне, чак и у случају било каквих проблема попут недостатка електричне енергије или квара система.
МиСКЛ подржава ИнноДБ формат, који је облик складиштења података за МиСКЛ, укључен као стандардни формат табеле у све МиСКЛ дистрибуције. Овај формат подржава трансакције типа АЦИД и референтни интегритет.
Урадићемо неке примере имплементације АЦИД -а са Мискл -ом, упити би се затим могли имплементирати у било који програмски језик. У овој бази података сваки корисник ће имати ниво привилегија и радњи које може извршити у систему компаније. Ми ћемо се фокусирати само на ту функционалност.
Почећемо стварањем базе података ЦомпаниДБ фром пхпмиадмин, онда ћемо креирати корисничку табелу и изабрати ИнноДБ механизам за складиштење.
- Структура табеле за `усер` табеле ЦРЕАТЕ ТАБЛЕ ИФ НОТ ЕКССТС` усерс` (` усерид` инт (10) НОТ НУЛЛ, `наме` варцхар (150) ДЕФАУЛТ НУЛЛ) ЕНГИНЕ = ИнноДБ АУТО_ИНЦРЕМЕНТ = 4 ЗАДЊА КАРТА = латин1;Додајемо неке податке у табелу корисника
ИНСЕРТ ИНТО `усерс` (` усерид`, `наме`) ВРЕДНОСТИ (1, 'Царлос Алберте'), (2, 'Пабло Цаллејос'), (3, 'Ана Болена');У овом случају креирамо примарни кључ табеле корисника који ће бити кориснички ИД
- Индекси табеле `усерс` АЛТЕР ТАБЛЕ` усерс` ДОДАЈ ПРИМАРНИ КЉУЧ (` усерид`);Затим ћемо креирати табелу нивоа
- Структура табеле за табеле `нивои` ЦРЕАТЕ ТАБЛЕ ИФ НОТ ЕКССТС` нивои` (` левелид` инт (11) НОТ НУЛЛ, `левел` варцхар (50) ДЕФАУЛТ НУЛЛ) МОТОР = ИнноДБ АУТО_ИНЦРЕМЕНТ = 4 ЗАДЊА КАРТА = латин1;Додајемо неке податке у табелу нивоа
ИНСЕРТ ИНТО `нивои` (` левелид`, `левел`) ВРЕДНОСТИ (1, 'Основно'), (2, 'Средње'), (3, 'Напредно');Затим креирамо табелу привилегија, где ћемо назначити ниво дозвола сваког корисника
- Структура табеле за `привилегије` табеле ЦРЕАТЕ ТАБЛЕ ИФ НОТ ЕКСИСТС` привилегије` (` идпривилеге` инт (11) НОТ НУЛЛ, `идлевел` инт (11) НОТ НУЛЛ ДЕФАУЛТ '0',` идусуарио` инт (11) НОТ НУЛЛ ) МОТОР = ИнноДБ АУТО_ИНЦРЕМЕНТ = 4 ЗНАЧАЈНА ЦХАРСЕТ = латин1;Додајемо неке податке у табелу привилегија
ИНСЕРТ ИНТО `привилегес` (` привилегеид`, `левелид`,` усерид`) ВРЕДНОСТИ (1, 1, 1), (2, 2, 3), (3, 1, 2);Затим додајемо односе из СКЛ уређивача, ја додељујем страни кључ који повезује привилегије и табелу корисника кроз кориснички ИД и страни кључ који повезује привилегије са нивоима кроз ИД нивоа.
- Филтри за табелу `привилегес` АЛТЕР ТАБЛЕ` привилегије` АДД ЦОНСТРАИНТ` левеллфк` СТРАНИ КЉУЧ (`левелид`) РЕФЕРЕНЦЕ` нивои` (`левелид`), ДОДАЈ ОГРАНИЧЕЊЕ` привилегесфк` СТРАНИ КЉУЧИ (`усерид`) РЕФЕРЕНЦЕ` `(` усерид`);Затим консултујемо базу података да видимо да ли су подаци тачни
СЕЛЕЦТ усерс.наме, левелс.левел ОД корисника, нивоа, привилегија ВХЕРЕ привилегес.идлевел = левелс.левелид АНДусерс.усерид = привилегес.усеридХајде да видимо како то функционише. Покушаћемо да убацимо привилегије за корисника и ниво који не постоје.
Изјава ће бити следећа ИНСЕРТ ИНТО привилегес ВАЛУЕС (привилегеид, усерид, левелид); Тако
ИНСЕРТ ИНТО привилегије ВАЛУЕС (6, 8,10);Ово даје грешку јер би страни кључ усерид -а у табели привилегија створио недоследност ако додамо корисника који не постоји у табели корисника, овде избегавамо грешку, са форматом МиСам подаци би били сачувани без проблема.
Затим ћемо покушати да избришемо корисника из табеле корисника:
ИЗБРИШИ ИЗ `корисника` ГДЕ је кориснички ИД = 3Приликом извршавања СКЛ израза ће нам се јавити грешка, јер се клијент не може избрисати јер има податке у другим табелама, у овом случају клијент са ИД 3 је у табели привилегија, ако га желимо избрисати, морамо га прво уклонити са свих табела и иза табеле купаца.
За брисање ове врсте записа са страним кључевима користи се она која се зове делете ВАТЕРФАЛЛ, у којем ће сви записи који се односе на одређени упит бити избрисани у свим табелама у којима постоје односи страних кључева. За извршавање ове трансакције користимо функцију ОН ДЕЛЕТЕ ЦАСЦАДЕ.
Прва ствар ће бити давање дозволе за брисање каскадно, имајте на уму да је при стандардном покретању референтни тип ОГРАНИЧЕНО што указује на то да се подаци у том пољу табеле не могу ажурирати или избрисати, ово је из безбедносних разлога, свака реченица која се изврши неће моћи да изврши ниједну трансакцију, па мењамо дозволе за измену и брисање.
АЛТЕР ТАБЕЛА `привилегес` АДД ЦОНСТРАИНТ` привилегесфк` ФОРЕИГН КЕИ (` усерид`) ЛИТЕРАТУРА` усерс` (`усерид`) НА ИЗБРИШИ ЦАСЦАДЕ НА УПДАТЕ ЦАСЦАДЕ;Поново извршавамо СКЛ упит
ИЗБРИШИ ИЗ `корисника` ГДЕ је кориснички ИД = 3Затим можемо извршити скл упит да бисмо потврдили да га више нема ни у једној табели:
СЕЛЕЦТ усерс.наме, левелс.левел ОД корисника, нивоа, привилегија ГДЕ привилегес.идлевел = левелс.идлевел И усерс.усерид = привилегес.усеридКорисник 3 је уклоњен из табеле корисника и табеле привилегија, будући да је кориснички ИД тамо имао страни кључ.
Ово је исто за ажурирања при мењању, може се каскадирати ради одржавања референтног интегритета у Мискл -у и односа између табела.
Хајде да видимо шта ће се догодити ако додамо нетачне податке у уметак ланца, на пример додамо корисника, али када додамо привилегију добијамо погрешан ИД
ИНСЕРТ ИНТО ВАЛУЕС корисника (5, 'Јулиа Монтана'); ИНСЕРТ ИНТО привилегије (`привилегеид`,` левелид`, `усерид`) ВРЕДНОСТИ (6, 2, 6);У овом случају, корисник ће бити сачуван, али не и његове привилегије јер ИД 6 не постоји у табели корисника.Да ли вам се допао и помогао овај водич?Можете наградити аутора притиском на ово дугме да бисте му дали позитиван поен