Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
SQL½âÎöÔÚÃÀÍŵãÆÀÖеÄÓ¦ÓÃ
 
  3158  次浏览      30
 2018-11-7
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn,±¾ÎÄÖ÷ÒªÕë¶ÔÃÀÍŵãÆÀµÄÒµÎñÖÐ×îºËÐĵļ¼ÊõÖ®Ò»SQL½øÐнâÎö£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£

Êý¾Ý¿â×÷ΪºËÐĵĻù´¡×é¼þ£¬ÊÇÐèÒªÖØµã±£»¤µÄ¶ÔÏó¡£ÈκÎÒ»¸öÏßÉϵIJ»É÷²Ù×÷£¬¶¼ÓпÉÄܸøÊý¾Ý¿â´øÀ´ÑÏÖØµÄ¹ÊÕÏ£¬´Ó¶ø¸øÒµÎñÔì³É¾Þ´óµÄËðʧ¡£ÎªÁ˱ÜÃâÕâÖÖËðʧ£¬Ò»°ã»áÔÚ¹ÜÀíÉÏϹ¦·ò¡£±ÈÈçΪÑз¢ÈËÔ±ÖÆ¶¨Êý¾Ý¿â¿ª·¢¹æ·¶£»ÐÂÉÏÏßµÄSQL£¬ÐèÒªDBA½øÐÐÉóºË£»Î¬»¤²Ù×÷ÐèÒª¾­¹ýÁìµ¼ÉóÅúµÈµÈ¡£¶øÇÒÈç¹ûÏ£ÍûÄܹ»ÓÐЧµØ¹ÜÀíÕâЩ´ëÊ©£¬ÐèÒªÓÐЧµÄÊý¾Ý¿âÅàѵ£¬»¹ÐèÒªDBAϸÐĵĽøÐÐSQLÉóºË¡£ºÜ¶àÖÐСÐÍ´´Òµ¹«Ë¾£¬¿ÉÒÔͨ¹ýÉ趨¹æ·¶¡¢½øÐÐÅàѵ¡¢ÍêÉÆÉóºËÁ÷³ÌÀ´¹ÜÀíÊý¾Ý¿â¡£

Ëæ×ÅÃÀÍŵãÆÀµÄÒµÎñ²»¶Ï·¢Õ¹ºÍ׳´ó£¬ÉÏÊö´ëÊ©µÄʵʩ³É±¾Ô½À´Ô½¸ß¡£ÈçºÎ¸ü¶àµÄÒÀÀµ¼¼ÊõÊֶΣ¬À´Ìá¸ßЧÂÊ£¬Ô½À´Ô½Êܵ½ÖØÊÓ¡£Òµ½çÒÑÓв»ÉÙ»ùÓÚMySQLÔ´Â뿪·¢µÄSQLÉóºË¡¢ÓÅ»¯½¨ÒéµÈ¹¤¾ß£¬¼«´óµÄ¼õÇáÁËDBAµÄSQLÉóºË¸ºµ£¡£ÄÇôÎÒÃÇÄÜ·ñ¼ÌÐøÀ©Õ¹MySQLµÄÔ´Â룬À´¸¨ÖúDBAºÍÑз¢ÈËÔ±À´½øÒ»²½Ìá¸ßЧÂÊÄØ£¿±ÈÈ磬¸üÈ«ÃæµÄSQLÓÅ»¯¹¦ÄÜ£»¶àά¶ÈµÄÂý²éѯ·ÖÎö£»¸¨Öú¹ÊÕÏ·ÖÎöµÈ¡£ÒªÊµÏÖÉÏÊö¹¦ÄÜ£¬ÆäÖÐ×îºËÐĵļ¼ÊõÖ®Ò»¾ÍÊÇSQL½âÎö¡£

ÏÖ×´Ó볡¾°

