Կառուցվածքային SQL հարցման լեզու PHPMyAdmin-ում: Միացնել լրացուցիչ PhpMyAdmin գործառույթները Phpmyadmin հարցումների պատմությունը

Իսկ ստանդարտ փաթեթում դուք կարող եք շատ բաներ անել դրա հետ: Այնուամենայնիվ, ինչպես դա կարող է լինել, այն ունի մի շարք օգտակար գործառույթներ, որոնք կարող են միացնել առանձին: Այս հոդվածում մենք կբացահայտենք լրացուցիչ հնարավորություններ PhpMyAdmin և տեսեք, թե ինչպես կարող են դրանք օգտակար լինել մեզ համար:

Կարգավորում

Նախքան սկսելը, համոզվեք, որ PhpMyAdmin-ը գործում է և աշխատում է: Եթե ​​մուտք գործեք, կարող եք նկատել այսպիսի հաղորդագրություն.

phpMyAdmin-ի կազմաձևման պահեստն ամբողջությամբ կազմաձևված չէ, որոշ ընդլայնված գործառույթներ ապաակտիվացված են: Պարզելու համար, թե ինչու, սեղմեք այստեղ:
(phpMyAdmin կոնֆիգուրացիայի խանութը ճիշտ կազմաձևված չէ, որոշ գործառույթներ անջատված են: Սեղմեք այստեղ՝ պարզելու, թե ինչու)

$cfg["Servers"][$i]["controluser"] = "pma"; $cfg["Servers"][$i]["controlpass"] = "pmapass"; $cfg["Servers"][$i]["pmadb"] = "phpmyadmin"; $cfg["Servers"][$i]["bookmarktable"] = "pma__bookmark"; $cfg["Servers"][$i]["relation"] = "pma__relation"; $cfg["Servers"][$i]["table_info"] = "pma__table_info"; $cfg["Servers"][$i]["pdf_pages"] = "pma__pdf_pages"; $cfg["Servers"][$i]["table_coords"] = "pma__table_coords"; $cfg["Servers"][$i]["column_info"] = "pma__column_info"; $cfg["Servers"][$i]["history"] = "pma_history"; $cfg["Servers"][$i]["recent"] = "pma__recent"; $cfg["Servers"][$i]["table_uiprefs"] = "pma__table_uiprefs"; $cfg["Servers"][$i]["users"] = "pma_users"; $cfg["Servers"][$i]["usergroups"] = "pma__usergroups"; $cfg["Servers"][$i]["navigationhiding"] = "pma__navigationhiding"; $cfg["Servers"][$i]["tracking"] = "pma_tracking"; $cfg["Servers"][$i]["userconfig"] = "pma__userconfig"; $cfg["Servers"][$i]["designer_coords"] = "pma__designer_coords"; $cfg["Servers"][$i]["favorite"] = 'pma__favorite'; $cfg["Servers"][$i]["savedsearches"] = "pma__savedsearches";

Փոխեք օգտվողի անունը, գաղտնաբառը և տվյալների բազայի անունը ըստ ձեր նախասիրության: Մնացած կազմաձևման արժեքները աղյուսակների անուններն են: Դատարկ թողնելով դրանց համապատասխան գործառույթները կանջատվեն: Բայց ընդհանուր առմամբ խորհուրդ կտամ այս անունները թողնել այնպես, ինչպես կան։ Կախված PhpMyAdmin-ի տարբերակից, ոչ բոլոր արժեքները հասանելի կլինեն լռելյայն: Այս դեպքում ես օգտագործել եմ PhpMyAdmin տարբերակը 4.2.x:

Երբ ավարտեք կազմաձևը, դուք պետք է ստեղծեք տվյալների բազա: Ստեղծեք տվյալների բազա ձեր կազմաձևման ֆայլում նշած անունով: Հաջորդը, ձեր մեքենայի վրա փնտրեք create_tables.sql անունով ֆայլ: Ամենայն հավանականությամբ, տրված ֆայլըկգտնվի տեղադրված PhpMyAdmin-ի արմատային գրացուցակում կամ սկրիպտների ենթագրքում: Եթե ​​դուք Linux-ում եք, ապա գտնվելու վայրը կլինի /usr/share/phpMyAdmin/examples/ կամ /usr/share/doc/phpmyadmin/scripts/: Գործարկեք այս ֆայլը ստեղծված տվյալների բազայի դեմ: Եթե ​​վերը նշված կոնֆիգուրայում փոխել եք աղյուսակների անունները, մի մոռացեք դրանք փոխել նաև տվյալների բազայում:

ՏՐԱՄԱԴՐԵԼ ՕԳՏԱԳՈՐԾՈՒՄԸ mysql.*-ին «pma»@«localhost»-ին, որը նույնականացվում է «pmapass»-ով; mysql.user-ում «pma»@«localhost»-ի վրա; GRANT SELECT ON mysql.db TO "pma"@"localhost"-ին; GRANT SELECT ON mysql.host TO "pma"@"localhost"-ին; GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv) ON mysql.tables_priv TO "pma"@"localhost"-ում; GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO "pma"@"localhost";

PhpMyAdmin-ից դուրս գալուց և նորից մուտք գործելուց հետո մենք պետք է տեսնենք, որ նախազգուշացումը չկա: Եթե ​​բացակայում է, սեղմեք հղման վրա՝ պարզելու, թե ինչն է պակասում։

Դիտարկենք լրացուցիչ տարբերակներ:

Էջանիշեր

