mysql5.5マニュアル読書日記(2)

61321 ワード

<?php



/* 

 *

 * MySQL_5.5       485  

 * 

 * 





mysql> SELECT CASE 1 WHEN 1 THEN 'one'

-> WHEN 2 THEN 'two' ELSE 'more' END;

-> 'one'

mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;

-> 'true'

mysql> SELECT CASE BINARY 'B'

-> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;

-> NULL





mysql> SELECT IF(1>2,2,3);

-> 3

mysql> SELECT IF(1<2,'yes ','no');

-> 'yes'

mysql> SELECT IF(STRCMP('test','test1'),'no','yes');

-> 'no'





STRCMP       

mysql> SELECT STRCMP('Abc','abc'), STRCMP('abc','abc'), STRCMP('abc','Abc');

+---------------------+---------------------+---------------------+

| STRCMP('Abc','abc') | STRCMP('abc','abc') | STRCMP('abc','Abc') |

+---------------------+---------------------+---------------------+

|                   0 |                   0 |                   0 |

+---------------------+---------------------+---------------------+



mysql> SELECT IFNULL(1,0);

-> 1

mysql> SELECT IFNULL(NULL,10);

-> 10

mysql> SELECT IFNULL(1/0,10);

-> 10

mysql> SELECT IFNULL(1/0,'yes');

-> 'yes'



mysql> SELECT NULLIF(1,1);

-> NULL

mysql> SELECT NULLIF(1,2);

-> 1



     



mysql> SELECT ASCII('2');

-> 50

mysql> SELECT ASCII(2);

-> 50

mysql> SELECT ASCII('dx');

-> 100



mysql> SELECT BIN(12);

-> '1100'





mysql> SELECT BIT_LENGTH('text');

-> 32



mysql> SELECT CHAR(77,121,83,81,'76');

-> 'MySQL'

mysql> SELECT CHAR(77,77.3,'77.3');

-> 'MMM'



mysql> SELECT HEX(CHAR(1,0)), HEX(CHAR(256));

+----------------+----------------+

| HEX(CHAR(1,0)) | HEX(CHAR(256)) |

+----------------+----------------+

| 0100 | 0100 |

+----------------+----------------+

mysql> SELECT HEX(CHAR(1,0,0)), HEX(CHAR(256*256));

+------------------+--------------------+

| HEX(CHAR(1,0,0)) | HEX(CHAR(256*256)) |

+------------------+--------------------+

| 010000 | 010000 |

+------------------+--------------------+





mysql> SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));

mysql> SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));

+---------------------+--------------------------------+

| CHARSET(CHAR(0x65)) | CHARSET(CHAR(0x65 USING utf8)) |

+---------------------+--------------------------------+

| binary | utf8 |

+---------------------+--------------------------------+







mysql> SELECT LENGTH(COMPRESS(REPEAT('a',1000)));

-> 21

mysql> SELECT LENGTH(COMPRESS(''));

-> 0

mysql> SELECT LENGTH(COMPRESS('a'));

-> 13

mysql> SELECT LENGTH(COMPRESS(REPEAT('a',16)));

-> 15



COMPRESS    ,       。       MySQL       zlib       。 

  ,      NULL。UNCOMPRESS()               。 



mysql> select REPEAT('a',5);

+---------------+

| REPEAT('a',5) |

+---------------+

| aaaaa         |

+---------------+





mysql> SELECT CONCAT('My', 'S', 'QL');

-> 'MySQL'

mysql> SELECT CONCAT('My', NULL, 'QL');

-> NULL

mysql> SELECT CONCAT(14.3);

-> '14.3'



mysql> select length('ssssssssssssssssss');

+------------------------------+

| length('ssssssssssssssssss') |

+------------------------------+

|                           18 |

+------------------------------+



CONCAT_WS()    CONCAT With Separator , CONCAT()     。             

 。                   。           ,        。     

  NULL,     NULL。               NULL  。

CONCAT_WS()          。 (         NULL)。





mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name');

-> 'First name,Second name,Last Name'

mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name');

-> 'First name,Last Name'





CONV(N,from_base,to_base)

         。       N     , from_base    to_base  。        

 NULL,      NULL。   N         ,                。    

  2 ,        36。 If to_base      ,  N          。  , N       

 。 CONV()         64  。

mysql> SELECT CONV('a',16,2);

-> '1010'

mysql> SELECT CONV('6E',18,8);

-> '172'

mysql> SELECT CONV(-17,10,-18);

-> '-H'

mysql> SELECT CONV(10+'10'+'10'+0xa,10,10);

-> '40'



ELT(N,str1,str2,str3,...)

 N = 1,     str1 , N = 2,     str2 ,    。  N   1        ,  

    NULL 。ELT()   FIELD()   。

mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');

-> 'ej'

mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');

-> 'foo'



EXPORT_SET(bits,on,off[,separator[,number_of_bits]])

         ,    bits       ,      on    ,          ,  

    off    。bits                    (          )。      

     (     ‘,’),                。number_of_bits            

  (    64)。

mysql> SELECT EXPORT_SET(5,'Y','N',',',4);

-> 'Y,N,Y,N'

5 101   0101 4   ,       

        YNYN



mysql> SELECT EXPORT_SET(6,'1','0',',',10);

-> '0,1,1,0,0,0,0,0,0,0'





5    101 , 6 110,         0,       ,0  off ,1  on  













FIELD(str,str1,str2,str3,...)

    str1, str2, str3,……    str   。    str     ,     0 。

      FIELD()         ,               。           , 

        。  ,          。



  str  NULL,     0 ,   NULL            。FIELD()  ELT()   。

mysql> SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');

-> 2

mysql> SELECT FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');

-> 0

FIND_IN_SET(str,strlist)

     str   N           strlist  ,          1  N    。        

       ‘,’             。               ,     type

SET ,  FIND_IN_SET()      ,      。  str  strlist  strlist      ,    

  0 。        NULL,      NULL。                (‘,’)       

 。

mysql> SELECT FIND_IN_SET('b','a,b,c,d');

-> 2

FORMAT(X,D)

 number X      '#,###,###.##',                D ,           

 。  12.9.4 ,“    ”.

HEX(N_or_S)

  N_OR_S      ,            N       ,   , N    longlong

(BIGINT) 。     CONV(N,10,16)。

  N_OR_S       ,       N_OR_S          ,     N_OR_S      

             。

mysql> SELECT HEX(255);

-> 'FF'

mysql> SELECT 0x616263;

-> 'abc'

mysql> SELECT HEX('abc');

-> 616263

INSERT(str,pos,len,newstr)

     str,         pos           newstr   len   。   pos       

 ,          。  len             ,    pos    。      

  null,     NULL。

mysql> SELECT INSERT('Quadratic', 3, 4, 'What');

-> 'QuWhattic'



mysql> SELECT INSERT('Quadratic', -1, 4, 'What');

-> 'Quadratic'

mysql> SELECT INSERT('Quadratic', 3, 100, 'What');

-> 'QuWhat'

           。

INSTR(str,substr)

     str              。  LOCATE()        ,          。

mysql> SELECT INSTR('foobarbar', 'bar');

-> 4

mysql> SELECT INSTR('xbar', 'foobar');

-> 0

           ,                         。

LCASE(str)

LCASE()   LOWER()    。

LEFT(str,len)

      str    len     。

mysql> SELECT LEFT('foobarbar', 5);

-> 'fooba'

LENGTH(str)

       str    ,     。            。           5 2    

    , LENGTH()      10,   CHAR_LENGTH()      5。

mysql> SELECT LENGTH('text');

-> 4

LOAD_FILE(file_name)

                    。            ,            , 

       FILE    。       ,         max_allowed_packet  。

      ,               ,         NULL。

mysql> UPDATE tbl_name

SET blob_column=LOAD_FILE('/tmp/picture')

WHERE id=1;



LOCATE(substr,str) , LOCATE(substr,str,pos)

          str     substr        。          str    

 substr        ,      pos。  substr   str ,     0。

mysql> SELECT LOCATE('bar', 'foobarbar');

-> 4

mysql> SELECT LOCATE('xbar', 'foobar');

-> 0

mysql> SELECT LOCATE('bar', 'foobarbar',5);

-> 7

           ,                         。

LOWER(str)

     str                          (    cp1252 Latin1)。

mysql> SELECT LOWER('QUADRATICALLY');

-> 'quadratically'

           。

LPAD(str,len,padstr)

     str,        padstr    len     。  str      len,         len  

 。

mysql> SELECT LPAD('hi',4,'??');

-> '??hi'

mysql> SELECT LPAD('hi',1,'??');

-> 'h'

LTRIM(str)

     str ,          。

mysql> SELECT LTRIM(' barbar');

-> 'barbar'

           。

MAKE_SET(bits,str1,str2,...)

        (     ‘,’            ) ,  bits               

 。str1      0, str2     1,    。str1, str2, ...   NULL          。

mysql> SELECT MAKE_SET(1,'a','b','c');



-> 'a'

mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');

-> 'hello,world'

mysql> SELECT MAKE_SET(1 | 4,'hello','nice',NULL,'world');

-> 'hello'

mysql> SELECT MAKE_SET(0,'a','b','c');

-> ''

MID(str,pos,len)

MID(str,pos,len)   SUBSTRING(str,pos,len)    。

OCT(N)

    N           ,  N    longlong (BIGINT) 。    CONV(N,10,8)。 N  

NULL ,     NULL。

mysql> SELECT OCT(12);

-> '14'

OCTET_LENGTH(str)

OCTET_LENGTH()   LENGTH()    。

ORD(str)

    str              ,         ,                   

        :

(1st byte code)

+ (2nd byte code × 256)

+ (3rd byte code × 2562) ...

               ,   ORD()   ASCII()      。

mysql> SELECT ORD('2');

-> 50

POSITION(substr IN str)

POSITION(substr IN str)  LOCATE(substr,str)   。

QUOTE(str)

       ,       SQL                。            ,

         (‘'’)、      (‘\’)、 ASCII NUL           Control-Z 。       



 NULL,             “NULL”。

mysql> SELECT QUOTE('Don\'t!');

-> 'Don\'t!'

mysql> SELECT QUOTE(NULL);

-> NULL

REPEAT(str,count)

           str       ,   str     count 。   count <= 0,        

 。 str   count   NULL,    NULL 。

mysql> SELECT REPEAT('MySQL', 3);

-> 'MySQLMySQLMySQL'

REPLACE(str,from_str,to_str)

     str         to_str      from_str 。

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');

-> 'WwWwWw.mysql.com'

           。

REVERSE(str)

     str ,         。

mysql> SELECT REVERSE('abc');

-> 'cba'

           。

RIGHT(str,len)

    str   ,    len   。

mysql> SELECT RIGHT('foobarbar', 4);

-> 'rbar'

           。

RPAD(str,len,padstr)

     str,        padstr   len     。     str       len,        

 len       。

mysql> SELECT RPAD('hi',5,'?');

-> 'hi???'



mysql> SELECT RPAD('hi',1,'?');

-> 'h'

           。

RTRIM(str)

     str ,         。

mysql> SELECT RTRIM('barbar ');

-> 'barbar'

           。

SOUNDEX(str)

 str    soundex   。                      soundex    。    

 soundex        4   ,  SOUNDEX()                。      

 SUBSTRING()         soundex    。 str ,                 。   

 A-Z                  。

mysql> SELECT SOUNDEX('Hello');

-> 'H400'

mysql> SELECT SOUNDEX('Quadratically');

-> 'Q36324'

  :         Soundex  ,           ( D. Knuth  )。         

       ,     ,           ,      。

expr1 SOUNDS LIKE expr2

    SOUNDEX(expr1) = SOUNDEX(expr2)。

SPACE(N)

     N           。

mysql> SELECT SPACE(6);

-> ' '

SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM

pos FOR len)

   len          str        ,     pos。  len         str   

    len         ,     pos。   FROM       SQL   。    pos  

    。    ,                 pos   ,           。    

        pos       。

mysql> SELECT SUBSTRING('Quadratically',5);

-> 'ratically'



mysql> SELECT SUBSTRING('foobarbar' FROM 4);

-> 'barbar'

mysql> SELECT SUBSTRING('Quadratically',5,6);

-> 'ratica'

mysql> SELECT SUBSTRING('Sakila', -3);

-> 'ila'

mysql> SELECT SUBSTRING('Sakila', -5, 3);

-> 'aki'

mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);

-> 'ki'

           。

  ,   len        1  ,          。

SUBSTR()  SUBSTRING()    。

SUBSTRING_INDEX(str,delim,count)

    delim   count    ,    str      。 count   ,        (    

 )       。 count   ,      (     )       。

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);

-> 'www.mysql'

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);

-> 'mysql.com'

           。

TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM(remstr FROM] str)

     str ,     remstr    /        。    BOTH、LEADIN TRAILING    

     ,    BOTH 。remstr     ,       ,     。

mysql> SELECT TRIM(' bar ');

-> 'bar'

mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');

-> 'barxxx'

mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');

-> 'bar'



mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');

-> 'barx'

           。

UCASE(str)

UCASE() UPPER()    。

UNCOMPRESS(string_to_uncompress)

  COMPRESS()              。       ,     NULL。       MySQL

    zlib          。  ,         NULL。

mysql> SELECT UNCOMPRESS(COMPRESS('any string'));

-> 'any string'

mysql> SELECT UNCOMPRESS('any string');

-> NULL

UNCOMPRESSED_LENGTH(compressed_string)

             。

mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));

-> 30

UNHEX(str)

   HEX(str)     。   ,                      ,        

      。                。

mysql> SELECT UNHEX('4D7953514C');

-> 'MySQL'

mysql> SELECT 0x4D7953514C;

-> 'MySQL'

mysql> SELECT UNHEX(HEX('string'));

-> 'string'

mysql> SELECT HEX(UNHEX('1267'));

-> '1267'

UPPER(str)

     str,                       (   cp1252 Latin1).

mysql> SELECT UPPER('Hej');

-> 'HEJ'

          。



















       

  ,MySQL             ,    。

mysql> SELECT 1+'1';

-> 2

mysql> SELECT CONCAT(2,' test');

-> '2 test'

               ,    CAST()  CONCAT()  :

mysql> SELECT 38.8, CAST(38.8 AS CHAR);

-> 38.8, '38.8'

mysql> SELECT 38.8, CONCAT(38.8);

-> 38.8, '38.8'

CAST()     。.

                         ,                     。 

                     。            。

    ,                      ,            。

expr LIKE pat [ESCAPE 'escape-char']

    ,  SQL         。  1 (TRUE)   0 (FALSE)。  expr   pat       

NULL,     NULL。

           。  ,                 。

       LIKE           :

    

%          ,       

_         

mysql> SELECT 'David!' LIKE 'David_';

-> 1

mysql> SELECT 'David!' LIKE '%D%v%';

-> 1

               ,              。       ESCAPE  ,     ‘\’。



     

\%     

‘%’  

\_      ‘_’

  

mysql> SELECT 'David!' LIKE 'David\_';

-> 0

mysql> SELECT 'David_' LIKE 'David\_';

-> 1

            ,   ESCAPE  :

mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';

-> 1

        ,           。  MySQL 5.1.2  ,   NO_BACKSLASH_ESCAPES SQL 

    ,         。

                      ,                :

mysql> SELECT 'abc' LIKE 'ABC';

-> 1

mysql> SELECT 'abc' LIKE BINARY 'ABC';

-> 0

 MySQL , LIKE            。 (    SQL LIKE    )。

mysql> SELECT 10 LIKE '1%';

-> 1

  :    MySQL        C    (  ,  ‘
’ ), LIKE , ‘\’ 。 , ‘
’, ‘\
’。 ‘\’, it as ‘\\\\’; , , , 。 expr NOT LIKE pat [ESCAPE 'escape-char'] NOT (expr LIKE pat [ESCAPE 'escape-char'])。 expr NOT REGEXP pat expr NOT RLIKE pat NOT (expr REGEXP pat)。 expr REGEXP pat expr RLIKE pat expr pat 。 。 G:MySQL 。 expr pat, 1; 0。 expr pat NULL, NULL。 RLIKE REGEXP , mSQL 。 。 , 。 : , MySQL C ( , ‘
’ ), REGEXP ‘\’ 。 REGEXP , 。 mysql> SELECT 'Monty!' REGEXP 'm%y%%'; -> 0 mysql> SELECT 'Monty!' REGEXP '.*'; -> 1 mysql> SELECT 'new*
*line' REGEXP 'new\\*.\\*line'; -> 1 mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A'; -> 1 0 mysql> SELECT 'a' REGEXP '^[a-d]'; -> 1 ,REGEXP RLIKE ( cp1252 Latin1 )。 : 。 STRCMP(expr1,expr2) , STRCMP(), , , -1, 1 。 mysql> SELECT STRCMP('text', 'text2'); -> -1 mysql> SELECT STRCMP('text2', 'text'); -> 1 mysql> SELECT STRCMP('text', 'text'); -> 0 ,STRCMP() 。 , , NULL 。 ABS(X) X 。 mysql> SELECT ABS(2); -> 2 mysql> SELECT ABS(-32); -> 32 BIGINT 。 ACOS(X) X , , X 。 X -1 1 , NULL 。 mysql> SELECT ACOS(1); -> 0 mysql> SELECT ACOS(1.0001); -> NULL mysql> SELECT ACOS(0); -> 1.5707963267949 ASIN(X) X , , X 。 X X -1 1 , NULL 。 mysql> SELECT ASIN(0.2); -> 0.20135792079033 mysql> SELECT ASIN('foo'); +-------------+ | ASIN('foo') | +-------------+ | 0 | +-------------+ 1 row in set, 1 warning (0.00 sec) mysql> SHOW WARNINGS; +---------+------+-----------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------+ | Warning | 1292 | Truncated incorrect DOUBLE value: 'foo' | +---------+------+-----------------------------------------+ ATAN(X) X , , X 。 mysql> SELECT ATAN(2); -> 1.1071487177941 mysql> SELECT ATAN(-2); -> -1.1071487177941 ATAN(Y,X) , ATAN2(Y,X) X Y 。 Y X , 。 mysql> SELECT ATAN(-2,2); -> -0.78539816339745 mysql> SELECT ATAN2(PI(),0); -> 1.5707963267949 CEILING(X) CEIL(X) X 。 mysql> SELECT CEILING(1.23); -> 2 mysql> SELECT CEIL(-1.23); -> -1 。 BIGINT。 COS(X) X , X 。 mysql> SELECT COS(PI()); -> -1 COT(X) X 。 mysql> SELECT COT(12); -> -1.5726734063977 mysql> SELECT COT(0); -> NULL CRC32(expr) 32 。 NULL , NULL。 , ( )。 mysql> SELECT CRC32('MySQL'); -> 3259397556 mysql> SELECT CRC32('mysql'); -> 2501908538 DEGREES(X) X, 。 mysql> SELECT DEGREES(PI()); -> 180 mysql> SELECT DEGREES(PI() / 2); -> 90 EXP(X) e X ( )。 mysql> SELECT EXP(2); -> 7.3890560989307 mysql> SELECT EXP(-2); -> 0.13533528323661 mysql> SELECT EXP(0); -> 1 FLOOR(X) X 。 mysql> SELECT FLOOR(1.23); -> 1 mysql> SELECT FLOOR(-1.23); -> -2 , BIGINT。 FORMAT(X,D) X '#,###,###.##' , D , D , 。 12.9.4 ,“ ”。 LN(X) X , , X e 。 mysql> SELECT LN(2); -> 0.69314718055995 mysql> SELECT LN(-2); -> NULL LOG(X) 。 LOG(X) LOG(B,X) , X 。 mysql> SELECT LOG(2); -> 0.69314718055995 mysql> SELECT LOG(-2); -> NULL , X B 。 mysql> SELECT LOG(2,65536); -> 16 mysql> SELECT LOG(10,100); -> 2 LOG(B,X) LOG(X) / LOG(B)。 LOG2(X) X 2 。 mysql> SELECT LOG2(65536); -> 16 mysql> SELECT LOG2(-100); -> NULL ,LOG2() 。 LOG(X) / LOG(2)。 LOG10(X) X 10 。 mysql> SELECT LOG10(2); -> 0.30102999566398 mysql> SELECT LOG10(100); -> 2 mysql> SELECT LOG10(-100); -> NULL LOG10(X) LOG(10,X)。 MOD(N,M) , N % M N MOD M 。 N M 。 mysql> SELECT MOD(234, 10); -> 4 mysql> SELECT 253 % 7; -> 1 mysql> SELECT MOD(29,9); -> 2 mysql> SELECT 29 MOD 9; -> 2 BIGINT 。 MOD() , : mysql> SELECT MOD(34.5,3); -> 1.5 PI() ϖ (pi) 。 7 , MySQL 。 mysql> SELECT PI(); -> 3.141593 mysql> SELECT PI()+0.000000000000000000; -> 3.141592653589793116 POW(X,Y) , POWER(X,Y) X Y 。 mysql> SELECT POW(2,2); -> 4 mysql> SELECT POW(2,-2); -> 0.25 RADIANS(X) X, ( ϖ 180 )。 mysql> SELECT RADIANS(90); -> 1.5707963267949 RAND() RAND(N) v , 0 1 ( , 0 ≤ v ≤ 1.0)。 N , , 。 mysql> SELECT RAND(); -> 0.9233482386203 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(); -> 0.63553050033332 mysql> SELECT RAND(); -> 0.70100469486881 mysql> SELECT RAND(20); -> 0.15888261251047 i ≤ R ≤ j R , FLOOR(i + RAND() * (j – i + 1))。 , 7 12 ( 7 12) , : SELECT FLOOR(7 + (RAND() * 6)); ORDER BY , RAND() , ORDER BY 。 , : mysql> SELECT * FROM tbl_name ORDER BY RAND(); ORDER BY RAND() LIMIT : mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d -> ORDER BY RAND() LIMIT 1000; , WHERE ,WHERE , RAND() 。 RAND() , MySQL ad hoc 。 ROUND(X) ROUND(X,D) X, 。 , X , D , D 。 X D , D 。 mysql> SELECT ROUND(-1.23); -> -1 mysql> SELECT ROUND(-1.58); -> -2 mysql> SELECT ROUND(1.58); -> 2 mysql> SELECT ROUND(1.298, 1); -> 1.3 mysql> SELECT ROUND(1.298, 0); -> 1 mysql> SELECT ROUND(23.298, -1); -> 20 ( 、 )。 , ( )。 , ,ROUND() : , ROUND() “ ” “ ” : .5 .5 , , 。( , )。 .5 , , , 。 , C 。 , ROUND() “ ” : 。 : mysql> SELECT ROUND(2.5), ROUND(25E-1); +------------+--------------+ | ROUND(2.5) | ROUND(25E-1) | +------------+--------------+ | 3 | 2 | +------------+--------------+ 24 : 。 SIGN(X) -1、 0 1 , X 、 。 mysql> SELECT SIGN(-32); -> -1 mysql> SELECT SIGN(0); -> 0 mysql> SELECT SIGN(234); -> 1 SIN(X) X , X 。 mysql> SELECT SIN(PI()); -> 1.2246063538224e-16 mysql> SELECT ROUND(SIN(PI())); -> 0 SQRT(X) X 。 mysql> SELECT SQRT(4); -> 2 mysql> SELECT SQRT(20); -> 4.4721359549996 mysql> SELECT SQRT(-16); -> NULL TAN(X) X , X 。 mysql> SELECT TAN(PI()); -> -1.2246063538224e-16 mysql> SELECT TAN(PI()+1); -> 1.5574077246549 TRUNCATE(X,D) D X。 D 0, 。 D , ( ) X D . mysql> SELECT TRUNCATE(1.223,1); -> 1.2 mysql> SELECT TRUNCATE(1.999,1); -> 1.9 mysql> SELECT TRUNCATE(1.999,0); -> 1 mysql> SELECT TRUNCATE(-1.999,1); -> -1.9 mysql> SELECT TRUNCATE(122,-2); -> 100 -> 1028 ADDDATE(date,INTERVAL expr type) ADDDATE(expr,days) INTERVAL , ADDDATE() DATE_ADD() 。 SUBDATE() DATE_SUB() 。 INTERVAL , DATE_ADD() 。 mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY); -> '1998-02-02' mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY); -> '1998-02-02' days , MySQL 5.1 expr。 mysql> SELECT ADDDATE('1998-01-02', 31); -> '1998-02-02' ADDTIME(expr,expr2) ADDTIME() expr2 expr 。 expr , expr2 。 mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999', -> '1 1:1:1.000002'); -> '1998-01-02 01:01:01.000001' mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998'); -> '03:00:01.999997' CONVERT_TZ(dt,from_tz,to_tz) CONVERT_TZ() dt from_tz to_tz , 。 , 5.10.8 ,“MySQL ”。 , NULL。 from_tz UTC , TIMESTAMP , 。 TIMESTAMP , 11.1.2 ,“ ”。 mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET'); -> '2004-01-01 13:00:00' mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00'); -> '2004-01-01 22:00:00' : 'MET' 'Europe/Moscow' , 。 5.10.8 ,“MySQL ”。 CURDATE() 'YYYY-MM-DD' YYYYMMDD , 。 mysql> SELECT CURDATE(); -> '1997-12-15' mysql> SELECT CURDATE() + 0; -> 19971215 CURRENT_DATE CURRENT_DATE() CURRENT_DATE CURRENT_DATE() . CURTIME() 'HH:MM:SS' HHMMSS , 。 mysql> SELECT CURTIME(); -> '23:50:26' mysql> SELECT CURTIME() + 0; -> 235026 CURRENT_TIME, CURRENT_TIME() CURRENT_TIME CURRENT_TIME() CURTIME() 。 CURRENT_TIMESTAMP, CURRENT_TIMESTAMP() CURRENT_TIMESTAMP CURRENT_TIMESTAMP() NOW() 。 DATE(expr) expr 。 mysql> SELECT DATE('2003-12-31 01:02:03'); -> '2003-12-31' DATEDIFF(expr,expr2) DATEDIFF() expr expr2 。Expr expr2 date-and-time 。 。 mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30'); -> 1 mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31'); -> -31 DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type) 。date DATETIME DATE , 。expr , 。Expr ; , ‘-’ 。 type , 。 INTERVA type 。 type expr : type expr MICROSECOND MICROSECONDS SECOND SECONDS MINUTE MINUTES HOUR HOURS DAY DAYS WEEK WEEKS MONTH MONTHS QUARTER QUARTERS YEAR YEARS SECOND_MICROSECOND 'SECONDS.MICROSECONDS' MINUTE_MICROSECOND 'MINUTES.MICROSECONDS' MINUTE_SECOND 'MINUTES:SECONDS' HOUR_MICROSECOND 'HOURS.MICROSECONDS' HOUR_SECOND 'HOURS:MINUTES:SECONDS' HOUR_MINUTE 'HOURS:MINUTES' DAY_MICROSECOND 'DAYS.MICROSECONDS' DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS' DAY_MINUTE 'DAYS HOURS:MINUTES' DAY_HOUR 'DAYS HOURS' YEAR_MONTH 'YEARS-MONTHS' MySQL expr 。 。 date DATE , YEAR、MONTH DAY ( , ), DATE 。 , DATETIME 。 , INTERVAL expr type + 。 – , INTERVAL expr type , 。 ( )。 mysql> SELECT '1997-12-31 23:59:59' + INTERVAL 1 SECOND; -> '1998-01-01 00:00:00' mysql> SELECT INTERVAL 1 DAY + '1997-12-31'; -> '1998-01-01' mysql> SELECT '1998-01-01' - INTERVAL 1 SECOND; -> '1997-12-31 23:59:59' mysql> SELECT DATE_ADD('1997-12-31 23:59:59', -> INTERVAL 1 SECOND); -> '1998-01-01 00:00:00' mysql> SELECT DATE_ADD('1997-12-31 23:59:59', -> INTERVAL 1 DAY); -> '1998-01-01 23:59:59' mysql> SELECT DATE_ADD('1997-12-31 23:59:59', -> INTERVAL '1:1' MINUTE_SECOND); -> '1998-01-01 00:01:00' mysql> SELECT DATE_SUB('1998-01-01 00:00:00', -> INTERVAL '1 1:1:1' DAY_SECOND); -> '1997-12-30 22:58:59' mysql> SELECT DATE_ADD('1998-01-01 00:00:00', -> INTERVAL '-1 10' DAY_HOUR); -> '1997-12-30 14:00:00' mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY); -> '1997-12-02' mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002', -> INTERVAL '1.999999' SECOND_MICROSECOND); -> '1993-01-01 00:00:01.000001' ( type ), MySQL 。 , DAY_SECOND, expr 、 、 。 '1:10' , MySQL , 。 , '1:10' DAY_SECOND '1:10' MINUTE_SECOND。 MySQL TIME 。 , : mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 DAY); -> '1999-01-02' mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR); -> '1999-01-01 01:00:00' , NULL。 MONTH、YEAR_MONTH YEAR , , : mysql> SELECT DATE_ADD('1998-01-30', INTERVAL 1 MONTH); -> '1998-02-28' DATE_FORMAT(date,format) format date 。 format : %a (Sun..Sat) %b (Jan..Dec) %c , (0..12) %D (0th, 1st, 2nd, 3rd, ...) %d , (00..31) %e , (0..31) %f (000000..999999) %H (00..23) %h (01..12) %I (01..12) %i , (00..59) %j (001..366) %k (0..23) %l (1..12) %M (January..December) %m , (00..12) %p (AM) ( PM) %r , 12 ( hh: mm: ss AM PM) %S (00..59) %s (00..59) %T , 24 ( hh: mm: ss) %U (00..53), %u (00..53), %V (01..53), ; %X %v (01..53), ; %x %W ( .. ) %w (0= ..6= ) %X , , ,4 ; %V %x , , ,4 ; %v %Y , ,4 %y , (2 ) %% ‘%’ , 。 , ‘%’ 。 , MySQL '2004-00-00' . mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); -> 'Saturday October 1997' mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s'); -> '22:23:00' mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b %j'); -> '4th 97 Sat 04 10 Oct 277' mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w'); -> '22 22 10 10:23:00 PM 22:23:00 00 6' mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V'); -> '1998 52' DAY(date) DAY() DAYOFMONTH() 。 DAYNAME(date) date 。 mysql> SELECT DAYNAME('1998-02-05'); -> ' ' DAYOFMONTH(date) date , 1 31。 mysql> SELECT DAYOFMONTH('1998-02-03'); -> 3 DAYOFWEEK(date) date (1 = , 2 = , ..., 7 = ) 。 ODBC 。 mysql> SELECT DAYOFWEEK('1998-02-03'); -> 3 DAYOFYEAR(date) date , 1 366。 mysql> SELECT DAYOFYEAR('1998-02-03'); -> 34 EXTRACT(type FROM date) EXTRACT() DATE_ADD() DATE_SUB() , , 。 mysql> SELECT EXTRACT(YEAR FROM '1999-07-02'); -> 1999 mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03'); -> 199907 mysql> SELECT EXTRACT(DAY_MINUTE FROM '1999-07-02 01:02:03'); -> 20102 mysql> SELECT EXTRACT(MICROSECOND -> FROM '2003-01-02 10:30:00.00123'); -> 123 FROM_DAYS(N) N, DATE 。 mysql> SELECT FROM_DAYS(729669); -> '1997-10-07' FROM_DAYS() , 。 (1582)。 12.6 ,“MySQL ?”。 FROM_UNIXTIME(unix_timestamp) , FROM_UNIXTIME(unix_timestamp,format) 'YYYY-MM-DD HH:MM:SS' YYYYMMDDHHMMSS unix_timestamp , 。 format , format 。 format DATE_FORMAT() 。 mysql> SELECT FROM_UNIXTIME(875996580); -> '1997-10-04 22:23:00' mysql> SELECT FROM_UNIXTIME(875996580) + 0; -> 19971004222300 mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), -> '%Y %D %M %h:%i:%s %x'); -> '2003 6th August 06:22:58 2003' GET_FORMAT(DATE|TIME|DATETIME, 'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL') 。 DATE_FORMAT() STR_TO_DATE() 。 3 5 15 ( , DATE_FORMAT() )。 GET_FORMAT(DATE,'USA') '%m.%d.%Y' GET_FORMAT(DATE,'JIS') '%Y-%m-%d' GET_FORMAT(DATE,'ISO') '%Y-%m-%d' GET_FORMAT(DATE,'EUR') '%d.%m.%Y' GET_FORMAT(DATE,'INTERNAL') '%Y%m%d' GET_FORMAT(DATETIME,'USA') '%Y-%m-%d-%H.%i.%s' GET_FORMAT(DATETIME,'JIS') '%Y-%m-%d %H:%i:%s' GET_FORMAT(DATETIME,'ISO') '%Y-%m-%d %H:%i:%s' GET_FORMAT(DATETIME,'EUR') '%Y-%m-%d-%H.%i.%s' GET_FORMAT(DATETIME,'INTERNAL') '%Y%m%d%H%i%s' GET_FORMAT(TIME,'USA') '%h:%i:%s %p' GET_FORMAT(TIME,'JIS') '%H:%i:%s' GET_FORMAT(TIME,'ISO') '%H:%i:%s' GET_FORMAT(TIME,'EUR') '%H.%i.%S' GET_FORMAT(TIME,'INTERNAL') '%H%i%s' ISO ISO 9075, ISO 8601. TIMESTAMP, GET_FORMAT() DATETIME 。 mysql> SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR')); -> '03.10.2003' mysql> SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA')); -> '2003-10-31' 13.5.3 ,“SET ”。 HOUR(time) time 。 0 23 。 mysql> SELECT HOUR('10:05:03'); -> 10 , TIME , HOUR 23 。 mysql> SELECT HOUR('272:59:59'); -> 272 LAST_DAY(date) , 。 , NULL。 mysql> SELECT LAST_DAY('2003-02-05'); -> '2003-02-28' mysql> SELECT LAST_DAY('2004-02-05'); -> '2004-02-29' mysql> SELECT LAST_DAY('2004-01-01 01:01:01'); -> '2004-01-31' mysql> SELECT LAST_DAY('2003-03-32'); -> NULL LOCALTIME, LOCALTIME() LOCALTIME LOCALTIME() NOW() 。 LOCALTIMESTAMP, LOCALTIMESTAMP() LOCALTIMESTAMP LOCALTIMESTAMP() NOW() 。 MAKEDATE(year,dayofyear) , 。dayofyear 0 , NULL。 mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32); -> '2001-01-31', '2001-02-01' mysql> SELECT MAKEDATE(2001,365), MAKEDATE(2004,365); -> '2001-12-31', '2004-12-30' mysql> SELECT MAKEDATE(2001,0); -> NULL MAKETIME(hour,minute,second) hour、minute second 。 mysql> SELECT MAKETIME(12,15,30); -> '12:15:30' MICROSECOND(expr) expr , 0 999999。 mysql> SELECT MICROSECOND('12:00:00.123456'); -> 123456 mysql> SELECT MICROSECOND('1997-12-31 23:59:59.000010'); -> 10 MINUTE(time) time , 0 59。 mysql> SELECT MINUTE('98-02-03 10:05:03'); -> 5 MONTH(date) date , 1 12。 mysql> SELECT MONTH('1998-02-03'); -> 2 MONTHNAME(date) date 。 mysql> SELECT MONTHNAME('1998-02-05'); -> 'February ' NOW() , 'YYYY-MM-DD HH:MM:SS' YYYYMMDDHHMMSS , 。 mysql> SELECT NOW(); -> '1997-12-15 23:50:26' mysql> SELECT NOW() + 0; -> 19971215235026 , NOW() , 。 SYSDATE() 。 PERIOD_ADD(P,N) N P ( YYMM YYYYMM), YYYYMM。 P 。 mysql> SELECT PERIOD_ADD(9801,2); -> 199803 PERIOD_DIFF(P1,P2) P1 P2 。P1 P2 YYMM YYYYMM。 P1 P2 。 mysql> SELECT PERIOD_DIFF(9802,199703); -> 11 QUARTER(date) date , 1 4。 mysql> SELECT QUARTER('98-04-01'); -> 2 SECOND(time) time , 0 59。 mysql> SELECT SECOND('10:05:03'); -> 3 SEC_TO_TIME(seconds) 、 seconds , 'HH:MM:SS' HHMMSS, 。 mysql> SELECT SEC_TO_TIME(2378); -> '00:39:38' mysql> SELECT SEC_TO_TIME(2378) + 0; -> 3938 STR_TO_DATE(str,format) DATE_FORMAT() 。 str format。 , STR_TO_DATE() DATETIME , , DATE TIME 。 str 、 format 。 format , DATE_FORMAT() 。 , 。 str 、 , STR_TO_DATE() NULL。 , 。 11.3.1 ,“DATETIME、DATE TIMESTAMP ” 。 , , 1 31 , 。 , “ ” 0 。 mysql> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y'); -> '0000-00-00' mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y'); -> '2004-04-31' SUBDATE(date,INTERVAL expr type) SUBDATE(expr,days) INTERVAL , SUBDATE() DATE_SUB() 。 INTERVAL , DATE_ADD() 。 mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY); -> '1997-12-02' mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY); -> '1997-12-02' days 。 , expr 。 mysql> SELECT SUBDATE('1998-01-02 12:00:00', 31); -> '1997-12-02 12:00:00' "%X%V" year-week , , 。 year-week , : mysql> select str_to_date('200442 Monday', '%X%V %W'); -> 2004-10-18 SUBTIME(expr,expr2) SUBTIME() expr expr2 , 。expr , xpr2 。 mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002'); -> '1997-12-30 22:58:58.999997' mysql> SELECT SUBTIME('01:00:00.999999', '02:00:00.999998'); -> '-00:59:59.999999' SYSDATE() , 'YYYY-MM-DD HH:MM:SS' YYYYMMDDHHMMSS, 。 , SYSDATE() , 。 NOW() 。 TIME(expr) , 。 mysql> SELECT TIME('2003-12-31 01:02:03'); -> '01:02:03' mysql> SELECT TIME('2003-12-31 01:02:03.000123'); -> '01:02:03.000123' TIMEDIFF(expr,expr2) TIMEDIFF() expr expr2 。 expr expr2 date-and-time , 。 mysql> SELECT TIMEDIFF('2000:01:01 00:00:00', -> '2000:01:01 00:00:00.000001'); -> '-00:00:00.000001' mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001', -> '1997-12-30 01:01:01.000002'); -> '46:58:57.999999' TIMESTAMP(expr) , TIMESTAMP(expr,expr2) , expr . , expr2 expr , theresult 。 mysql> SELECT TIMESTAMP('2003-12-31'); -> '2003-12-31 00:00:00' mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00'); -> '2004-01-01 00:00:00' TIMESTAMPADD(interval,int_expr,datetime_expr) int_expr datetime_expr 。int_expr , : FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER YEAR。 Interval , SQL_TSI_ 。 , DAY SQL_TSI_DAY 。 mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02'); -> '2003-01-02 00:01:00' mysql> SELECT TIMESTAMPADD(WEEK,1,'2003-01-02'); -> '2003-01-09' TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2) datetime_expr1 datetime_expr2the 。 interval 。interval TIMESTAMPADD() 。 mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01'); -> 3 mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01'); -> -1 TIME_FORMAT(time,format) DATE_FORMAT() , format 、 。 NULL 0。 time value 23 , %H %k 0..23 。 12。 mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l'); -> '100 100 04 04 4' TIME_TO_SEC(time) time 。 mysql> SELECT TIME_TO_SEC('22:23:00'); -> 80580 mysql> SELECT TIME_TO_SEC('00:39:38'); -> 2378 TO_DAYS(date) date, ( 0 )。 mysql> SELECT TO_DAYS(950501); -> 728779 mysql> SELECT TO_DAYS('1997-10-07'); -> 729669 TO_DAYS() (1582) , , 。 12.6 ,“MySQL ?”。 , MySQL 11.3 ,“ ” 。 , '1997-10-07' '97-10-07' : mysql> SELECT TO_DAYS('1997-10-07'), TO_DAYS('97-10-07'); -> 729669, 729669 1582 ( ), 。 12.6 ,“MySQL ?” 。 UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date) , Unix timestamp ('1970-01-01 00:00:00' GMT ) 。 date UNIX_TIMESTAMP(), '1970-01-01 00:00:00' GMT 。date DATE 、 DATETIME 、 TIMESTAMP YYMMDD YYYMMDD 。 mysql> SELECT UNIX_TIMESTAMP(); -> 882226357 mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00'); -> 875996580 UNIX_TIMESTAMP TIMESTAMP , , “string-to- Unix-timestamp” 。 UNIX_TIMESTAMP() , 0, ( 1970 2037, 01 12, 01 31)。 UNIX_TIMESTAMP() , 。 12.8 ,“Cast ”。 UTC_DATE, UTC_DATE() UTC , 'YYYY-MM-DD' YYYYMMDD, 。 mysql> SELECT UTC_DATE(), UTC_DATE() + 0; -> '2003-08-14', 20030814 UTC_TIME, UTC_TIME() UTC , 'HH:MM:SS' HHMMSS, 。 mysql> SELECT UTC_TIME(), UTC_TIME() + 0; -> '18:07:53', 180753 UTC_TIMESTAMP, UTC_TIMESTAMP() UTC , 'YYYY-MM-DD HH:MM:SS' YYYYMMDDHHMMSS, 。 mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0; -> '2003-08-14 18:08:04', 20030814180804 WEEK(date[,mode]) date 。WEEK() , 0 53 1 53。 mode , default_week_format 。 5.3.3 ,“ ”。 mode :d Mode Week 1 ... 0 0-53 1 0-53 3 2 1-53 3 1-53 3 4 0-53 3 5 0-53 6 1-53 3 7 1-53 mysql> SELECT WEEK('1998-02-20'); -> 7 mysql> SELECT WEEK('1998-02-20',0); -> 7 mysql> SELECT WEEK('1998-02-20',1); -> 8 mysql> SELECT WEEK('1998-12-31',1); -> 53 , , 2、3、6 7 mode , MySQL 0: mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0); -> 2000, 0 , MySQL WEEK() 52 , 1999 52 。 0 “ ”。 WEEK() 。 , 0、2、5 7 mode 。 mysql> SELECT WEEK('2000-01-01',2); -> 52 , YEARWEEK() : mysql> SELECT YEARWEEK('2000-01-01'); -> 199952 mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2); -> '52' WEEKDAY(date) date (0 = , 1 = , ... 6 = ) weekday index for mysql> SELECT WEEKDAY('1998-02-03 22:23:00'); -> 1 mysql> SELECT WEEKDAY('1997-11-05'); -> 2 WEEKOFYEAR(date) , 1 53。 , WEEK(date,3)。 mysql> SELECT WEEKOFYEAR('1998-02-20'); -> 8 YEAR(date) date , 1000 9999。 mysql> SELECT YEAR('98-02-03'); -> 1998 YEARWEEK(date), YEARWEEK(date,start) 。start start WEEK() 。 。 mysql> SELECT YEARWEEK('1987-01-01'); -> 198653 , WEEK() 0 1 (0) w , WEEK() 。 -> '1997-10-07' 12.9.1. 12.9.2. 12.9.3. 12.9.4. 12.9.1. ,MySQL BIGINT (64 ) , 64 。 | Bitwise OR: mysql> SELECT 29 | 15; -> 31 64 。 & Bitwise AND: mysql> SELECT 29 & 15; -> 13 64 。 ^ Bitwise XOR: mysql> SELECT 1 ^ 1; -> 0 mysql> SELECT 1 ^ 0; -> 1 mysql> SELECT 11 ^ 3; -> 8 64 。 << longlong (BIGINT) 。 mysql> SELECT 1 << 2; -> 4 64 。 >> longlong (BIGINT) 。 mysql> SELECT 4 >> 2; -> 1 64 。 ~ 。 mysql> SELECT 5 & ~1; -> 4 64 。 BIT_COUNT(N) N mysql> SELECT BIT_COUNT(29); -> 4 12.9.2. 。 , BLOB CHAR VARCHAR , 。 AES_ENCRYPT(str,key_str) , AES_DECRYPT(crypt_str,key_str) AES ( ) , “Rijndael”。 128 , 256 。 128 , 。 。 NULL, NULL。 AES , , 16 * (trunc(string_length / 16) + 1)。 AES_DECRYPT() , NULL。 , , AES_DECRYPT() NULL ( )。 , AES : INSERT INTO t VALUES (1,AES_ENCRYPT('text','password')); AES_ENCRYPT() AES_DECRYPT() MySQL 。 DECODE(crypt_str,pass_str) pass_str , crypt_str, crypt_str ENCODE() 。 ENCODE(str,pass_str) pass_str , str 。 DECODE() 。 str 。 , BLOB 。 DES_DECRYPT(crypt_str[,key_str]) DES_ENCRYPT() 。 , NULL。 , MySQL SSL 。 5.8.7 ,“ ”. key_str , DES_DECRYPT() , DES , DES 。 , SUPER 。 --des-key-file 。 key_str , 。 crypt_str , MySQL crypt_str。 DES_ENCRYPT(str[,(key_num|key_str)]) Triple-DES 。 , NULL。 , MySQL SSL 。 5.8.7 ,“ ”. DES_ENCRYPT() , : DES 。 key_num DES (0-9)。 key_str str 。 --des-key-file 。 , CHAR(128 | key_num)。 128 。 , key_num 127。 new_len = orig_len + (8-(orig_len % 8))+1。 DES : key_num des_key_str key_num 0 0 。 。des_key_str 。 。 DES_ENCRYPT() , 。 FLUSH DES_KEY_FILE , MySQL 。 RELOAD 。 , 。 mysql> SELECT customer_address FROM customer_table > WHERE crypted_credit_card = DES_ENCRYPT('credit_card_number'); ENCRYPT(str[,salt]) Unix crypt() str。salt 2 。 salt , 。 mysql> SELECT ENCRYPT('hello'); -> 'VxuFAJXVARROc' ,ENCRYPT() str 。 crypt() 。 crypt() ( Windows ), ENCRYPT() NULL。 , MD5() SHA1() , 。 MD5(str) MD5 128 。 32 , NULL NULL。 , 。 mysql> SELECT MD5('testing'); -> 'ae2b1fca515949e5d54fb22b8ed95575' "RSA Data Security, Inc. MD5 Message-Digest Algorithm." , 12.8 ,“Cast ” BINARY 。 OLD_PASSWORD(str) PASSWORD() ,OLD_PASSWORD() MySQL。OLD_PASSWORD() PASSWORD() ( 4.1 ), 4.1 5.1 MySQL , 。 5.7.9 ,“MySQL 4.1 ”。 PASSWORD(str) str , NULL NULL。 Password MySQL mysql> SELECT PASSWORD('badpwd'); -> '7f84554057dd964b' PASSWORD() ( )。 PASSWORD() Unix 。 ENCRYPT()。 : PASSWORD() MySQL ; 。 , MD5() SHA1() 。 RFC 2195 SHA1(str) SHA(str) SHA1 160 , RFC 3174 ( ) 。 40 , NULL NULL。 。 。 mysql> SELECT SHA1('abc'); -> 'a9993e364706816aba3e25717850c26c9cd0d89d' SHA1() , MD5()。 SHA() SHA1() 。 12.9.3. BENCHMARK(count,expr) BENCHMARK() count expr 。 MySQL 。 0。 mysql , : mysql> SELECT BENCHMARK(1000000,ENCODE('hello','goodbye')); +----------------------------------------------+ | BENCHMARK(1000000,ENCODE('hello','goodbye')) | +----------------------------------------------+ | 0 | +----------------------------------------------+ 1 row in set (4.74 sec) , CPU 。 BENCHMARK(), 。 · CHARSET(str) 。 mysql> SELECT CHARSET('abc'); -> 'latin1' mysql> SELECT CHARSET(CONVERT('abc' USING utf8)); -> 'utf8' mysql> SELECT CHARSET(USER()); -> 'utf8' · COERCIBILITY(str) 。 mysql> SELECT COERCIBILITY('abc' COLLATE latin1_swedish_ci); -> 0 mysql> SELECT COERCIBILITY(USER()); -> 3 mysql> SELECT COERCIBILITY('abc'); -> 4 : 0 COLLATE 1 2 3 USER() 4 5 NULL NULL 。 COLLATION(str) 。 mysql> SELECT COLLATION('abc'); -> 'latin1_swedish_ci' mysql> SELECT COLLATION(_utf8'abc'); -> 'utf8_general_ci' CONNECTION_ID() ID ( ID)。 ID。 mysql> SELECT CONNECTION_ID(); -> 23786 CURRENT_USER, CURRENT_USER() 。 MySQL 。 SQL SECURITY DEFINER , CURRENT_USER() 。 CURRENT_USER() USER() 。 mysql> SELECT USER(); -> 'davida@localhost' mysql> SELECT * FROM mysql.user; ERROR 1044: Access denied for user ''@'localhost' to database 'mysql' mysql> SELECT CURRENT_USER(); -> '@localhost' davida ( USER() ), ( CURRENT_USER() )。 One davida 。 CURRENT_USER() utf8 。 DATABASE() utf8 ( ) 。 , , 。 mysql> SELECT DATABASE(); -> 'test' , DATABASE() NULL。 FOUND_ROWS() A SELECT LIMIT , 。 , LIMIT 。 , SELECT SQL_CALC_FOUND_ROWS , FOUND_ROWS() : mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name -> WHERE id > 100 LIMIT 10; mysql> SELECT FOUND_ROWS(); SELECT , LIMIT , SELECT ( SELECT SQL_CALC_FOUND_ROWS , LIMIT ,FOUND_ROWS() )。 FOUND_ROWS() , SELECT SQL_CALC_FOUND_ROWS 。 , : mysql> SELECT SQL_CALC_FOUND_ROWS * FROM ... ; mysql> SET @rows = FOUND_ROWS(); SELECT SQL_CALC_FOUND_ROWS, MySQL 。 , LIMIT , 。 SQL_CALC_FOUND_ROWS FOUND_ROWS() , 。 Web , 。 FOUND_ROWS() 。 SQL_CALC_FOUND_ROWS FOUND_ROWS() UNION SELECT , UNION ,LIMIT 。 UNION SELECT , UNION 。 SQL_CALC_FOUND_ROWS UNION LIMIT 。SQL_CALC_FOUND_ROWS UNION : SQL_CALC_FOUND_ROWS UNION SELECT 。 FOUND_ROWS() UNION ALL 。 ALL UNION, , FOUND_ROWS() 。 UNION LIMIT , SQL_CALC_FOUND_ROWS , UNION 。 LAST_INSERT_ID() LAST_INSERT_ID(expr) INSERT UPDATE AUTO_INCREMENT 。 mysql> SELECT LAST_INSERT_ID(); -> 195 ID 。 AUTO_INCREMENT AUTO_INCREMENT 。 , AUTO_INCREMENT 。 ID , 。 “magic” AUTO_INCREMENT , LAST_INSERT_ID() ( , NULL 0 )。 : INSERT , LAST_INSERT_ID() 。 INSERT 。 : mysql> USE test; Database changed mysql> CREATE TABLE t ( -> id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -> name VARCHAR(10) NOT NULL -> ); Query OK, 0 rows affected (0.09 sec) mysql> INSERT INTO t VALUES (NULL, 'Bob'); Query OK, 1 row affected (0.01 sec) mysql> SELECT * FROM t; +----+------+ | id | name | +----+------+ | 1 | Bob | +----+------+ 1 row in set (0.01 sec) mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+ 1 row in set (0.00 sec) mysql> INSERT INTO t VALUES -> (NULL, 'Mary'), (NULL, 'Jane'), (NULL, 'Lisa'); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM t; +----+------+ | id | name | +----+------+ | 1 | Bob | | 2 | Mary | | 3 | Jane | | 4 | Lisa | +----+------+ 4 rows in set (0.01 sec) mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 2 | +------------------+ 1 row in set (0.00 sec) 3 t, ID 2, LAST_INSERT_ID() 。 INSERT IGNORE , AUTO_INCREMENT , LAST_INSERT_ID() 0, 。 LAST_INSERT_ID() expr , , LAST_INSERT_ID() 。 : , : o mysql> CREATE TABLE sequence (id INT NOT NULL); o mysql> INSERT INTO sequence VALUES (0); : o mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1); o mysql> SELECT LAST_INSERT_ID(); UPDATE LAST_INSERT_ID() , 。 SELECT 。 mysql_insert_id() C API 。 25.2.3.36 ,“mysql_insert_id()”. LAST_INSERT_ID() , ID , 。 , UPDATE SELECT ( mysql_insert_id()), , 。 , mysql_insert_id() INSERT UPDATE , SELECT SET SQL C API LAST_INSERT_ID(expr) 。 ROW_COUNT() ROW_COUNT() 、 。 mysql mysql_affected_rows() C API 。 mysql> INSERT INTO t VALUES(1),(2),(3); , 3 (0.00 ) : 3 : 0 : 0 mysql> SELECT ROW_COUNT(); +-------------+ | ROW_COUNT() | +-------------+ | 3 | +-------------+ 1 (0.00 ) mysql> DELETE FROM t WHERE i IN(1,2); , 2 (0.00 ) mysql> SELECT ROW_COUNT(); +-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+ 1 (0.00 ) SCHEMA() DATABASE() 。 SESSION_USER() SESSION_USER() USER() 。 SYSTEM_USER() SYSTEM_USER() USER() 。 USER() MySQL / mysql> SELECT USER(); -> 'davida@localhost' , 。 CURRENT_USER() 。 : mysql> SELECT SUBSTRING_INDEX(USER(),'@',1); -> 'davida' USER() utf8 , '@' : mysql> SELECT SUBSTRING_INDEX(USER(),_utf8'@',1); -> 'davida' VERSION() MySQL 。 utf8 。 mysql> SELECT VERSION(); -> '5.1.2-alpha-standard' , -log , 。 12.9.4. DEFAULT(col_name) 。 。 mysql> UPDATE t SET i = DEFAULT(i)+1 WHERE id < 100; FORMAT(X,D) X '#,###,###.##', D , 。 D 0, , 。 mysql> SELECT FORMAT(12332.123456, 4); -> '12,332.1235' mysql> SELECT FORMAT(12332.1,4); -> '12,332.1000' mysql> SELECT FORMAT(12332.2,0); -> '12,332' GET_LOCK(str,timeout) str , timeout 。 , 1, 0 ( , ), NULL ( mysqladmin kill )。 GET_LOCK() , RELEASE_LOCK() ( ) , 。 。 。 , GET_LOCK() 。 。 , , 。 。 , db_name.str app_name.str 。 mysql> SELECT GET_LOCK('lock1',10); -> 1 mysql> SELECT IS_FREE_LOCK('lock2'); -> 1 mysql> SELECT GET_LOCK('lock2',10); -> 1 mysql> SELECT RELEASE_LOCK('lock2'); -> 1 mysql> SELECT RELEASE_LOCK('lock1'); -> NULL , RELEASE_LOCK() NULL , 'lock1' GET_LOCK() 。 INET_ATON(expr) , 。 4 8 。 mysql> SELECT INET_ATON('209.207.224.40'); -> 3520061480 。 , 209×2563 + 207×2562 + 224×256 + 40 。 INET_ATON() IP : mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1'); -> 2130706433, 2130706433 : INET_ATON() , INT UNSIGNED 。 ( ) INT , 127 IP 2147483647 ( , INET_ATON('127.255.255.255') )。 11.2 ,“ ”。 INET_NTOA(expr) (4 8 ), 。 mysql> SELECT INET_NTOA(3520061480); -> '209.207.224.40' IS_FREE_LOCK(str) str ( , )。 , 1 ( ), , 0 , NULL ( )。 IS_USED_LOCK(str) str ( , )。 , 。 NULL。 MASTER_POS_WAIT(log_name,log_pos[,timeout]) 。 , 。 。 SQL 、 、 , NULL。 , - 1。 MASTER_POS_WAIT() , SQL , NULL。 , 。 , MASTER_POS_WAIT() 。 0; 。 NAME_CONST(name,value) 。 , NAME_CONST() 。 mysql> SELECT NAME_CONST('myname', 14); +--------+ | myname | +--------+ | 14 | +--------+ MySQL 5.0.12。 。 , 20.4 ,“ ”。 mysqlbinlog 。 RELEASE_LOCK(str) GET_LOCK() , str 。 , 1, , 0 ( ), , NULL。 GET_LOCK() , , 。 DO RELEASE_LOCK() 。 13.2.2 ,“DO ”。 SLEEP(duration) ( ) duration , 0。 SLEEP() , 1。 duration 。 UUID() (UUID) , 《DCE 1.1: 》 ( A) CAE ( ) , 1997 10 The Open Group ( C706, http://www.opengroup.org/public/pubs/catalog/c706.htm). UUID 。2 UUID() 2 , 。 UUID 5 128 , aaaaaaaa-bbbb-cccc-ddddeeeeeeeeeeee : 3 。 4 , ( , )。 5 IEEE 802 , 。 , 。 ( , , )。 , 。 , 。 , MAC FreeBSD Linux 。 , MySQL 48 。 mysql> SELECT UUID(); -> '6ccd780c-baba-1026-9564-0040f4311e29' , UUID() 。 VALUES(col_name) INSERT … ON DUPLICATE KEY UPDATE … , UPDATE VALUES(col_name) , INSERT 。 ,UPDATE VALUES(col_name) col_name , 。 。 VALUES() INSERT ... UPDATE , NULL。 13.2.4 ,“INSERT ”. mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) -> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
*/