SQL½âÎöÊÇÒ»ÏÔӵļ¼Êõ£¬Ò»°ã¶¼ÊÇÓÉÊý¾Ý¿â³§ÉÌÀ´ÕÆÎÕ£¬µ±È»Ò²Óй«Ë¾×¨ÃÅÌṩSQL½âÎöµÄAPI¡£ÓÉÓÚÕ⼸ÄêMySQLÊý¾Ý¿âÖмä¼þµÄÐËÆð£¬ÐèÒªÖ§³Ö¶Áд·ÖÀë¡¢·Ö¿â·Ö±íµÈ¹¦ÄÜ£¬¾Í±ØÐë´ÓSQLÖгé³ö±íÃû¡¢¿âÃûÒÔ¼°Ïà¹Ø×ֶεÄÖµ¡£Òò´ËÏñJavaÓïÑÔ±àдµÄDruid£¬CÓïÑÔ±àдµÄMaxScale£¬GoÓïÑÔ±àдµÄKingshardµÈ£¬¶¼»á¶ÔSQL½øÐв¿·Ö½âÎö¡£¶øÕæÕý°ÑSQL½âÎö¼¼ÊõÓÃÓÚÊý¾Ý¿âά»¤µÄ²úÆ·½ÏÉÙ£¬Ö÷ÒªÓÐÈçϼ¸¸ö:

1.ÃÀÍŵãÆÀ¿ªÔ´µÄSQLAdvisor¡£Ëü»ùÓÚMySQLÔ­Éú̬´Ê·¨½âÎö£¬½áºÏ·ÖÎöSQLÖеÄwhereÌõ¼þ¡¢¾ÛºÏÌõ¼þ¡¢¶à±íJoin¹ØÏµ¸ø³öË÷ÒýÓÅ»¯½¨Òé¡£

2.È¥ÄĶù¿ªÔ´µÄInception¡£²àÖØÓÚ¸ù¾ÝÄÚÖõĹæÔò£¬¶ÔSQL½øÐÐÉóºË¡£

3.°¢ÀïµÄCloud DBA¡£¸ù¾Ý¹Ù·½Îĵµ½éÉÜ£¬ÆäÒ²ÊÇÌṩSQLÓÅ»¯½¨ÒéºÍ¸Äд¡£

ÉÏÊö²úÆ·¶¼Óзdz£ºÏÊʵÄÓ¦Óó¡¾°£¬ÔÚÒµ½çÒ²±»¹ã·ºÊ¹Óᣵ«ÊÇSQL½âÎöµÄÓ¦Ó󡾰ԶԶûÓб»³ä·Ö·¢¾ò£¬±ÈÈ磺

1.»ùÓÚ±íÁ£¶ÈµÄÂý²éѯ±¨±í¡£±ÈÈ磬һ¸öSchemaÖаüº¬ÁËÊôÓÚ²»Í¬ÒµÎñÏßµÄÊý¾Ý±í£¬ÄÇô´ÓÒµÎñÏߵĽǶÈÀ´Ëµ£¬ÆäÏ£ÍûÌṩ±íÁ£¶ÈµÄÂý²éѯ±¨±í¡£

2.Éú³ÉSQLÌØÕ÷¡£½«SQLÓï¾äÖеÄÖµÌæ»»³ÉÎʺţ¬·½±ãSQL¹éÀà¡£ËäÈ»¿ÉÒÔʹÓÃÕýÔò±í´ïʽʵÏÖÏàͬµÄ¹¦ÄÜ£¬µ«ÊÇÆäBug½Ï¶à£¬¿ÉÒԲο¼pt-query-digest¡£±ÈÈçpt-query-digestÖУ¬»á°ÑÓöµ½µÄÊý×Ö¶¼Ìæ»»³É¡°?¡±£¬µ¼ÖÂÎÞ·¨Çø±ð²»Í¬Êý×Öºó׺µÄ±í¡£

