預期學習目標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