MySQL 5.7 Reference Manual Chapter 10 Language Structure 参考手册第十章语言结构内容总结

原创 2016年11月11日 16:59:34

字符串自动连接 'a string' 等价于 'a' ' ' 'string'

几种字符串中包含引号的方式
* SELECT 'single quote ''' 输出 single quote '
* SELECT "double quote """ 输出 double quote "
* SELECT "single and double quote \' \"" 输出 single and double quote ' "
* 单引号中可直接使用双引号,不需要做任何处理,相反也成立

DATE
'YYYY-MM-DD' or 'YY-MM-DD' or 'YYYYMMDD' or 'YYMMDD' or YYYYMMDD or YYMMDD

DATETIME and TIMESTAMP
'YYYY-MM-DD HH:MM:SS' or 'YY-MM-DD HH:MM:SS' or 'YYYYMMDDHHMMSS' or 'YYMMDDHHMMSS' or YYYYMMDDHHMMSS or YYMMDDHHMMSS

两数字表示年 MySQL 如下解析
range 70-99 are converted to 1970-1999
range 00-69 are converted to 2000-2069

如果使用分割符 month, day, hour, minute, second 前零可以省略
'2015-06-09 01:02:03' same '2015-6-9 1:2:3'

十六进制表示,X'val' or 0xval,第一种表示方法 val 中必须有 0,解决方法就是数字以 0 开头

X'01AF'
X'01af'
x'01AF'
x'01af'
0x01AF
0x01af
mysql> SET @v1 = X'41';
mysql> SET @v2 = X'41'+0;
mysql> SET @v3 = CAST(X'41' AS UNSIGNED);
mysql> SELECT @v1, @v2, @v3;
+------+------+------+
| @v1  | @v2  | @v3  |
+------+------+------+
| A    |   65 |   65 |
+------+------+------+

X'' 代表零长度十六进制字符串或数字零

十六进制字符串常被用来填充 BLOB 列

转换数字或字符串至十六进制字符串
SELECT HEX('cat');

比特表示,b'val' or 0bval

b'01'
B'01'
0b01
mysql> SET @v1 = b'1100001';
mysql> SET @v2 = b'1100001'+0;
mysql> SET @v3 = CAST(b'1100001' AS UNSIGNED);
mysql> SELECT @v1, @v2, @v3;
+------+------+------+
| @v1  | @v2  | @v3  |
+------+------+------+
| a    |   97 |   97 |
+------+------+------+

b'' 代表零长度二进制字符串或数字零

二进制字符串常被用来填充 BIT 列

比特可应用如下场景,存储各种各样开关,最高支持 64 位

mysql> CREATE TABLE t (b BIT(8));
mysql> INSERT INTO t SET b = b'11111111';
mysql> SELECT b+0, BIN(b), OCT(b), HEX(b) FROM t;
+------+----------+--------+--------+
| b+0  | BIN(b)   | OCT(b) | HEX(b) |
+------+----------+--------+--------+
|  255 | 11111111 | 377    | FF     |
+------+----------+--------+--------+

布尔值

mysql> SELECT TRUE, true, FALSE, false;
+------+------+-------+-------+
| TRUE | TRUE | FALSE | FALSE |
+------+------+-------+-------+
|    1 |    1 |     0 |     0 |
+------+------+-------+-------+

空值 NULL 不区分大小写,同义词 \N 区分大小写

避免数据传输问题(大小写表名)
* Use lower_case_table_names=1 on all systems.
* Use lower_case_table_names=0 on Unix and lower_case_table_names=2 on Windows.

在 Unix 中你想设置 lower_case_table_names = 1,必须在重启前转换旧的数据库名和表名
重命名表
RENAME TABLE T1 TO t1;
整个数据库
Use mysqldump to dump each database:
mysqldump --databases db1 > db1.sql
Use DROP DATABASE to drop each database.
Stop the server, set lower_case_table_names, and restart the server.
Reload the dump file for each database.
mysql < db1.sql

用户自定义变量,变量会自动释放在当客户端会话结束的时候
不区分大小写,最大长度 64 字符,SET 语法中 = 等价 :=,若是不使用 SET,只能用 := 声明变量
SET @var_name = expr [, @var_name = expr] ...