3.¸ßΣ²Ù×÷È·ÈÏÓë¹æ±Ü¡£±ÈÈ磬DBA²»Ð¡ÐÄDropÊý¾Ý±í£¬¶ø´ËÀà²Ù×÷£¬Ä¿Ç°»¹ÎÞÓÐЧµÄ¹¤¾ß½øÐлعö£¬ÓÈÆäÊÇ´ó±í£¬Æäºó¹û½«ÊÇÔÖÄÑÐԵġ£

4.SQLºÏ·¨ÐÔÅжϡ£ÎªÁ˰²È«¡¢É󼯡¢¿ØÖƵȷ½ÃæµÄÔ­Òò£¬ÃÀÍŵãÆÀ²»»áÈÃÑз¢ÈËÔ±Ö±½Ó²Ù×÷Êý¾Ý¿â£¬¶øÊÇÌṩRDS·þÎñ¡£ÓÈÆäÊǶÔÓÚÊý¾Ý±ä¸ü£¬ÐèÒªÑз¢ÈËÔ±µÄÉϼ¶Ö÷¹Ü½øÐÐÒµÎñÉϵÄÉóÅú¡£Èç¹ûÑз¢ÈËÔ±£¬Ð´ÁËÒ»ÌõÓï·¨´íÎóµÄSQL£¬¶øRDSÎÞ·¨ÅжϸÃSQLÊÇ·ñºÏ·¨£¬¾Í»áÔì³É²»±ØÒªµÄ¹µÍ¨³É±¾¡£

Òò´ËΪÁËÈÃËùÓÐÓÐÐèÒªµÄÒµÎñ¶¼ÄÜ·½±ãµÄʹÓÃSQL½âÎö¹¦ÄÜ£¬ÎÒÃÇÈÏΪӦ¸Ã¾ßÓÐÈçÏÂÌØÐÔ¡£

1.Ö±½Ó±©Â¶SQL½âÎö½Ó¿Ú£¬Ê¹Óþ¡Á¿¼òµ¥¡£±ÈÈ磬ÊäÈëSQL£¬ÔòÊä³ö±íÃû¡¢ÌØÕ÷ºÍÓÅ»¯½¨Òé¡£

2.½Ó¿ÚµÄʹÓò»ÒÀÀµÓÚÌØ¶¨µÄÓïÑÔ£¬·ñÔòά»¤ºÍʹÓõĴú¼ÛÌ«¸ß¡£±ÈÈ磬ÒÔHTTPµÈ·½Ê½Ìṩ·þÎñ¡£

ǧÀïÖ®ÐУ¬Ê¼ÓÚ×ãÏ£¬ÏÂÃæÎÒÏȽéÉÜÏÂSQLµÄ½âÎöÔ­Àí¡£

Ô­Àí

SQL½âÎöÓëÓÅ»¯ÊÇÊôÓÚ±àÒëÆ÷·¶³ë£¬ºÍCµÈÆäËûÓïÑԵĽâÎöûÓб¾ÖʵÄÇø±ð¡£ÆäÖзÖΪ£¬´Ê·¨·ÖÎö¡¢Óï·¨ºÍÓïÒå·ÖÎö¡¢ÓÅ»¯¡¢Ö´ÐдúÂëÉú³É¡£¶ÔÓ¦µ½MySQLµÄ²¿·Ö£¬ÈçÏÂͼ

ͼ1 SQL½âÎöÔ­Àí

´Ê·¨·ÖÎö

SQL½âÎöÓÉ´Ê·¨·ÖÎöºÍÓï·¨/ÓïÒå·ÖÎöÁ½¸ö²¿·Ö×é³É¡£´Ê·¨·ÖÎöÖ÷ÒªÊǰÑÊäÈëת»¯³ÉÒ»¸ö¸öToken¡£ÆäÖÐTokenÖаüº¬Keyword£¨Ò²³Æsymbol£©ºÍ·ÇKeyword¡£ÀýÈ磬SQLÓï¾ä select username from userinfo£¬ÔÚ·ÖÎöÖ®ºó£¬»áµÃµ½4¸öToken£¬ÆäÖÐÓÐ2¸öKeyword£¬·Ö±ðΪselectºÍfrom£º