Միացնելով էջանիշների ընդլայնումը, դուք կկարողանաք էջանշել հարցումները: Հարցում ստեղծելիս կարող եք այն էջանշել: Բացի այդ, եթե հարցումն արդեն գործարկվել է, կարող եք էջանշել այն՝ ոլորելով էջի ներքևի հատված և լրացնելով ձևը:

Երբ դուք գնում եք SQL ներդիր, ներքևում կտեսնեք վահանակ, որտեղ կարող եք ընտրել հարցումը էջանիշներից: Ընտրեք ձեր ուզածը և նշեք, թե ինչ եք ուզում անել դրա հետ՝ կատարել, դիտել կամ ջնջել:

Միացումներ

Հարաբերությունների տարբերակը, հավանաբար, ամենալավ բանն է, որ ես երբևէ օգտագործել եմ: Եթե ​​դուք օգտագործում եք օտարերկրյա բանալիներ, ապա այդպիսի ստեղները կդառնան սեղմելի: Երբ սեղմում եք օտար բանալիի վրա, դուք կտեղափոխվեք մեկ այլ աղյուսակ. այն գրառումը, որին վերաբերում է արտաքին բանալին:

Բացի այդ, օտար բանալի ավելացնելիս կամ խմբագրելիս, տեքստի մուտքագրման դաշտի փոխարեն, ձեզ կներկայացվի բոլոր հնարավոր տարբերակների ցանկը:

Աղյուսակային տեղեկատվություն

Իհարկե, օտարերկրյա բանալու համար բոլոր հնարավոր արժեքներով ցուցակ տեսնելը լավ է: Բայց ավելի լավ կլիներ, եթե ID-ի փոխարեն մեզ կոնկրետ սյունակ ցույց տան: Դրան հասնելու համար դուք պետք է միացնեքable_info-ը: Գնացեք հիմնական աղյուսակ, անցեք «Կառուցվածք» ներդիր և կտտացրեք հղման դիտման հղմանը: Եթե ​​ոլորեք էջի ներքևում, կտեսնեք, թե որ սյունակը կցուցադրվի այս բանալիի համար:

Եթե ​​ես ստեղծեմ նոր ռեկորդօտար բանալիով, այնուհետև հիմնական բանալիի արժեքի կողքին ես կտեսնեմ իմ նշած սյունակի արժեքը: Այժմ նույնացուցիչը հիշելու կարիք չկա։

PDF էջեր

Աղյուսակների միջև փոխհարաբերությունները կարող են արտահանվել PDF: Դա անելու համար դուք պետք է ակտիվացնեք pdf_pages-ը, table_coords-ը և կապը կոնֆիգուրայում: Հաջորդ քայլը տվյալների բազայի բացումն է, որը ցանկանում եք արտահանել PDF: Կտտացրեք «Գործողություններ» ներդիրին: Հաջորդը, սեղմեք «Խմբագրել կամ արտահանել հղման դիագրամ» հղմանը: Լրացրեք բոլոր դաշտերը և սեղմեք «Ներկայացնել»: Եթե ​​լրացրել եք ձևաթուղթը, ապա կունենաք PDF ֆայլբոլոր անհրաժեշտ տվյալներով։

Սյունակի Տեղեկություն

Սյունակի տեղեկատվության տարբերակի միջոցով կարող եք մեկնաբանություններ ավելացնել սյունակների անուններին: Սա կարող է օգտակար լինել, երբ ցանկանում եք այլ մարդկանց փոխանցել, թե ինչ է այս սյունակը և ինչ տվյալներ են պահվում դրանում: Դուք կարող եք դա անել՝ փոխելով սյունակի տվյալները: Դուք կարող եք նկատել, որ սյունակը ավելացվել է նոր մեկնաբանություն. Եթե ​​մուտքագրեք մեկնաբանություն, այն կհայտնվի հենց սյունակի անվան տակ:

Նույն կերպ փոխակերպումները կարող են կիրառվել սյունակների վրա։ Փոխակերպումների միջոցով դուք կարող եք ֆայլի անունը դարձնել հիպերհղում, որը կբացի նշված ֆայլը:

Պատմություն

Եթե ​​միացնեք պատմությունը, ապա PhpMyAdmin-ի միջոցով արված բոլոր հարցումները կպահվեն ձեր պատմության մեջ, մինչև չավարտեք նիստը կամ փակեք զննարկիչը: Պատմությունը կարելի է դիտել՝ զանգահարելով «Հարցում» երկխոսության տուփը և սեղմելով «SQL History» կոճակը։

Վերջերս

Վրա նավիգացիոն բարԴուք կարող եք նկատել «Վերջին» կոճակը, որը պարունակում է աղյուսակների բացվող ցանկը, որոնք վերջերս դիտել եք: Այս ցանկը ցուցադրվում է լռելյայն: Բայց եթե ցանկանում եք այն մշտապես պահել նիստերի միջև, կարող եք միացնել վերջին տարբերակը կոնֆիգուրայում, և ձեր զննարկման պատմությունը կպահվի տվյալների բազայում:

Սեղանի ցուցադրման կարգավորումներ

Աղյուսակները դիտելիս կարող եք փոխել սյունակների հերթականությունը՝ քաշելով: Այս փոփոխությունները տեսանելի են միայն ձեզ: Սյունակների իրական հերթականությունը չի փոխվել։ Բացի այդ, դուք կարող եք նաև դասավորել սյունակները աճման և նվազման կարգով: Նման փոփոխությունները պահվում են նստաշրջանում, և երբ մուտքագրված չլինեն, դրանք կզրոյացվեն և կփոխարինվեն լռելյայն կարգավորումներով: Այնուամենայնիվ, եթե ցանկանում եք, որ աղյուսակները մշտապես նայեն ձեզ, ապա միացրեք table_uiprefs տարբերակը:

