Linux系統(tǒng)中,MySQL數(shù)據(jù)庫是一款非常常用的數(shù)據(jù)庫管理系統(tǒng)。在MySQL中,SQL模式(SQL_MODE)是一個非常重要的設置,它能夠控制MySQL在執(zhí)行SQL語句時的嚴格度。SQL模式提供了一種能力,能夠使MySQL遵循更加嚴格的SQL標準。
一般情況下,MySQL默認采用了一個比較寬松的SQL_MODE,它允許程序犯錯,然后MySQL會自動把程序的犯錯行為轉化為一個合乎邏輯的結果。但是,這樣做并不總是好的選擇。如果您的應用程序依賴于準確的結果,那么保持一個嚴格的SQL_MODE會更加安全可靠。
# 查看默認的SQL_MODE SELECT @@sql_mode; # 設置SQL_MODE為嚴格模式 SET sql_mode = 'STRICT_TRANS_TABLES';
SQL_MODE有多個取值,下面我們來介紹一下其中幾個重要的取值:
- STRICT_TRANS_TABLES: 把錯誤轉化為警告信息,并且數(shù)據(jù)不會被插入
- NO_ZERO_DATE: 不允許日期默認為'0000-00-00'
- ONLY_FULL_GROUP_BY: 只允許SELECT語句的GROUP BY中使用包含在SELECT語句中的列
推薦的SQL_MODE是:"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,ONLY_FULL_GROUP_BY"。這個SQL_MODE能夠確保數(shù)據(jù)的嚴格性,并且禁止了廢棄的和不安全的數(shù)據(jù)庫行為。如果一個SQL查詢違反了SQL_MODE,MySQL會表示出警告或返回錯誤信息。