ͨ³£Çé¿öÏ£¬´Ê·¨·ÖÎö¿ÉÒÔʹÓÃFlexÀ´Éú³É£¬µ«ÊÇMySQL²¢Î´Ê¹Óøù¤¾ß£¬¶øÊÇÊÖдÁË´Ê·¨·ÖÎö²¿·Ö£¨¾Ý˵ÊÇΪÁËЧÂʺÍÁé»îÐÔ£¬²Î¿¼´ËÎÄ£©¡£¾ßÌå´úÂëÔÚsql/lex.hºÍsql/sql_lex.ccÎļþÖС£

MySQLÖеÄKeyword¶¨ÒåÔÚsql/lex.hÖУ¬ÈçÏÂΪ²¿·ÖKeyword

{ "&&", SYM(AND_AND_SYM)},
{ "<", SYM(LT)},
{ "<=", SYM(LE)},
{ "<>", SYM(NE)},
{ "!=", SYM(NE)},
{ "=", SYM(EQ)},
{ ">", SYM(GT_SYM)},
{ ">=", SYM(GE)},
{ "<<", SYM(SHIFT_LEFT)},
{ ">>", SYM(SHIFT_RIGHT)},
{ "<=>", SYM(EQUAL_SYM)},
{ "ACCESSIBLE", SYM(ACCESSIBLE_SYM)},
{ "ACTION", SYM(ACTION)},
{ "ADD", SYM(ADD)},
{ "AFTER", SYM(AFTER_SYM)},
{ "AGAINST", SYM(AGAINST)},
{ "AGGREGATE", SYM(AGGREGATE_SYM)},
{ "ALL", SYM(ALL)},

´Ê·¨·ÖÎöµÄºËÐÄ´úÂëÔÚsql/sql_lex.cÎļþÖеģ¬MySQLLex¡úlex_one_Token£¬ÓÐÐËȤµÄͬѧ¿ÉÒÔÏÂÔØÔ´ÂëÑо¿¡£

Óï·¨·ÖÎö

Óï·¨·ÖÎö¾ÍÊÇÉú³ÉÓï·¨Ê÷µÄ¹ý³Ì¡£ÕâÊÇÕû¸ö½âÎö¹ý³ÌÖÐ×»ª£¬×ÔӵIJ¿·Ö£¬²»¹ýÕⲿ·ÖMySQLʹÓÃÁËBisonÀ´Íê³É¡£¼´Ê¹Èç´Ë£¬ÈçºÎÉè¼ÆºÏÊʵÄÊý¾Ý½á¹¹ÒÔ¼°Ïà¹ØËã·¨£¬È¥´æ´¢ºÍ±éÀúËùÓеÄÐÅÏ¢£¬Ò²ÊÇÖµµÃÔÚÕâÀïÑо¿µÄ¡£

a£©Óï·¨·ÖÎöÊ÷

SQLÓï¾ä£º

select username, ismale from userinfo where age > 20 and level > 5 and 1 = 1

»áÉú³ÉÈçÏÂÓï·¨Ê÷¡£

ͼ2 Óï·¨Ê÷