Օգտագործողների և օգտվողների խմբեր

Դուք կարող եք չցանկանալ ցուցադրել բոլոր հնարավորությունները բոլոր օգտագործողների համար: Այս դեպքում դուք կարող եք դրանք բաժանել խմբերի «Օգտագործողներ» ներդիրում: Ստեղծեք նոր խումբ և սահմանեք, թե ինչ կարող են տեսնել այդ խմբի օգտատերերը: Այնուհետև կարող եք օգտատերեր ավելացնել այս խմբին, և կարող եք վստահ լինել, որ նրանք կտեսնեն միայն ընտրացանկի տարրերը, որոնք դուք նրանց թույլ եք տալիս տեսնել: Այս կերպ Դուք կարող եք տարբեր օգտվողներին հասանելիություն տալ համակարգի տարբեր գործառույթներին, ինչպես նաև թաքցնել չօգտագործված տարբերակները:

Թաքցնում է նավիգացիան

Navigationhiding-ով դուք կարող եք թաքցնել որոշ աղյուսակներ նավիգացիոն տողում: Սեղմելով աղյուսակի անվան կողքին գտնվող լամպի պատկերակը, այն կթաքցվի: Կարող եք նաև այն նորից տեսանելի դարձնել՝ կրկին սեղմելով լամպի պատկերակը: Այս կերպ դուք կբեռնաթափեք նավիգացիոն տողը չօգտագործված աղյուսակներից:

Հետևում

Այս հատկությամբ դուք կարող եք հետևել բոլոր փոփոխություններին, որոնք կատարվել են որոշակի աղյուսակներում PhpMyAdmin. Գնալով աղյուսակ և բացելով Հետևում ներդիրը, կարող եք ստեղծել ընթացիկ աղյուսակի տարբերակը: Այժմ PhpMyAdmin-ի միջոցով այս աղյուսակում կատարված բոլոր փոփոխությունները կպահվեն: Նույն կերպ, դուք հեշտությամբ կարող եք որոշել, թե ինչ փոփոխություններ են կատարվել աղյուսակում վերջին տարբերակի ստեղծման պահից:

Օգտագործողի կարգավորումներ

Օգտատիրոջ բոլոր կարգավորումները լռելյայն պահվում են ձեր բրաուզերում: Սա նշանակում է, որ եթե որոշեք օգտագործել այլ բրաուզեր կամ մաքրել ձեր բրաուզերի քեշը, ձեր բոլոր կարգավորումները կկորչեն: Ակտիվացնելով userconfig-ը, դուք մշտապես պահում եք ձեր կարգավորումները տվյալների բազայում:

Տվյալների բազայի դիզայների կոորդինատները

Միացնելով designer_coords-ը, դուք կարող եք դիտել ձեր աղյուսակների միջև կապերը տվյալների բազայի դիզայներական տեսքով: Մտնելով տվյալների բազա և սեղմելով «Դիզայներ» ներդիրը, կտեսնեք ստորև ներկայացված պատկերի նման մի բան, որը ցույց է տալիս աղյուսակների միջև փոխհարաբերությունները: Այնուամենայնիվ, դուք կարող եք տեսողականորեն կառավարել աղյուսակների միջև հարաբերությունները՝ օգտագործելով այս պատուհանը:

Ֆավորիտներ

Միացնելով նախընտրած տարբերակը՝ տվյալների բազան զննելիս կարող եք աղյուսակների անունների կողքին նկատել աստղանիշների պատկերակները: Ձեր ընտրյալներին աղյուսակ ավելացնելու համար պարզապես սեղմեք աստղի վրա: Նավիգացիոն տողում կտեսնեք «Ընտրյալների» բացվող ցանկը: Այն աղյուսակները, որոնք ավելացրել եք ձեր ընտրյալներին, կհայտնվեն այս ցանկում:

Որոնման ընտրանքների պահպանում

Բացելով տվյալների բազան և անցնելով «Հարցում» ներդիր՝ կարող եք ստեղծել ընդլայնված որոնում: Որոնման ընտրանքները կարող են էջանշվել: Նկատի ունեցեք, որ դրանք ավելի վաղ քննարկված SQL հարցման էջանիշերը չեն: Այս տարբերակով դուք կարող եք պահպանել որոնման պարամետրերը և օգտագործել դրանք ավելի ուշ:

Եզրակացություն

Այս հնարավորությունները միացնելը պարզ է և իսկապես կարող է օգնել տվյալների բազայի կառավարմանը PhpMyAdmin-ի միջոցով: Ինձ հատկապես դուր է գալիս օտար ստեղների միջով նավարկելու հնարավորությունը, որպեսզի կարողանամ տեսնել համապատասխան գրառումները: Հուսով եմ, որ դուք ակտիվացնեք այս հնարավորությունները, և դրանք օգտակար կլինեն ձեր ամենօրյա աշխատանքում:

