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);
*/