mysql delete statement delete command syntax
Овај водич објашњава како се користи МиСКЛ ДЕЛЕТЕ изјава за брисање података из табеле или брисање читаве табеле и разлика између наредби за одсецање и брисање:
У МиСКЛ-у ДЕЛЕТЕ је језик за манипулисање подацима или ДМЛ, као што знамо.
Као што само име говори, наредба се користи за брисање редова из табеле. Помоћу ове наредбе можемо избрисати један или више нежељених редова у једној трансакцији. Постоји више начина за брисање записа из табеле помоћу наредбе ДЕЛЕТЕ.
како изгледа модем
У овом упутству ћемо детаљно размотрити све ово заједно са једноставним примерима.
Шта ћете научити:
- МиСКЛ ДЕЛЕТЕ наредба
- Разлика између ИЗВРШИ И ОБРИШИ изјаве
- Референтни интегритет и његов утицај на ДЕЛЕТЕ
- Често постављана питања и одговори
- Закључак
МиСКЛ ДЕЛЕТЕ наредба
Треба имати на уму важан фактор пре него што наставимо даље. Било који ред или више редова које избришемо помоћу наредбе ДЕЛЕТЕ никада не може бити преузет.
Стога, да би се избегли сценарији у којима се ред грешком брише, препоручљиво је направити резервну копију табеле пре извршавања ДЕЛЕТЕ израза. Касније можемо да користимо ову резервну копију за враћање табеле у случају било каквих грешака.
Белешка: Користимо МиСКЛ верзију 8.0. Можете га преузети са овде .
МиСКЛ Делете Синтак:
DELETE (LOW_PRIORITY) (QUICK) (IGNORE) FROM tablename(.*) (, tablename(.*)) (WHERE condition) (ORDER BY) (LIMIT row_count) ;
Објашњење синтаксе:
- Синтакса започиње са кључном речи „ДЕЛЕТЕ ФРОМ“, чиме се МиСКЛ сервер обавештава о врсти активности коју треба извршити. Ово је обавезна кључна реч и не може се изоставити.
- Следи име табеле у којој операција ДЕЛЕТЕ мора бити изведена. Ово је такође обавезно и не може се изоставити. Овде можемо поменути једно или више имена табела.
- Даље, можемо споменути било који услов који контролише прихватљивост редова за брисање. Ово је необавезна клаузула. Кључна реч овде је ГДЕ.
- Иза клаузуле ВХЕРЕ слиједи клаузула ОРДЕР БИ која присиљава редове да се бришу у одређеном редослиједу, узлазно или силазно, у колони. Ово је необавезна клаузула.
- Клаузула ЛИМИТ следи клаузулу ОРДЕР БИ. Ограничава број редова које израз ДЕЛЕТЕ може уклонити из табеле.
Модификатори у ДЕЛЕТЕ Статементу
# 1) ЛОВ_ПРИОРИТИ:
Овај модификатор обавештава МиСКЛ Енгине да одложи извршење ДЕЛЕТЕ израза до тренутка када из табеле нема веза које читају из табеле из које покушавамо да ДЕЛЕТЕ.
Ово помаже у постизању доследности у свим осталим операцијама које ће се изводити на том столу. Ово такође помаже у избегавању проблема са закључавањем столова.
# 2) БРЗО:
Кад год избришемо ред, брише се и одговарајући индекс. Поврат простора у тренутку извршења израза ДЕЛЕТЕ троши процесорско време. Ако користимо кључну реч КУИЦК, тада одговарајући индексни простор остаје неискоришћен и може се користити када се убаце нови записи који одговарају опсегу индекса који је раније избрисан.
На пример, размотрите табелу запослених где је ИД запосленог индекс. Кад год запослени напусти организацију, морамо да избришемо одговарајући запис. Ако користимо клаузулу КУИЦК, тада одговарајући индексни простор остаје неискориштен.
Када се нови запосленик придружи, добиће нови број запосленог, а не исти број особе која је отишла. У таквим примерима није препоручљиво користити КУИЦК.
Пример МИСКЛ ДЕЛЕТЕ
Доље је дата табела узорка креирана у МИСКЛ-у.
Назив шеме: пацифички
Назив табеле: запослени
Имена колона:
емпНум; Садржи целобројне вредности броја запослених.
презиме: Садржи варцхар вредности за презиме запосленог.
име: Садржи варцхар вредности за име запосленог.
емаил: Садржи варцхар вредности за имејл ИД запосленог.
дептНум; Садржи варцхар за ИД одељења коме запослени припада.
плата: Садржи децималне вредности зараде сваког запосленог.
датум_почетка: Садржи датумске вредности за датум придруживања запосленог.
Назив шеме: пацифички
Назив табеле: запослена_историја
Имена колона:
емпНум; Садржи целобројне вредности броја запослених.
презиме: Садржи варцхар вредности за презиме запосленог.
име: Садржи варцхар вредности за име запосленог.
емаил: Садржи варцхар вредности за имејл ИД запосленог.
дептНум; Садржи варцхар за ИД одељења коме запослени припада.
плата: Садржи децималне вредности зараде сваког запосленог.
датум_почетка: Садржи датумске вредности за датум придруживања запосленог.
Назив шеме: пацифички
Назив табеле: одељења
Имена колона:
дептНум; Садржи варцхар за ИД одељења у оквиру организације.
град: Садржи име града у којем раде одељења.
држава: Садржи име државе која одговара граду.
бонус: Садржи процентуалну вредност бонуса.
МиСКЛ Обриши један ред
Први и лакши начин брисања записа из табеле у брисању записа појединачно, користећи врло јаку клаузулу ВХЕРЕ која осигурава брисање само једног одговарајућег записа. Ово би се даље могло користити за брисање скупа сличних врста редова из табеле.
Детаљно ћемо проћи кроз наредбу делете и њено извршавање.
Овде ћемо покушати да уклонимо запосленог по имену „Цхрис Нолан“ са бројем запосленог 1013.
Као што је приказано на горњој слици, изјава ДЕЛЕТЕ је успешно извршена и један ред је избрисан из табеле запосленог.
Тхе излаз наредба у наставку показује време извршења изјаве, извршени МиСКЛ израз и број редова на које се то односи.
Молимо вас будите врло сигурни у вези са клаузулом ВХЕРЕ овде. Ако је клаузула ВХЕРЕ нетачна или ако пропустите клаузулу ВХЕРЕ, то може довести до губитка података. Да би се избегле такве ситуације, у производњи постоји пракса периодичног прављења резервних копија или истовара података.
Да бисмо верификовали излаз овог ДЕЛЕТЕ израза, извршимо СЕЛЕЦТ израз на овој табели са емпНум као 1013.
Излазни резултати показују НУЛЛ вредност за све колоне, што значи да не постоји запис за такав емпНум. Излаз доњег упита показује да је враћено 0 редова, што значи да је запис избрисан извршењем горе наведеног ДЕЛЕТЕ израза.
Упит:
DELETE FROM employees WHERE empNum = 1013 ;
Снимак табеле после:
емпНум | презиме | име | е-маил | дептНум | Плата |
---|---|---|---|---|---|
7 | Ово је релативно успорено од ТРУНЦАТЕ, у поређењу са брисањем целокупних података из табеле. | Ово је релативно брже од ДЕЛЕТЕ, у поређењу са брисањем целокупних података из табеле. | |||
НУЛА | НУЛА | НУЛА | НУЛА | НУЛА | НУЛА |
МиСКЛ ДЕЛЕТЕ користећи клаузулу ОРДЕР БИ АНД ЛИМИТ
ОРДЕР БИ и ЛИМИТ су две клаузуле о којима смо горе говорили. Први помаже у одлучивању по редоследу чишћења записа, или брисање записа с емпНум у растућем или брисање записа са зарадом у опадајућем редоследу. Ово последње помаже у ограничавању броја записа које ова трансакција може избрисати.
На пример, ако желимо да избришемо само 2 запослена из одељења број 4, који примају високе плате. Затим постоје три дела овог упита.
- Први, морамо да очистимо запослене из одељења број 4. Ово ће решити клаузула ВХЕРЕ.
- Следећи, морамо очистити запослене који зарађују високе плате. Овим ће се позабавити клаузула ОРДЕР БИ у колони зарада у опадајућем редоследу.
- На крају, морамо да очистимо само двоје запослених. Ово ће решити клаузула ЛИМИТ.
Погледајмо ДЕЛЕТЕ упит и видећемо резултате. Пре тога, прво идентификујмо које тачно записе желимо да избришемо. Горње услове ћемо користити са наредбом СЕЛЕЦТ да бисмо добили записе које желимо да избришемо и касније извршили исти упит да бисмо проверили да ли су ти записи избрисани или не.
У горњем СЕЛЕЦТ упиту задовољили смо сва три услова о којима смо горе говорили користећи клаузулу ВХЕРЕ, ОРДЕР БИ и ЛИМИТ. Упит нам је дао 2 записа, један са емпНум 1010, а други са 1007. Сада ћемо извршити упит ДЕЛЕТЕ како бисмо били сигурни да су ова два записа избрисана.
Као што је приказано на горњој слици, изјава ДЕЛЕТЕ је успешно извршена и избрисала је два реда из табеле запосленог. Тхе излаз наредба у наставку показује време извршења изјаве, извршени МиСКЛ израз и број редова на које се то односи.
Да бисмо верификовали излаз овог ДЕЛЕТЕ израза, извршимо СЕЛЕЦТ за емпНум 1010 и 1007. Не можемо да користимо исти СЕЛЕЦТ упит као што је коришћен горе као што би то показало осталим запосленима под дептНум 4.
Излазни резултати приказују НУЛЛ вредност за све колоне, што значи да не постоји запис за такве бројеве запослених. Тхе Оутпут доњег упита показује да је враћено 0 редова, што значи да је запис избрисан извршењем горе наведеног ДЕЛЕТЕ израза.
Упит:
DELETE FROM employees WHERE deptNum = 4 ORDER BY salary DESC LIMIT 2 ;
Снимак табеле после:
емпНум | презиме | име | е-маил | дептНум | Плата |
---|---|---|---|---|---|
НУЛА | НУЛА | НУЛА | НУЛА | НУЛА | НУЛА |
МиСКЛ ДЕЛЕТЕ помоћу клаузуле за одабир
Даље ћемо проћи кроз употребу клаузуле СЕЛЕЦТ приликом брисања записа из једне табеле.
Размотрите следећи сценарио:
Имамо два сета табела: запослени и одељења. дептНум је као примарни кључ у табели одељења и страни кључ у табели запосленог. То значи да ако је запосленом додељено одељење, то мора бити из једног од одељења у табели одељења.
Сада морамо да избришемо оне записе из табеле одељења где до сада није распоређен ниједан запослени. То можемо учинити тако што ћемо у потупиту ДЕЛЕТЕ упита имати клаузулу СЕЛЕЦТ.
подразумевани мрежни пролаз није доступан Виндовс 10 вифи
Прво идентификујмо записе које желимо да избришемо:
Горњи СЕЛЕЦТ упит има подупит.
Функционисање упита је следеће:
Упит повлачи све записе из табеле одељења где дептНум не постоји у табели запосленог. Спајање се изводи у подупиту на дептНум-у две табеле.
Хајде сада да покренемо упит ДЕЛЕТЕ и видимо да ли можемо да избришемо ова два записа из табеле одељења јер ниједан запосленик није додељен тим одељењима.
Као што је приказано на горњој слици, изјава за брисање избрисала је 2 реда из табела одељења којима није додељен ниједан запосленик.
Да бисмо верификовали излаз овог ДЕЛЕТЕ израза, извршимо СЕЛЕЦТ на табели и видимо шта имамо у излазу.
Излазна порука горе наведеног упита за верификацију каже „Враћено је 0 редова“. То подразумева да се редови са дептНум 6 и 7 бришу. Излаз такође не приказује записе уместо да прикаже НУЛЛ вредности пошто су записи избрисани.
Упит:
DELETE FROM departments WHERE NOT EXISTS (SELECT deptNum FROM employees WHERE departments.deptNum = employees.deptNum ) ;
МиСКЛ ДЕЛЕТЕ Цели подаци из табеле
Даље ћемо размотрити сценарио у којем морамо обрисати све редове или записе из табеле.
У производној ситуацији можда се никада нећете сусрести са таквом ситуацијом. Али оваква врста ствари била би потребна у развојном подручју где морате да тестирате свој код са више различитих сценарија и можда ћете желети да поново направите нови скуп тестних података брисањем записа који постоје у табели.
Прво, погледајмо податке које намеравамо да избришемо. Покушаћемо да избришемо податке из табеле запослени_историја.
Доље дати су тренутно постојећи подаци у табели.
Овде имамо 18 редова у табели запослени_историја. Хајде сада да избришемо све ово у једној јединој трансакцији. Упит је готово сличан ономе о којем смо говорили у првом одељку. Једина промена је у томе што из упита морамо уклонити клаузулу ВХЕРЕ тако да не постоји ограничење броја редова које желимо да избришемо.
Као што је приказано на горњој слици, наредба делете је успешно извршена и избрисаних је свих 18 редова из табеле запослени_хисторија. Излазни израз у наставку приказује време извршења наредбе, извршени МиСКЛ израз и број редова на које је то утицало.
Да бисмо верификовали излаз овог ДЕЛЕТЕ израза, извршимо СЕЛЕЦТ на табели и видимо шта имамо у излазу.
Излазни резултати приказују НУЛЛ вредност за све колоне, што значи да не постоји запис за такве бројеве запослених. Излаз доњег упита показује да је враћено 0 редова, што значи да су сви записи избрисани извршењем горе наведеног ДЕЛЕТЕ израза.
Упит:
DELETE FROM employees_history ;
Снимак табеле после:
емпНум | презиме | име | е-маил | дептНум | Плата |
---|---|---|---|---|---|
НУЛА | НУЛА | НУЛА | НУЛА | НУЛА | НУЛА |
МиСКЛ ДЕЛЕТЕ Цела табела
Сада ћемо размотрити сценарио у којем морамо обрисати саму табелу. У СКЛ терминима, то називамо ДРОП тхе табле. Није битно да ли табела има неке податке или не. Једноставно ће испустити табелу заједно са подацима ако постоје.
У горњем одељку избрисали смо податке из табеле запослени_историја. У овом одељку ћемо испустити саму табелу запослених_историја.
Следи наредба заједно са њеним резултатима:
Као што је приказано на горњој слици, изјава ДРОП је успешно извршена и избрисала је табелу стафф_хистори из системског каталога базе података МиСКЛ.
Ако погледате поруку, приказаће се „0 реда погођених“. То је зато што смо у претходном одељку избрисали свих 18 редова. Ако би ова табела имала редове, то би утицало на тај број редова, што подразумева брисање.
Да бисмо верификовали излаз овог ДРОП израза, извршимо СЕЛЕЦТ на табели и видимо шта имамо у излазу.
Излазна порука горњег упита за верификацију каже да табела не постоји. Ово потврђује наше извршавање горе наведене изјаве ДРОП да бисмо спустили табелу.
Упит:
DROP TABLE employees_history ;
МиСКЛ наредба за исецање
Већ смо разговарали о брисању свих записа из табеле помоћу команде ДЕЛЕТЕ. Исто би се могло постићи и помоћу израза ТРУНЦАТЕ.
У овом примеру, хајде да поново креирамо табелу запосленика_историја и поново је попунимо подацима. Т. следе два упита која су извршена за поновно креирање табеле и њено поновно попуњавање:
Упит:
CREATE TABLE employees_history LIKE employees ; INSERT INTO employees_history (SELECT * FROM employees) ;
Тако сада изгледа табела стафф_хистори са подацима.
Питања и одговори за разговоре за програмере пл скл
Затим ћемо уклонити све записе из ове табеле помоћу израза ТРУНЦАТЕ.
Као што је приказано на слици, упит се успешно извршава. Ако пажљиво погледате део „Порука“, открићете да у њему стоји „0 реда погођених“. Међутим, знамо да ова табела има 15 редова. Па како онда емисије нула?
Разлог: Изрезивање трунцате не брине да броји на колико редова утиче његово извршавање. Једноставно испразни сто. Ово је једна од значајних разлика између ДЕЛЕТЕ и ТРУНЦАТЕ израза.
Проверимо извршавање израза ТРУНЦАТЕ извршавањем упита СЕЛЕЦТ на табели запосленика_историја.
Као што је приказано на горњој слици, упит није вратио редове, а такође сви ступци показују НУЛЛ вредности, што подразумева да је ТРУНЦАТЕ израз који смо раније извршили избрисао све записе из табеле.
Упит:
TRUNCATE TABLE employees_history ;
Разлика између ИЗВРШИ И ОБРИШИ изјаве
Господине Не | ИЗБРИШИ | ОДРЕЗИ |
---|---|---|
један | То је ДМЛ (језик за манипулисање подацима). | То је ДДЛ (језик за дефинисање података). |
два | Било који окидач АФТЕР ДЕЛЕТЕ на столу активира се када користимо наредбу ДЕЛЕТЕ. | Ниједан окидач АФТЕР ДЕЛЕТЕ на столу се не активира када користимо наредбу ТРУНЦАТЕ. |
3 | Запис се може избрисати чак и ако постоје нека ограничења страног кључа. | Записи из табеле не могу се скратити ако постоје нека ограничења страног кључа. |
4 | Поновна иницијализација табеле се неће догодити. | Табела ће бити поново инцијализована. |
5 | Може се користити клаузула ВХЕРЕ. | Клаузула ВХЕРЕ се не може користити. |
6 | Ово брише један по један запис и евидентира укупан број избрисаних записа у евиденцијама. | Чисти све записе одједном и не води евиденцију о броју избрисаних записа. |
Референтни интегритет и његов утицај на ДЕЛЕТЕ
Пре него што будемо, да видимо шта су референтни интегритет или РИ или страна кључна ограничења?
Ограничења страног кључа односе се на успостављање везе или везе између стола родитеља и детета. Ово помаже у унакрсном референцирању података у табелама које су међусобно повезане. Једна родитељска табела може имати више подређених табела и обрнуто.
На пример, две табеле о којима смо до сада разговарали, тј. запослени и одељења, повезане су једна с другом користећи ограничење спољног кључа. Ово ограничење се успоставља стварањем једне колоне, обично примарног кључа, као кључне колоне која повезује две табеле.
Ступац дептНум у табели одељења повезан је са ступцем дептНум у табели запосленог. У овом случају, одељења су родитељски сто, а запослени дете.
Али, како ово утиче на ДЕЛЕТЕ изјаве?
У МиСКЛ-у или у било којој бази података постоје одређени сценарији којима се треба руковати приликом брисања записа из надређених или подређених табела.
Постоји више референтних опција о којима можемо разговарати:
# 1) НА БРИСАЊУ КАСКАДЕ: Правило каже да не можемо уклонити ред из надређене табеле ако има неке референце или има одговарајући ред у било којој од подређених табела. Међутим, ако родитељска табела има прилично подређених табела, онда је досадан задатак прво уклонити записе из сваке подређене табеле, а затим из родитељске табеле.
За ово постоји заобилазно решење под називом ИЗБРИШИ КАСКАДУ. Ово је једна клаузула која се додаје у израз ЦРЕАТЕ сваке од подређених табела. Дакле, кад год кажемо брисање реда из надређене табеле, тада би МиСКЛ механизам прво идентификовао референце тог реда у подређеним табелама и уклонио те записе и на крају избрисао запис из надређене табеле.
# 2) БЕЗ АКЦИЈЕ: Ово је подразумевана опција. Ако извршење ДЕЛЕТЕ израза покуша да избрише запис који има референце у било којој од подређених табела, тада ће се овом опцијом зауставити извршавање израза и МиСКЛ трансакција ће се вратити на последњу тачку урезивања.
# 3) ОГРАНИЧЕЊЕ: Функционисање ОГРАНИЧЕЊА и БЕЗ АКЦИЈЕ је исто. Зауставиће извршење и издаће повратак.
# 4) СЕТ НУЛЛ: Ако извршавање наредбе делете покуша да избрише запис који има референце у било којој од подређених табела, тада ће ова опција ажурирати вредност колоне у свим подређеним табелама као НУЛЛ и једном завршено, обрисат ће запис из родитеља сто.
# 5) ПОСТАВИ ЗАДАТАК: Ако извршавање ДЕЛЕТЕ израза покуша да избрише запис који има референце у било којој од подређених табела, тада ће ова опција ажурирати вредности колона на подразумевану вредност како је дефинисано у изразу ЦРЕАТЕ табеле.
Често постављана питања и одговори
П # 1) Како избрисати податке из табеле у МиСКЛ-у?
Одговор: Синтакса наредбе делете за брисање само изабраног реда података дата је у наставку.
DELETE FROM table_name WHERE condition;
П # 2) Како избрисати све податке из табеле у МиСКЛ-у?
Одговор: Синтакса наредбе ДЕЛЕТЕ за брисање свих редова из табеле је:
DELETE * FROM table_name;
П # 3) Како избрисати табелу из базе података у МиСКЛ-у?
Одговор: Наредба дроп може се користити за брисање табеле из базе података. Корисник може заменити име_табеле табелом коју треба избрисати.
DROP TABLE table_name;
П # 4) Како обрисати базу података у МиСКЛ-у?
Одговор: Наредба дроп може се користити за брисање базе података.
DROP Database db_name;
Корисници могу дб_наме заменити именом базе података које треба избрисати.
П # 5) Шта је ОН ДЕЛЕТЕ ЦАСЦАДЕ у МиСКЛ?
Одговор: Када се родитељски запис избрише, ОН ДЕЛЕТЕ ЦАСЦАДЕ креира одговарајући подређени запис који треба избрисати. Тако се ефекат брисања каскадно преноси са родитеља на дете. Ово може бити корисно при брисању више табела.
П # 6) Зашто се ТРУНЦАТЕ сматра ДДЛ изјавом?
Одговор: Израз ТРУНЦАТЕ заправо испушта и поново креира табелу заједно са метаподацима табеле. Дакле, то је ДДЛ изјава.
П # 7) Може ли се ТРУНЦАТЕ вратити?
Одговор: Не, ТРУНЦАТЕ је изјава за аутоматско урезивање ако се извршава самостално. То значи да се не може вратити, јер се урезивање такође извршава заједно са њим. Али ако је то део трансакције, онда се може вратити према СКЛ датотекама евиденције.
П # 8) Могу ли се ДЕЛЕТЕ изрази вратити назад?
Одговор: Да, ДЕЛЕТЕ изјаве се могу вратити. Само извршите наредбу РОЛЛБАЦК пре извршавања ЦОММИТ.
П # 9) Да ли се колона може избрисати помоћу наредбе ДЕЛЕТЕ?
Одговор: Додавање или брисање колоне су ДДЛ наредбе. Израз АЛТЕР треба користити за ПАДАЊЕ ступца из табеле.
Закључак
У овом упутству смо научили различите начине извршавања ДЕЛЕТЕ израза у МиСКЛ-у.
Укратко, видели смо:
- МиСКЛ Обриши један ред
- МиСКЛ Делете помоћу клаузуле ОРДЕР БИ Анд Лимит
- МиСКЛ Делете помоћу клаузуле за одабир
- МиСКЛ Делете Ентире Табле
- МиСКЛ Трунцате
- Разлика између наредби ТРУНЦАТЕ и ДЕЛЕТЕ
- Референтни интегритет и његови утицаји на ДЕЛЕТЕ
Можемо користити било шта од наведеног, на основу захтева.
Срећно читање !!
Препоручено читање
- Синтакса наредбе Уник Цат, опције са примерима
- Уник наредба за сортирање са синтаксом, опцијама и примерима
- МиСКЛ Убаци у табелу - Убаци синтаксу и примере изјаве
- МонгоДБ Ажурирање и брисање докумената са примерима
- Изрежи команду у Унику са примерима
- Нови / Обриши операторе на Ц ++ са примерима
- Водич за изјаву о ажурирању МиСКЛ - Синтакса упита и ажурирање примера
- Лс наредба у Унику са примерима