Իրադարձությունների մատյանները համակարգի կարգավիճակը որոշելու և սխալները հայտնաբերելու առաջին և ամենահեշտ գործիքն են: MySQL-ում կան չորս հիմնական տեղեկամատյաններ.

  • սխալների մատյան- ստանդարտ սխալների մատյան, որը հավաքվում է սերվերի շահագործման ընթացքում (ներառյալ մեկնարկը և դադարեցումը);
  • Երկուական գրանցամատյան- տվյալների բազայի փոփոխության բոլոր հրամանների մատյան, որոնք անհրաժեշտ են կրկնօրինակման և կրկնօրինակման համար;
  • Հարցումների ընդհանուր մատյան- հարցումների հիմնական մատյան;
  • Դանդաղ հարցումների մատյան- դանդաղ հարցումների մատյան:

Սխալների մատյան

Այս գրանցամատյանը պարունակում է բոլոր սխալները, որոնք տեղի են ունեցել սերվերի աշխատանքի ընթացքում, ներառյալ կարևորագույն սխալները, ինչպես նաև անջատումները, սերվերի գործարկումը և նախազգուշացումները: Այստեղից պետք է սկսել համակարգի ձախողման դեպքում: Լռելյայնորեն, բոլոր սխալները տպագրվում են վահանակում (stderr), կարող եք նաև սխալներ գրել syslog-ում (կանխադրված է Debian-ում) կամ առանձին log ֆայլում՝

Log_error=/var/log/mysql/mysql_error.log

# Սխալները կգրվեն mysql_error.log-ում

Խորհուրդ ենք տալիս միացված պահել այս գրանցամատյանը արագ սահմանումսխալներ. Եվ հասկանալու համար, թե ինչ է նշանակում այս կամ այն ​​սխալը, MySQL-ն ունի սխալի օգտակար ծրագիրը.

Shell> սխալ 13 64 ՕՀ-ի սխալի կոդը 13. Թույլտվությունը մերժված է ՕՀ-ի սխալի կոդը 64. Մեքենան ցանցում չէ

# Բացատրում է սխալի կոդերի նշանակությունը

Երկուական (նաև երկուական) մատյան

Տվյալների բազան փոխելու բոլոր հրամանները գրանցվում են երկուական մատյանում, որն օգտակար է կրկնօրինակման և վերականգնման համար:

Այն միանում է այսպես.

log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 5 max_binlog_size = 500M

# Նշում է գտնվելու վայրը, պիտանելիության ժամկետը և առավելագույն չափըֆայլ

Խնդրում ենք նկատի ունենալ, որ եթե դուք չեք պատրաստվում մեծացնել համակարգը և իրականացնել սխալների հանդուրժողականություն, ապա ավելի լավ է չմիացնել երկուական մատյանը: Այն ռեսուրսների ինտենսիվ է և նվազեցնում է համակարգի աշխատանքը:

Հարցումների մատյան

Այս գրանցամատյանը պարունակում է բոլոր ստացված SQL հարցումները, հաճախորդի կապերի մասին տեղեկությունները: Այն կարող է օգտակար լինել ինդեքսի վերլուծության և օպտիմալացման, ինչպես նաև սխալ հարցումների բացահայտման համար.

General_log_file = /var/log/mysql/mysql.log general_log = 1

# Ներառում է գրանցամատյանը և նշում է ֆայլի գտնվելու վայրը

Այն կարող է նաև միացնել/անջատել MySQL սերվերի աշխատանքի ընթացքում.

SET GLOBAL general_log = «ՄԻԱՑՎԱԾ»; SET GLOBAL general_log = «ԱՆՋԱՏՎԱԾ»;

# Դիմելու համար պետք չէ վերագործարկել սերվերը

Դանդաղ հարցումների մատյան

Մատյանն օգտակար է դանդաղ, այսինքն՝ անարդյունավետ հարցումները բացահայտելու համար։ Կարդացեք ավելին այս հոդվածում:

Դիտեք տեղեկամատյանները

Debian-ի (Ubuntu) տեղեկամատյանները դիտելու համար անհրաժեշտ է գործարկել՝

# Սխալների մատյան պոչ -f /var/log/syslog #Հարցման մատյան պոչ -f /var/log/mysql/mysql.log # Դանդաղ հարցումների մատյան tail -f /var/log/mysql/mysql-slow.log

# Եթե տեղեկամատյանները առանձին նշված չեն, դրանք գտնվում են /var/lib/mysql-ում

Մատյանների ռոտացիա

Մի մոռացեք սեղմել (արխիվացնել, պտտել) գրանցամատյանների ֆայլերը, որպեսզի դրանք ավելի քիչ տեղ գրավեն սերվերում: Դա անելու համար օգտագործեք կոմունալը լոգրոտացնելխմբագրելով կազմաձևման ֆայլը /etc/logrotate.d/mysql-server:

# - Ես ամեն ինչ դրեցի մեկ բլոկի մեջ և ավելացրեցի համօգտագործվող սկրիպտներ, որպեսզի mysql-ը միայն մեկ անգամ ստանա # flush-logs"d։ # - Սխալների մատյանը հնացած է, հաղորդագրություններն այժմ գնում են syslog:/var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log( օրական պտտել 7 missingok ստեղծել 640 mysql adm սեղմել sharedscripts postrotate test -x /usr/bin/mysqladmin || ելք 0 # Եթե դա չհաջողվի, ստուգեք debian.conf-ը: MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" if [ -z "`$MYADMIN ping 2>/dev/null`" ]; ապա # Իսկապե՞ս չկա mysqld կամ ավելի շուտ բացակայող debian-sys-maint օգտվող: # Եթե դա տեղի է ունենում և սխալ չէ, խնդրում ենք հայտնել սխալի մասին: #եթե ps cax | grep -q mysqld; ապաեթե killall -q -s0 -umysql mysqld; ապա դուրս եկեք 1 ֆայլից, այլ $MYADMIN flush-logs fi endscript )