¶ÔÓÚδ½Ó´¥¹ý±àÒëÆ÷ʵÏÖµÄͬѧ£¬¿Ï¶¨»áºÃÆæÈçºÎ²ÅÄÜÉú³ÉÕâÑùµÄÓï·¨Ê÷¡£Æä±³ºóµÄÔ­Àí¶¼ÊDZàÒëÆ÷µÄ·¶³ë£¬¿ÉÒԲο¼Î¬»ù°Ù¿ÆµÄһƪÎÄÕ£¬ÒÔ¼°¸ÃÁ´½ÓÖеIJο¼Êé¼®¡£±¾ÈËÒ²ÊÇÔÚѧϰMySQLÔ´Âë¹ý³ÌÖУ¬ÔĶÁÁ˲¿·ÖÄÚÈÝ¡£ÓÉÓÚ±àÒëÆ÷Éæ¼°µÄÄÚÈݹý¶à£¬±¾È˾«Á¦ºÍʱ¼äÓÐÏÞ£¬²»×ö¹ý¶à̽¾¿¡£´Ó¹¤³ÌµÄ½Ç¶ÈÀ´Ëµ£¬Ñ§»áÈçºÎʹÓÃBisonÈ¥¹¹½¨Óï·¨Ê÷£¬À´½â¾öʵ¼ÊÎÊÌ⣬¶ÔÎÒÃǵŤ×÷Ò²ÐíÓиü´ó°ïÖú¡£ÏÂÃæÎÒ¾ÍÒÔBisonΪ»ù´¡£¬Ì½Ìָùý³Ì¡£

b£©MySQLÓï·¨·ÖÎöÊ÷Éú³É¹ý³Ì

È«²¿µÄÔ´ÂëÔÚsql/sql_yacc.yyÖУ¬ÔÚMySQL5.6ÖÐÓÐ17KÐÐ×óÓÒ´úÂë¡£ÕâÀïÁгöÉæ¼°µ½SQL£º

select username, ismale from userinfo where age > 20 and level > 5 and 1 = 1

½âÎö¹ý³ÌµÄ²¿·Ö´úÂëժ¼³öÀ´¡£ÆäʵÓÐÁËBisonÖ®ºó£¬SQL½âÎöµÄÄѶÈҲûÓÐÏëÏóµÄÄÇô´ó¡£ÌرðÊÇÕâÀï¸ø³öÁ˽âÎöµÄÂöÂçÖ®ºó¡£

select /*selectÓï¾äÈë¿Ú*/:
select_init
{
LEX *lex= Lex;
lex->sql_command= SQLCOM_SELECT;
}
;
select_init:
SELECT_SYM /*select ¹Ø¼ü×Ö*/ select_init2
| '(' select_paren ')' union_opt
;
select_init2:
select_part2
{
LEX *lex= Lex;
SELECT_LEX * sel= lex->current_select;
if (lex->current_select->set_braces(0))
{
my_parse_error(ER(ER_SYNTAX_ERROR));
MYSQL_YYABORT;
}
if (sel->linkage == UNION_TYPE &&
sel->master_unit()->first_select()->braces)
{
my_parse_error(ER(ER_SYNTAX_ERROR));
MYSQL_YYABORT;
}
}
union_clause
;
select_part2:
{
LEX *lex= Lex;
SELECT_LEX *sel= lex->current_select;
if (sel->linkage != UNION_TYPE)
mysql_init_select(lex);
lex->current_select->parsing_place= SELECT_LIST;
}
select_options select_item_list /*½âÎöÁÐÃû*/
{
Select->parsing_place= NO_MATTER;
}
select_into select_lock_type
;
select_into:
opt_order_clause opt_limit_clause {}
| into
| select_from /*from ×Ö¾ä*/
| into select_from
| select_from into
;
select_from:
FROM join_table_list /*½âÎö±íÃû*/ where_clause /*where×Ö¾ä*/ group_clause having_clause
opt_order_clause opt_limit_clause procedure_analyse_clause
{
Select->context.table_list=
Select->context.first_name_resolution_table=
Select->table_list.first;
}
| FROM DUAL_SYM where_clause opt_limit_clause
/* oracle compatibility: oracle always requires FROM clause,
and DUAL is system table without fields.
Is "SELECT 1 FROM DUAL" any better than "SELECT 1" ?
Hmmm :) */
;
where_clause:
/* empty */ { Select->where= 0; }
| WHERE
{
Select->parsing_place= IN_WHERE;
}
expr /*¸÷ÖÖ±í´ïʽ*/
{
SELECT_LEX *select= Select;
select->where= $3;
select->parsing_place= NO_MATTER;
if ($3)
$3->top_level_item();
}
;
/* all possible expressions */
expr:
| expr and expr %prec AND_SYM
{
/* See comments in rule expr: expr or expr */
Item_cond_and *item1;
Item_cond_and *item3;
if (is_cond_and($1))
{
item1= (Item_cond_and*) $1;
if (is_cond_and($3))
{
item3= (Item_cond_and*) $3;
/*
(X1 AND X2) AND (Y1 AND Y2) ==> AND (X1, X2, Y1, Y2)
*/
item3->add_at_head(item1->argument_list());
$$ = $3;
}
else
{
/*
(X1 AND X2) AND Y ==> AND (X1, X2, Y)
*/
item1->add($3);
$$ = $1;
}
}
else if (is_cond_and($3))
{
item3= (Item_cond_and*) $3;
/*
X AND (Y1 AND Y2) ==> AND (X, Y1, Y2)
*/
item3->add_at_head($1);
$$ = $3;
}
else
{
/* X AND Y */
$$ = new (YYTHD->mem_root) Item_cond_and($1, $3);
if ($$ == NULL)
MYSQL_YYABORT;
}
}

