预期学习目标html
sql_mode经常使用值mysql
ONLY_FULL_GROUP_BY # 对于GROUP BY聚合操做,若是在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,由于列不在GROUP BY从句中 NO_AUTO_VALUE_ON_ZERO # 该值影响自增加列的插入。默认设置下,插入0或NULL表明生成下一个自增加值。若是用户 但愿插入的值为0,而该列又是自增加的,那么这个选项就有用了。 STRICT_TRANS_TABLES # 在该模式下,若是一个值不能插入到一个事务表中,则中断当前的操做,对非事务表不作限制 NO_ZERO_IN_DATE # 在严格模式下,不容许日期和月份为零 NO_ZERO_DATE # 设置该值,mysql数据库不容许插入零日期,插入零日期会抛出错误而不是警告。 ERROR_FOR_DIVISION_BY_ZERO # 在INSERT或UPDATE过程当中,若是数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL NO_AUTO_CREATE_USER # 禁止GRANT建立密码为空的用户 NO_ENGINE_SUBSTITUTION # 若是须要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常 PIPES_AS_CONCAT # 将"||"视为字符串的链接操做符而非或运算符,这和Oracle数据库是同样的,也和字符串的拼接函数Concat相相似 ANSI_QUOTES # 启用ANSI_QUOTES后,不能用双引号来引用字符串,由于它被解释为识别符
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
查看 sql_mode正则表达式
mysql> select @@global.sql_mode; +-------------------------------------------------------------------------------------------------------------------------------------------+ | @@global.sql_mode | +-------------------------------------------------------------------------------------------------------------------------------------------+ | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +-------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.01 sec)
更改配置并重启服务sql
[root@centos7 etc]# vim my.cnf sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION [root@centos7 etc]# systemctl restart mysqld
[Err] 1067 - Invalid default value for 'datetime'
同上数据库
[root@centos7 etc]# vim my.cnf sql_mode = ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION [root@centos7 etc]# systemctl restart mysqld
concatenate : vt. 把 (一系列事件、事情等)联系起来 adj. 链接的;联系在一块儿的
CONCAT(str1,str2...) # 20180101
CONCAT_WS(separator,str1,str2,...) 2018-01-01
GROUP_CONCAT(expr1,expr2) # 2018-01,2019-01,2020-01
要注意的是 UNION
的两个结果的列数要相同vim
SELECT COLUMN FROM TABLE_1 WHERE ISNULL('name') UNION ALL SELECT COLUMN FROM TABLE_2 WHERE 'name' IS NOT NULL
#非空 SELECT * FROM Table WHERE field IS NOT NULL; #空 SELECT * FROM Table WHERE field IS NULL;
交叉链接获得的是表内元素的 笛卡儿积
,应避免使用这种查询方式segmentfault
# 交叉链接 select * frome tableA cross join tableB # 交叉链接 select * frome tableA , tableB
与like
相似,可是限制条件是知足正则表达式便可,RLIKE
是REGEXP
的赞成关键字后端
SELECT * FROM data WHERE `id` REGEXP '[0-9]+'; SELECT * FROM data WHERE `id` RLIKE '[0-9]+';
# 把ip转为无符号整型(4-8位) inet_aton # 把整型的ip转为ip地址 inet_ntoa
# 相似三元运算符 第一个为真时返回第二个表达式的值 不然返回第三个表达式的值 IF(expr1, expr2, expr3) # 匹配选择 SELECT CASE flag WHEN 1 THEN 'man' WHEN 0 THEN 'woman' WHEN -1 THEN 'bisexual' ELSE 'unknown' END as gender # 空判断(空返回第一个表达式 不然返回第二个表达式) IFNULL(expr1, expr2)
# 低版本的 PHP 使用 mysql_query() 时可使用如下函数进行转义,防止注入 mysql_real_escape_string()
后端相关技能(一):数据库
后端相关技能(二):Vue框架
后端相关技能(三):正则表达式
后端相关技能(四):计算机网络
后端相关技能(五):Node.js
后端相关技能(六):压力测试
后端相关技能(七):依赖包管理centos