# Սեղմում և արխիվացնում է անհրաժեշտ տեղեկամատյանները, մաքրում ֆայլերը

DDL մատյան

MySQL-ը նաև պահում է տվյալների նկարագրության լեզվի մատյան: Այն հավաքում է տվյալներ այնպիսի գործողություններից, ինչպիսիք են DROP_TABLE և ALTER_TABLE: Գրանցամատյանը օգտագործվում է նման գործողությունների ընթացքում տեղի ունեցած ձախողումներից վերականգնելու համար: DDL Log-ը երկուական ֆայլ է, որը նախատեսված չէ օգտագործողի կողմից կարդալու համար, այնպես որ մի փոփոխեք կամ ջնջեք այն:

Ամենակարևորը

Միշտ միացրեք սխալների գրանցումը, օգտագործեք հարցումների մատյանը՝ հավելվածի կապը տվյալների բազայի հետ ստուգելու, հարցումները ստուգելու և աշխատելու համար: Դանդաղ հարցումների մատյանը օգտակար է MySQL-ի կատարողականը օպտիմալացնելու համար:

Հարց. ms sql հարցումների պատմություն


Ինչպե՞ս դիտել հարցումների պատմությունը (ջնջել, թարմացնել...):

Պատասխան.
profiler-ը ամենադանդաղ աուդիտն է, որը կարելի է պատկերացնել: Ընդլայնված իրադարձությունները կարող են հարմարեցվել ձեր կարիքներին, և այն կարող է նաև վերբեռնվել և այլն, բայց այս տարբերակներից որևէ մեկը պահանջում է ռեսուրսներ:

Հարց. Հարցման կատարման պատմություն


Հուշել, արդյոք հնարավո՞ր է MS SQL-ում ինչ-որ տեղ փնտրել, թե ով և ինչ հարցումներ է կատարվել կոնկրետ DB-ում:

Պատասխան. iluxa1810, այս տեղեկատվությունը հասանելի է միայն մասամբ։ Փորձեք այնպիսի հարցում, ինչպիսին է՝

T-SQL կոդը
1 2 3 4 SELECT deqs.last_execution_time AS [ Time ] , dest.TEXT AS [ Query] FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text (deqs.sql_handle ) AS deqsction.

Հարցումների ամբողջական պատմության համար դուք պետք է գրանցվեք կամ օգտագործեք կոմունալ ծառայություններ, ինչպիսիք են SQL Profiler-ը:

Հարց. Sql հարցում՝ տվյալների բազայում նախկին արժեքները վերադարձնելու համար


Բարեւ բոլորին!

Խնդրում եմ, կարո՞ղ եք ինձ ասել, թե ինչպես վերադարձնել նախավերջին պատվերի կարգավիճակները տվյալների բազայում որոշակի ամսաթվից սկսած բոլոր պատվերներում:

Միգուցե ինչ-որ sql հարցում կա կամ գուցե ինչ-որ սցենար... Ես շատ շնորհակալ կլինեմ:

Ծրագրավորողը մի փոքր չտեսավ իմ պահեստի հետ ինտեգրվելիս, և բոլոր պատվերները փոխեցին իրենց կարգավիճակը այն մեկին, որը գտնվում էր ինտեգրման մոդուլի կարգավորումներում և չգիտի, թե ինչպես վերադարձնել այն:

Նրանք անմիջապես չնկատեցին, և շատ ուշ էր վերականգնել տվյալների բազայի հին պատճենը: Խանութում արդեն կան նոր պատվերներ։

Պատասխան. Պոետիկ,
InnoDB-ն կարող է պահել հարցումների պատմությունը:

բաշ
1 ~/.mysql_history

Գլորեք վերջին կրկնօրինակը և կրկնեք հրամանները
Դե, ընդհանուր առմամբ, յուրաքանչյուր ինտեգրումից առաջ դուք պետք է կրկնօրինակեք, և նույնիսկ ավելի լավ, փորձարկեք այն թեստային սերվերի վրա

Հարց. sql հարցում մի քանի աղյուսակներից որոնելիս


Բարի օր. Խնդրում եմ, օգնեք ինձ հասկանալ՝ կարո՞ղ եմ դա անել, թե՞ պետք է վերափոխել տվյալների բազան, թե՞ այդպիսի որոնում հնարավոր չէ իրականացնել:
Ես գրում եմ delphi rad xe10-ով։
Ես գրում եմ աշխատողի մասին տեղեկատվությունը մեկ տողով Workers աղյուսակում, մեկ տող հագուստի չափսերով և նրան տրված պատմությունը (շատ տողեր, և տարբերությունը միայն ID_rab-ում է):

Ես ուզում եմ որոնում անել
որպեսզի ազգանունով կամ ներդիրի համարով պահանջելիս ինձ տրվի հետևյալը՝
Աշխատողի մասին dbgrid1-ի առաջին ներդիրից,
դրա չափերը dbgrid2-ի երկրորդ աղյուսակից
և այս աշխատողի հետ կապված պատմությունը աղյուսակ 3-ից (կարող են լինել շատ տողեր, որոնք տարբերվում են միայն ID_rab-ով) dbgrid3-ում

Առաջին աղյուսակում.

երկրորդում՝