ÔÚ´ó¼Òä¯ÀÀÉÏÊö´úÂëµÄ¹ý³Ì£¬»á·¢ÏÖBisonÖÐǶÈëÁËC++µÄ´úÂ롣ͨ¹ýC++´úÂ룬°Ñ½âÎöµ½µÄÐÅÏ¢´æ´¢µ½Ïà¹Ø¶ÔÏóÖС£ÀýÈç±íÐÅÏ¢»á´æ´¢µ½TABLE_LISTÖУ¬order_list´æ´¢order by×Ó¾äÀïµÄÐÅÏ¢£¬where×־䴿´¢ÔÚItemÖС£ÓÐÁËÕâЩÐÅÏ¢£¬ÔÙ¸¨ÖúÒÔÏàÓ¦µÄËã·¨¾Í¿ÉÒÔ¶ÔSQL½øÐиü½øÒ»²½µÄ´¦ÀíÁË¡£

c£©ºËÐÄÊý¾Ý½á¹¹¼°Æä¹ØÏµ

ÔÚSQL½âÎöÖУ¬×îºËÐĵĽṹÊÇSELECT_LEX£¬Æä¶¨ÒåÔÚsql/sql_lex.hÖС£ÏÂÃæ½öÁгöÓëÉÏÊöÀý×ÓÏà¹ØµÄ²¿·Ö¡£

ͼ3 SQL½âÎöÊ÷½á¹¹

ÉÏÃæÍ¼Ê¾ÖУ¬ÁÐÃûusername¡¢ismale´æ´¢ÔÚitem_listÖУ¬±íÃû´æ´¢ÔÚtable_listÖУ¬Ìõ¼þ´æ´¢ÔÚwhereÖС£ÆäÖÐÒÔwhereÌõ¼þÖеÄItem²ã´Î½á¹¹×îÉ±í´ïÒ²½ÏΪ¸´ÔÓ£¬ÈçÏÂͼËùʾ¡£

ͼ4 whereÌõ¼þ

SQL½âÎöµÄÓ¦ÓÃ

ΪÁ˸üÉîÈëµÄÁ˽âSQL½âÎöÆ÷£¬ÕâÀï¸ø³ö2¸öÓ¦ÓÃSQL½âÎöµÄÀý×Ó¡£

ÎÞÓÃÌõ¼þÈ¥³ý

