Mysql:语法:标志符、关键字

backticks"`"字符括起的字符序列称之为 标志符。

  • 如果ansi_quotes模式打开,可以使用双引号"""括起的字符序列表示标志符
  • 标志符可以使用的字符可以是任意字符,当然还是只使用[0-9a-zA-Z_$]这些非特殊字符的好,而且推荐不要以数字或美元开头——大多数系统都是这样子的
  • 另外标志符如果是关键字(通常等于 保留字)必须括起来
  • 严重推荐标志符不要是"{m}e[n]"这种可能和科学计数法相混淆的形式!
  • 标志符不能含有ascii的nul(0x00)、\、/、.、nul、prn 等os中不允许的字符

标志符最大字符长度为64

标志符的限定:

  • [db_name.][tb_name.]col_name  --mysql的标准
  • [.]tb_name     --兼容odbc的限定

标志符的大小写敏感性:他是依赖于os的:windows上不区分,linux上区分

  • database、table、trigger、alias 是依赖os的。但在同一个语句中,必须完全相同
  • column、index、procedure、funcion、envent总是不区分的
  • lower_case_table_names:
  • 0:区分大小。存、找、比较。对于myisam存储引擎可能在某些大小不敏感的os上引起index使用问题
  • 1:小写。存、找、比较。    --推荐
  • 2:区分大小写进行os存储;按小写查找、比较。但是innodb存储引擎类的表却与"1"的行为相同

对于函数名称的解析规则:一句话(好的编程风格:不是和系统已有的东西重名!!!)

  • 通常函数分为:native内建、udf函数、stored functions。
  • 对于native函数有缺省的解析规则,但和ignore_space服务器的配置有关
  • 通常规则:如果内建函数后面是否具有express上下文,是则作为函数调用,否则就认为是标志符,适用于大多数函数。
  • 特殊规则:看函数名后是否仅仅跟着”(“,是作为函数调用,否作为标志符使用。这些函数可以通过sql_functions()查看

ignore_space:

  • disabled:只要是sql_functions()里列出的函数——将忽略上面的“缺省规则”,只要后面紧跟着”(“就认为是函数调用,可能会造成非表达式环境出错
  • enabled:(默认) 只要是sql_functions()里列出的函数,必须是显示的括起函数名作为标志符
原文地址:https://www.cnblogs.com/jinzhenshui/p/1495398.html