SQL
1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE Size ( ID_razmOdejdi INT NOT NULL IDENTITY (1 , 1 ) , հագուստ VARCHAR (4 ) , ID_rab INT , PRIMARY KEY (ID_razmOdejdi) , ԱՐՏԱՔԻՆ ԲԱՆԱԼԻ (ID_rab) Հղումներ աշխատողներ,)

երրորդում՝

SQL
1 2 3 4 5 6 7 8 9 10 11 ;

Կատարե՞լ միանգամից 3 ADOQuery տարբեր հարցումներով:
Ես չգիտեմ, թե ինչպես դա անել, որ այն ելքի տեղեկատվություն մեկ այլ աղյուսակից, որը պատկանում է առաջինին
Եթե ​​դա հնարավոր լիներ անել. ես մուտքագրեցի մարդուն որոնման մեջ և գտա նրան և իր ID_rab-ով կգտնեի տեղեկատվություն այլ աղյուսակներում և միևնույն ժամանակ կցուցադրեի այն 3 տարբեր dbgrid-ներում:

Պատասխան.

Հաղորդագրություն Ռոգզար

Եվ եթե դուք ամբողջությամբ ջնջեք աշխատակցի մասին բոլոր տեղեկությունները, նրա չափը, պատմությունը և ենթադրվում է, որ դա կարելի է անել մեկ հարցման միջոցով:

Եթե ​​դուք միացնեք կասկադային ջնջումը Employees աղյուսակում, ապա դրանում տող ջնջելը կջնջի տվյալները ենթակա աղյուսակներից: Հակառակ դեպքում, դուք ստիպված կլինեք կատարել մի քանի DELETE հարցումներ:

Ավելացվել է 14 ժամ 31 րոպե հետո
Նման կոդը խոցելի է անունների հարձակումների համար: Դուք պետք է օգտագործեք հարցումներ պարամետրերով:

Հարց. Մեկ խնդրանք, իսկապե՞ս:


Բարի օր, պարոնայք:
Խնդրում եմ, ասեք ինձ, թե ինչպես լուծել հետևյալ խնդիրը...
Կան երեք աղյուսակներ՝ ապրանքներ (դրանք իսկապես քիչ են, ինչ-որ տեղ մոտ 60-80 հատ), վաճառքի պատմություն և մնացորդներ ...

AT պարզեցվածկառուցվածքը հետևյալն է.
իրեր:
id
Անուն

պատվերի_պատմություն:
id
s_ամսաթիվ
good_id
գինը

հավասարակշռություն:
id
s_ամսաթիվ
order_id
հաշվել

Բոլոր երեք աղյուսակները կապված են ID-ով (goods.id - order_history.good_id, order_history.id - balance.order_id):
Խնդիրն է ստանալ բոլոր ապրանքների ընդհանուր մնացորդը ցանկացած կամայական ամսաթվի համար: Այսինքն՝ յուրաքանչյուր ապրանքի համար ես պետք է մնացորդից և վաճառքի պատմությունից ստանամ ամենամոտ ամսաթվի ռեկորդը (մնացորդից, համապատասխանաբար, քանակից, վաճառքի պատմությունից՝ գինը):

Հասկանալի է, որ դուք կարող եք պտտել բոլոր ապրանքները ID-ով և կատարել SQL հարցում յուրաքանչյուր կրկնության մեջ, բայց ինչ-որ կերպ դա ... ինձ դուր չի գալիս այս տարբերակը: :) Առաջադրանքը նրբագեղ լուծելու հնարավորություն կա՞՝ մեկ խնդրանք։

Ես շնորհակալ կլինեմ ցանկացած գաղափարի համար:

Պատասխան.Ես հակացուցումներ չեմ տեսնում։ Եթե ​​կառուցվածքը կարգի բերեք.

Հիմարություն։
Տվյալների բազայում որոշ ավելորդություն է մտցվել
Նա չափազանց շատ է քեզ համար: Ավելին, դա պոտենցիալ հակասական է։ Ես չեմ տեսնում որևէ սահմանափակում, որը կարող է ինձ խանգարել հաշվեկշռում նոր գրառում կատարել, որպեսզի քանակական այս և նախորդ գրառումների միջև տարբերությունը չհամապատասխանի նույն ժամանակահատվածի պատվերի_պատմության ընդհանուր քանակին:

Հարց. Ենթահղում, օգնեք միավորել մի քանի պարզ


Բարի օր! Ես շատ շնորհակալ կլինեմ օգնության համար)) Ես երկար ժամանակ է, ինչ խելքներս խառնում եմ։
Մի քիչ պատմություն. Նրանց հետ կապված URL-ով հարցումների մի խումբ կա, նպատակը URL-ների որոշ ցանկի համար համընկնող հարցումներ թողարկելն է, որը նույնպես որոշվում է հարցումով:

Եվ այսպես, կան մի քանի հարցումներ, որոնք կատարվում են հերթականությամբ.
$sql2 = Ընտրեք url-ը ցուցակից WHERE `group` = "1" AND `proekt`= "1" GROUP BY url ORDER BY COUNT(*) DESC LIMIT 3 - սքրինշոթ
Ես ընտրում եմ URL-ների ցանկը 3 կտորի չափով, այնուհետև դրանք հավաքում եմ հայտի համար

$return=զանգված();
$maxcount=mysql_query ($sql2);
while ($url = mysql_fetch_array ($maxcount)) (
$return = $url;
}
foreach ($return as $url1) ( //հավաքել url-ների շարանը Muscle-ի համար զանգվածից
if ($frag2==0) ( $urls = "`url`=".""".$url1."""; $frag2=1; ) else $urls .= " OR `url` = "". $url1.""";
}