ÎÞÓÃÌõ¼þÈ¥³ýÊôÓÚÓÅ»¯Æ÷µÄÂß¼­ÓÅ»¯·¶³ë£¬¿ÉÒÔ½ö½ö¸ù¾ÝSQL±¾ÉíÒÔ¼°±í½á¹¹¼´¿ÉÍê³É£¬ÆäÓÅ»¯µÄÇé¿öÒ²Êǽ϶àµÄ£¬´úÂëÔÚsql/sql_optimizer.ccÎļþÖеÄremove_eq_condsº¯Êý¡£ÎªÁ˱ÜÃâ¹ýÓÚ·±ËöµÄÃèÊö£¬ÒÔ¼°´ó¶Î´úÂëµÄÕ³Ìù£¬ÕâÀïͨ¹ýͼÀ´·ÖÎöÒÔÏÂËÄÖÖÇé¿ö¡£

a£©1=1 and (m > 3 and n > 4)

b£©1=2 and (m > 3 and n > 4)

c£©1=1 or (m > 3 and n > 4)

d£©1=2 or (m > 3 and n > 4)

ͼ5 ÎÞÓÃÌõ¼þÈ¥³ýa

ͼ6 ÎÞÓÃÌõ¼þÈ¥³ýb

ͼ7 ÎÞÓÃÌõ¼þÈ¥³ýc

ͼ8 ÎÞÓÃÌõ¼þÈ¥³ýd

Èç¹û¶ÔÆä´úÂëʵÏÖÓÐÐËȤµÄͬѧ£¬ÐèÒª¶ÔMySQLÖеÄÒ»¸öÖØÒªÊý¾Ý½á¹¹ItemÀàÓÐËùÁ˽⡣ÒòΪÆä±È½Ï¸´ÔÓ£¬ËùÒÔMySQL¹Ù·½Îĵµ£¬×¨ÃŽéÉÜÁËItemÀà¡£°¢ÀïµÄMySQLС×飬ҲÓÐÀàËÆµÄÎÄÕ¡£ÈçÐè¸üÏêϸµÄÁ˽⣬¾ÍÐèҪȥ²é¿´Ô´ÂëÖÐsql/item_*µÈÎļþ¡£

SQLÌØÕ÷Éú³É

ΪÁËÈ·±£Êý¾Ý¿â£¬Õâһϵͳ»ù´¡×é¼þÎȶ¨¡¢¸ßЧÔËÐУ¬Òµ½çÓкܶศÖúϵͳ¡£±ÈÈçÂý²éѯϵͳ¡¢Öмä¼þϵͳ¡£ÕâЩϵͳ²É¼¯¡¢ÊÕµ½SQLÖ®ºó£¬ÐèÒª¶ÔSQL½øÐйéÀ࣬ÒÔ±ãͳ¼ÆÐÅÏ¢»òÕßÓ¦ÓÃÏà¹Ø²ßÂÔ¡£¹éÀàʱ£¬Í¨³£ÐèÒª»ñÈ¡SQLÌØÕ÷¡£±ÈÈçSQL:

select username, ismale from userinfo where age > 20 and level > 5£»```
SQLÌØÕ÷Ϊ£º`sql
select username, ismale from userinfo where age > ? and level >

Òµ½çÖøÃûµÄÂý²éѯ·ÖÎö¹¤¾ßpt-query-digest£¬Í¨¹ýÕýÔò±í´ïʽʵÏÖÕâ¸ö¹¦Äܵ«ÊÇÕâÀà´¦Àí°ì·¨Bug½Ï¶à¡£½ÓÏÂÀ´¾Í½éÉÜÈçºÎʹÓÃSQL½âÎö£¬Íê³ÉSQLÌØÕ÷µÄÉú³É¡£

SQLÌØÕ÷Éú³É·ÖÁ½²¿·Ö×é³É¡£

a) Éú³ÉTokenÊý×é

b) ¸ù¾ÝTokenÊý×飬Éú³ÉSQLÌØÕ÷