mysql> SET @t1=1, @t2=2, @t3:=4;
mysql> SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;
+------+------+------+--------------------+
| @t1  | @t2  | @t3  | @t4 := @t1+@t2+@t3 |
+------+------+------+--------------------+
|    1 |    2 |    4 |                  7 |
+------+------+------+--------------------+

用户变量被 Selected 在结果集,它以 String 类型返回给客户端
如果你引用一个未被初始化的变量,它的值是 NULL 类型是 String

不要声明变量的时候直接使用它
SET @a = @a + 1;

用户变量被用来存储数据,它们不能直接用在 SQL 语法中当成标识符或标识符的一部分,例如表名或数据库名,即便变量被引号括起来

SELECT c1 FROM t;
+----+
| c1 |
+----+
|  0 |
+----+
|  1 |
+----+
SET @col = "c1";
SELECT @col FROM t;
+------+
| @col |
+------+
| c1   |
+------+
SELECT `@col` FROM t;
ERROR 1054 (42S22): Unknown column '@col' in 'field list'

解决办法就是构造字符串通过 prepared statement 稍后执行

SET @c = "c1";
SET @s = CONCAT("SELECT ", @c, " FROM t");
PREPARE stmt FROM @s;
Statement prepared
EXECUTE stmt;
+----+
| c1 |
+----+
|  0 |
+----+
|  1 |
+----+
DEALLOCATE PREPARE stmt;

支持三种注释方式
* From a # character to the end of the line.
* From a – sequence to the end of the line.
* From a /* sequence to the following */ sequence, as in the C programming language.
– 注释方式,第二个破折号后面至少一个 whitespace 或 control character,例如 space 和 tab
不支持嵌套注释

====本文内容已完,宣传我的项目====
欢迎关注《休闲益智游戏》微信服务号
谢谢

版权声明:本文为博主原创文章,未经博主允许不得转载。

MySQL 5.7 Reference Manual Chapter 13 Functions and Operators 参考手册第十三章函数与操作符内容总结

MySQL 5.7 Reference Manual Chapter 13 Functions and Operators 参考手册第十三章函数与操作符内容总结...

MySQL 5.7 Reference Manual Chapter 4 Tutorial 参考手册第四章教程内容总结

MySQL 5.7 Reference Manual Chapter 4 Tutorial 参考手册第四章教程内容总结

【MySQL 5.7 Reference Manual】15.4.3 Adaptive Hash Index(自适应哈希索引)

自适应哈希索引(AHI)使InnoDB平台看起来更像一个内存数据库(在系统负载适当并且分配给缓存池的内存充裕的情况下),且不牺牲任何事务特性或可靠性。这个特性可以在服务启动时通过innodb_adap...

【MySQL 5.7 Reference Manual】15.4.2 Change Buffer(变更缓冲)

变更缓冲是一个特殊的数据结构,当目标页不在缓冲池中时,变更缓冲负责缓存对二级索引页的变更。被缓冲的变更内容可能是INSERT,UPDATE,或DELETE操作(DML)的结果。在下一次读操作时这些页会...

【MySQL 5.7 Reference Manual】15.4.12.1 InnoDB Temporary Table Undo Logs(InnoDB临时表Undo日志)

临时表undo日志,在MySQL 5.7.2中被引入,用于存放临时表和相关对象。这种类型的undo日志不是一个redo日志,因为临时表在崩溃恢复期间不会被恢复并且不需要redo日志。然而,临时表und...

【MySQL 5.7 Reference Manual】15.4.13 Redo Log(Redo日志)

redo日志基于磁盘的数据结构,在崩溃恢复期间用于纠正不完整事务所写入的数据。在正常操作情况下,redo日志编码请求以改变InnoDB表数据,这些数据来自于SQL语句或低级API调用的结果。如果在意外...

【MySQL 5.7 Reference Manual】15.4.7 Doublewrite Buffer(双写缓冲)

双写缓冲是一个位于系统表空间中的存储区域,InnoDB缓冲池中刷出的页在被写入数据文件的适当位置之前会先写入这里。只有把页刷出并写入到双写缓冲之后,InnoDB才会把页写入到适当位置。假如此时操作系统...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL 5.7 Reference Manual Chapter 10 Language Structure 参考手册第十章语言结构内容总结
举报原因:
原因补充:

(最多只允许输入30个字)