Այս դեպքում $urls = `url` = "http://www.MosDance.com/" ԿԱՄ `url`="http://raisky.com/" և այլն:

Ես ցուցադրում եմ այս url-ների հետ կապված ստեղների ցանկը
ընտրել «բանալին» -ից (SELECT `key` , COUNT(*) AS total FROM ցուցակից WHERE `group` = "1" AND `proekt`= "1" AND (."$urls.") GROUP BY "Block" ORDER «ԸՆԴԱՄԵՆԸ» DESC-ով) որպես t2 ՈՐՏԵՂ t2.total >=3

Իրականում հիմնական հարցն այն է, թե ինչպես նվազեցնել այս բիզնեսը: Ինչպե՞ս ճիշտ հավաքել url-ը, որպեսզի կարողանաս ազատվել php crutch script-ից, որը հավաքում է url-ը ճիշտ հերթականությամբ և անել այդ ամենը, օրինակ, տվյալների բազայի մեկ հարցումով: ընդհանրապես, ինչպե՞ս ստանալ վերջնական արդյունք մեկ խնդրանքից ավելի խելացի, քան իմ հենակները:

Պատասխան.

Լավ օր!
Երբեք մի գրեք COUNT(*): COUNT(`id`) ավելի լավ կլիներ:
Նաև մի գրեք RAND(*): Ավելի լավ է գրել, իհարկե, այլ կերպ՝ դրանցում կան մեկնաբանություններ, գործառույթներ և նման դեպք։
Տվյալների բազայից գրառումներ ընտրելու վերը նշված բոլոր մեթոդները խիստ բեռնված են mysql սերվեր. Եթե, իհարկե, տվյալների բազայում չունեք 30 հազար գրառում, դա ձեզ համար այդքան ցավալի չի լինի։

Հարցման վերաբերյալ.
Փորեք դեպի ՆԵՐՔԻՆ ՄԻԱՑՈՒՄ: Կամ գցեք ինձ ձեր սեղանի աղբը, ես կօգնեմ ձեզ, եթե առաջադրանքը ավելի մանրամասն ասեք, քանի որ այն, ինչ ես կարդացել եմ, շատ ծույլ է խորանալ ամբողջ պանրի բորի մեջ =)

-----
- Ծրագրավորման դասեր այստեղ: Հետաքրքիր չիպսեր նույնպես կան =)

Հարց. Հարցում երկու աղյուսակից մի քանի չափանիշներով


Բարի երեկո!

Խնդրում եմ օգնեք ինձ հետևյալ հարցումով.
1. Գործարքների աղյուսակ կա՝ դաշտերով՝ արժույթի անվանումը, ամսաթիվը, փոխարժեքի տեսակը և այլ դաշտեր
2. Տարադրամի փոխարժեքների պատմությունը դաշտերում կա աղյուսակ՝ արժույթի անվանումը, ամսաթիվը, փոխարժեքի տեսակը, փոխարժեքը:

Հարցումը պետք է կազմվի առաջին աղյուսակի բոլոր դաշտերի և գրառումների հիման վրա, իսկ երկրորդ աղյուսակի փոխարժեքը: Ավելին, պետք է համապատասխանեն ընտրության բոլոր 3 չափանիշներին՝ արժույթի անվանումը, ամսաթիվը և փոխարժեքի տեսակը:

Շնորհակալ եմ նախապես!

Պատասխան.
Հարցման կոնստրուկտորում ձեզ ավելի հարմարավետ կզգաք:

Ես հասկացա, թե ինչպես կարելի է ներքին ուրախություն ստեղծել SQL-ի միջոցով, առաջին հայացքից դա պարզ է: Բայց մի հարց կա.
1. Գործարքների աղյուսակում կա «Գործարքի տեսակ» դաշտը
2. Հարցումը, որը ես անում եմ, առաջին հերթին դուրս է բերվում գործարքների աղյուսակի «Փոխարժեքի տեսակը» աղյուսակի յուրաքանչյուր գրառման համար «Գործարքների տեսակները» աղյուսակից:
3. Հարցումը աղյուսակից հանվում է դրույքաչափերով՝ համաձայն 2-րդ կետում ստացված «Դասընթացի տեսակ» չափանիշի:

Այսինքն՝ սկզբում 2 աղյուսակները (գործարքները և գործարքների տեսակները) միավորվում են, իսկ հետո՝ հաշվին. ընդհանուր տեղեկությունԴրանց ավելացվում են «Արժույթի փոխարժեքներ» աղյուսակի տվյալները:

Հարց. Պարզեք, թե աղյուսակից որ գրառման վրա է հարցումը ձախողվում


Ես հանդիպեցի մի իրավիճակի, երբ փաստերի աղյուսակի հարցումը սխալ է վերադարձնում, բայց ես չեմ կարող որսալ գրացուցակի այն գրառումները, որոնք հանգեցնում են սխալի (հարցը ամսաթվերում է)
Հարցումն ինքնին վերադարձնում է բոլոր գրառումները փաստերի աղյուսակից, գումարած որոնումից հաշվարկված դաշտը: Եթե ​​որոնումը ճիշտ լրացված լիներ, ենթահարկը կվերադարձներ մեկ արժեք փաստերի աղյուսակի գրանցման համար: Բայց իրականում սխալի գրառումների գրացուցակում, որը ես չեմ կարող բռնել:
Միգուցե դուք ինչ-որ կերպ կարող եք տեսնել, թե փաստերի աղյուսակի որ գրառման վրա է տեղի ունենում սխալը:

