КампутарыБазы дадзеных

"Падводныя камяні" DML-каманды Update MySQL

Кожны праграміст, якому прыходзілася працаваць з базамі дадзеных, сутыкаўся з DML-аператарамі (зав. З англ. - "мова маніпулявання дадзенымі"), такімі як Select, Insert, Delete і Update. MySQL-асяроддзе таксама выкарыстоўвае ў сваім арсенале ўсе вышэйпералічаныя каманды.

Названыя аператары лагічна кажуць аб сваім прызначэнні - выбары запісаў, ўстаўцы новых значэнняў, абнаўленні існуючых дадзеных, поўнага, або згодна з зададзеным умовам, выдаленні інфармацыі ў базе. У навучальных тэарэтычных матэрыялах падрабязна апісаны прынцып працы кожнай каманды і іх сінтаксіс, аднак нідзе не сустрэць згадак пра цяжкасці, якія могуць паўстаць на практыцы падчас выкарыстання. Гэты артыкул будзе прысвечаны разгляду некаторых з іх.

Коратка пра DML-аператарах (Insert)

Перш чым перайсці далей, неабходна яшчэ раз больш падрабязна нагадаць аб прызначэнні кожнай з функцый. Нас будуць больш падрабязна цікавіць два аператара: Insert і Update, так як менавіта ад іх выцякаюць галоўныя цяжкасці пры апрацоўцы вялікіх аб'ёмаў дадзеных.

Пачаць неабходна з каманды Insert, а затым плаўна перайсці да Update. MySQL сістэма, як і любая іншая сучасная СКБД, выкарыстоўвае аперацыю Insert для дадання новых запісаў у існуючыя табліцы баз дадзеных. Сінтаксіс названай аперацыі вельмі просты і зразумелы. Яна ўтрымлівае ў сабе пералік палёў, куды будуць уносіцца значэння, месца прызначэння - імя табліцы - і непасрэдна спіс ўносяцца дадзеных. Пры кожным выкананні каманды Insert база дадзеных будзе папаўняцца новымі значэннямі.

аператар Update

Аднак на практыцы даволі часта ўзнікаюць сітуацыі, што для некаторага набору дадзеных неабходна абнавіць адно або некалькі значэнняў атрыбутаў. У якасці прыкладу можна прывесці сітуацыю, калі на прадпрыемстве адбылося рэфармаванне з далейшым перайменаваннем асноўных аддзелаў. У такім выпадку неабходна ўнесці змены па кожным аддзелу. Калі змяняецца толькі назвы, то праблема вырашаецца вельмі хутка. Але калі мяняецца кадоўка кожнай складнікам усёй вытворчасці, якая, як правіла, служыць у якасці першаснага ключа, то гэта, у сваю чаргу, цягне змены ў інфармацыі і па кожным супрацоўніку.

Для вырашэння разгляданай задачы можа быць ужыты DML-аператар - Update. MySQL- сервер, аперуючы з вялікай колькасцю запісаў, пры дапамозе аператара абнаўлення, выканае патрабаваны запыт і вырашыць праблему. Але часам падчас абнаўлення ўзнікаюць не зусім зразумелыя і цяжкавытлумачальнае складанасці. Менавіта пра тое, якія складанасці выклікае абнаўленне запісаў, гаворка пойдзе далей.

Пра што мала сказана ў тэорыі ...

Каманда Update, як было адзначана вышэй, выкарыстоўваецца для абнаўлення існуючых запісаў у табліцы. Але на практыцы кліентам, звяртаюцца да сервераў баз дадзеных, не заўсёды вядома, існуе пэўны набор дадзеных у табліцах ці не. Папярэдняя праверка наяўнасці дадзеных у базе для наступнага абнаўлення прыводзіць да часовых выдатках і дарма расходаванню серверных магчымасцяў.

Каб гэтага не адбывалася, у СКБД прадугледжана спецыяльная канструкцыя MySQL - Insert * Update, у якой ўстаўка альбо абнаўленне могуць выконвацца незалежна адзін ад аднаго. То бок, калі ў табліцы маецца запіс для пэўнага ўмовы, будзе адбывацца абнаўленне. Калі даных па разглядаемага умове выяўлена не будзе, MySQL-сервер зможа выканаць запыт дадання дадзеных.

Абнаўленне дадзеных пры наяўнасці дублікатаў

Важны складнік падобнага Insert - запыту ў сістэме кіравання базамі дадзеных MySQL - «On Duplicate Key Update» прыстаўка. Поўны сінтаксіс запыту выглядае наступным чынам: «insert into test_table (employer_id, name) values (1, 'Abramov') on duplicate key update last_modified = NOW (); ».

Такі запыт можа быць выкарыстаны для рэгістрацыі дзеянняў супрацоўнікаў, напрыклад, вызначэння часу перасячэння прахадной прадпрыемства з наступным падлікам часу перапынку і выяўлення спазненняў. Каб не ўносіць у табліцу некалькі запісаў, досыць па кожнаму супрацоўніку весці ўлік з пастаянным абнаўленнем. Менавіта канструкцыя праверкі дубліката дазваляе гэта зрабіць.

Уласна пра праблемы ...

Разглядаючы прыведзены вышэй прыклад аб рэгістрацыі дзеянняў супрацоўнікаў на прахадной, у якасці праблемы можна прывесці выкарыстанне самоувеличивающихся (auto _ increment) палёў, якія звычайна выкарыстоўваюцца для запаўнення значэнняў першасных ключоў (primary _ key). Пры выкарыстанні каманды MySQL Update ў канструкцыі з Insert auto _ increment, поля пастаянна павялічваюцца.

Аналагічным чынам усё адбываецца, калі выкарыстоўваецца канструкцыя замены, у выпадку выяўлення дублікатаў. «Автоинкрементное» значэнне павялічваецца нават у тым выпадку, калі ў гэтым няма неабходнасці. З-за гэтага ўзнікаюць праблемы пропуску значэнняў альбо перапаўнення дыяпазону, якія ў наступным прыводзяць да парушэнняў працаздольнасці сістэм кіравання базамі дадзеных.

Найбольшая верагоднасць ўзнікнення праблемы

Апісваецца праблему неабходна ўлічваць Web -разработчикам, так як яна найбольш распаўсюджаная ў шматкарыстальніцкіх сістэмах (інтэрнэт-сайты, парталы і т. П.), Калі ў сістэме адбываецца выкананне вялікай колькасці працэдур Insert і Update MySQL.

PHP - звароты да базы выконваюцца вельмі часта. Таму дасягненне максімальнага значэння палямі, якiя вызначаюцца як auto_increment, адбываецца хутка, і пры разборы ўзніклі складанасцяў усталяваць прычыны адразу не атрымаецца.

Таму распрацоўнікам рэкамендуецца ўважліва падыходзіць да выкарыстання канструкцыі on duplicate key у камандзе mysql update. select - запыты пры звароце да сервера базы дадзеных адпрацуюць без памылак, але вось даданне новых запісаў у базу багата непрыемнымі сітуацыямі, у наступным якія прыводзяць да сур'ёзных праблем. У якасці альтэрнатывы рэкамендуецца для автоинкрементных палёў першапачаткова правяраць наяўнасць для іх запісаў, а пасля праводзіць іх абнаўленне.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 be.unansea.com. Theme powered by WordPress.