Ê×ÏȻعËÔÚ´Ê·¨½âÎöÕ½ڣ¬ÎÒÃǽéÉÜÁËSQLÖеĹؼü×Ö£¬²¢ÇÒÿ¸ö¹Ø¼ü×Ö¶¼ÓÐÒ»¸ö16λµÄÕûÊý¶ÔÓ¦£¬¶ø·Ç¹Ø¼ü×ÖͳһÓÃident±íʾ£¬ÆäÒ²¶ÔÓ¦ÁËÒ»¸ö16λÕûÊý¡£ÈçÏÂ±í£º

½«Ò»¸öSQLת»»³ÉÌØÕ÷µÄ¹ý³Ì£º

ÔÚSQL½âÎö¹ý³ÌÖУ¬¿ÉÒԺܷ½±ãµÄÍê³ÉTokenÊý×éµÄÉú³É¡£¶øÒ»µ©Íê³ÉTokenÊý×éµÄÉú³É£¬¾Í¿ÉÒԺܼòµ¥µÄÍê³ÉSQLÌØÕ÷µÄÉú³É¡£SQLÌØÕ÷±»¹ã·ºÓÃÓÚ¸÷¸öϵͳÖУ¬±ÈÈçpt-query-digestÐèÒª¸ù¾ÝÌØÕ÷¶ÔSQL¹éÀ࣬Ȼ¶øÆä»ùÓÚÕýÔò±í´ïʽµÄʵÏÖÓÐÖî¶àbug¡£ÏÂÃæÁоټ¸¸öÒÑÖªbug¡£

Òò´Ë¿ÉÒÔ¿´³öSQL½âÎöµÄÓÅÊÆÊǺÜÃ÷ÏԵġ£

ѧϰ½¨Òé

×î½ü£¬ÔÚ¶ÔSQL½âÎöÆ÷ºÍÓÅ»¯Æ÷̽Ë÷µÄ¹ý³ÌÖУ¬´ÓÒ»¿ªÊ¼µÄãȻÎÞ´ëµ½ÓÐÕ¿ÉÑ­£¬Ò²×ܽáÁËһЩÐĵÃÌå»á£¬ÔÚÕâÀï¸ú´ó¼Ò·ÖÏíһϡ£

Ê×ÏÈ£¬ÔĶÁÏà¹ØÍ¼ÊéÊé¼®¡£Í¼ÊéÄܸøÎÒÃÇϵͳÈÏʶ½âÎöÆ÷ºÍÓÅ»¯Æ÷µÄ½Ç¶È¡£µ«ÊÇÕë¶ÔMySQLµÄ´ËÀàͼÊéÊÐÃæÉϺÜÉÙ£¬Ä¿Ç°ÖÐÎÄ×÷Æ·¿ÉÒÔ¿´Ò»¿´¡¶Êý¾Ý¿â²éѯÓÅ»¯Æ÷µÄÒÕÊõ£ºÔ­Àí½âÎöÓëSQLÐÔÄÜÓÅ»¯¡·¡£

Æä´Î£¬ÒªÔĶÁÔ´Â룬µ«ÊÇ×îºÃÒÔij¸ö°æ±¾Îª»ù´¡£¬±ÈÈçMySQL5.6.23£¬ÒòΪSQL½âÎö¡¢ÓÅ»¯²¿·ÖµÄ´úÂëÔÚ²»¶Ï±ä»¯¡£ÓÈÆäÊÇÔÚ¿çÔ½´óµÄ°æ±¾Ê±£¬¸Ä¶¯Á¦¶È´ó¡£

ÔٴΣ¬¶àʹÓÃGDBµ÷ÊÔ£¬ÑéÖ¤×Ô¼ºµÄ²Â²â£¬¼ìÑéÔĶÁÖÊÁ¿¡£

×îºó£¬ÐèҪдÏà¹Ø´úÂëÑéÖ¤£¬Ö»ÓÐд³öÀ´Á˲ÅÄÜËãÕæÕýµÄÕÆÎÕ¡£

   
3158 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