Պատասխան.Զվարճալի չէ. Վաղուց էր (բառացի).
Դե, հենց զառանցանքի դետեկտորը աշխատեց, նա անմիջապես վազեց... Ի՞նչ կա:
Նախքան հերոսաբար սուպեր-խնդրանքներ գրելը (բոլոր առիթների համար), դուք պետք է միացնեք ձեր ուղեղը, լավ, գոնե մի քանի րոպե ...
Դե, անձամբ քո «տառապանքը» լրիվ բավական էր մի խելահեղ խնդրանքի համար, որի տեղը աղբաման է։
Եվ դուք «թռչել եք հողաթափեր» միայն դրա իմաստաբանության և շարահյուսության համար ...
Լավ միտք!
Եվ երբ կարող եք, հանեք այն դարակից (լավ, համենայն դեպս!) և «սովորեք, սովորեք և սովորեք» (գ): Կա հաստատ ա կիսվելովԽՄԲԵԼ ԵՎ ՈՒՆԵՑՈՂ...

Հարց. ծրագրեր պրոֆիլավորման հարցումների համար


Ողջույններ:

Ասա ինձ, թե ով է (ծրագրեր, IDE և այլն) օգտագործում հարցումները վերլուծելու համար, մասնավորապես, նրանք հետաքրքրված են հարցումների վերլուծության գործիքներով՝ դրանք օպտիմալացնելու համար։ Որտեղ կարող եք տեսնել հարցման պլանը՝ հարցումների ինդեքսներ, Ամբողջական սկանավորում և այլն:

11) | Ամսաթիվ | Ամսաթիվ | վարորդի_անունը | ՎԱՐՃԱՐ(100) | տոկոս | INT (11) | գումար_ստացված_հաճախորդից | ՏԱՍՆԱԿԱՆԱԿԱՆ (9 , 2 ) | գումարի_սակագինը_վարորդի համար | ՏԱՍՆԱԿԱՆԱԿԱՆ (9 , 2 ) | գումարի_վճարված | ՏԱՍՆԱԿԱՆԱԿԱՆ (9 , 2 ) | վճարովի_կարգավիճակ | tinyint(1) | տոկոս_ընկերություն | INT (11)

«Paid_status» դաշտը պահում է վճարման կարգավիճակը: Անհրաժեշտ է այնպիսի հարցում, ինչպիսին է.

ստանալ բոլոր տվյալները: Այն պետք է լինի այսպես, եթե «paid_status = 1», ապա «summa_for_payed» դաշտում գտնվող թվի փոխարեն միշտ ստացեք «0»:

Եթե ​​հարցման մեջ ավելացնեմ «եւ վճարովի_կարգավիճակը ոչ «1»-ի նման», կստացվի, որ այս տողի ելքը ընդհանրապես չի ստացվի, բայց պետք է ամեն ինչ ստանալ, միայն թե «summa_for_payed» դաշտն արդեն փոխված է, կախված «payed_status» վիճակից

Ավելացվել է 25 րոպե հետո
Ավելացնեմ, անհրաժեշտ է նաև, որ sum(summa_for_payed) հրամանով հարցումի ժամանակ որոշակի ամսաթվի ստացվի գումարը՝ նկատի ունենալով «paid_status» դաշտի արժեքը, ավելի ճիշտ՝ «payed_status = 1»: , ապա «summa_for_payed» դաշտերը դիտարկվել են «0» չափով, եթե «paid_status = 1»

Պատասխան.Այո, ես այդպես մտածեցի, բայց խնդիրն այն է, որ եթե ես զրոյացնեմ գիծը, և եթե սխալ օգտագործող է ընտրվել, ապա ես չեմ կարողանա վերադարձնել այն, քանի որ նրա հին պարտքը ջնջվել է, ուստի ես պարզապես մտածել այս ցուցանիշի մասին և որոշել վճարումը և անհրաժեշտության դեպքում նորից վերադարձնել նրան՝ տեսնելով նրա պարտքի չափը։ Դե, ընդհանրապես, լավ կլիներ, որ պատմությունը տեսներ իր պարտքը, որ փակել էր։

Ավելացվել է 34 րոպե հետո
Հարգելի գուրուներ.
Ես գտա, թե ինչ կարելի է անել

SQL
1 SELECT SUM (IF (`payed_status` = 1 , 0 , `summa_for_payed` ) ) FROM mytable-ից

Ես մի քանի խնդրանք եմ արել, կարծես թե այն է, ինչ ինձ պետք է, բայց կարո՞ղ եք ասել, որոգայթներ չկան նման խնդրանքի մեջ, սա այն է, ինչ ինձ պետք է: Պե՞տք է դա անեմ, թե՞ այլ լուծումներ փնտրեմ: Սա այն վայրն է, որտեղ ձգանները գալիս են մտքում: միգուցե նրանց հետ? Ի՞նչ խորհուրդ կտաք։ Մտածեցի նաև արժեքները փոխելու մասին, եթե 0-ն ապա վճարված է, եթե 1-ը, ապա ոչ, և հետո թիվը ցուցիչով բազմապատկելու ընտրության մեջ, իսկ եթե այն զրո է, ապա ես պարզապես ստանում եմ զրո: եթե մեկը, ապա ես ստանում եմ համարը ինքնին: պարզապես հավելյալ հաշվարկներ... Ձեր կարծիքը?