<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MySQL的sql_mode模式說明及設置

      MySQL的sql_mode合理設置

          sql_mode是個很容易被忽視的變量,默認值是空值,在這種設置下是可以允許一些非法操作的,比如允許一些非法數據的插入。在生產環境必須將這個值設置為嚴格模式,所以開發、測試環境的數據庫也必須要設置,這樣在開發測試階段就可以發現問題.

          

      sql model 常用來解決下面幾類問題

        (1) 通過設置sql mode, 可以完成不同嚴格程度的數據校驗,有效地保障數據準備性。

        (2) 通過設置sql model 為寬松模式,來保證大多數sql符合標準的sql語法,這樣應用在不同數據庫之間進行遷移時,則不需要對業務sql 進行較大的修改。

        (3) 在不同數據庫之間進行數據遷移之前,通過設置SQL Mode 可以使MySQL 上的數據更方便地遷移到目標數據庫中。

          

      sql_mode常用值如下: 

          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后,不能用雙引號來引用字符串,因為它被解釋為識別符

       

          ORACLE的sql_mode設置等同:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER.

           

          如果使用mysql,為了繼續保留大家使用oracle的習慣,可以對mysql的sql_mode設置如下:

           

          在my.cnf添加如下配置

          [mysqld]

          sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,

          ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,PIPES_AS_CONCAT,ANSI_QUOTES'

            

            

      注意:MySQL5.6和MySQL5.7默認的sql_mode模式參數是不一樣的,5.6的mode是NO_ENGINE_SUBSTITUTION,其實表示的是一個空值,相當于沒有什么模式設置,可以理解為寬松模式。5.7的mode是STRICT_TRANS_TABLES,也就是嚴格模式。

       

          如果設置的是寬松模式,那么我們在插入數據的時候,即便是給了一個錯誤的數據,也可能會被接受,并且不報錯,例如:我在創建一個表時,該表中有一個字段為name,給name設置的字段類型時char(10),如果我在插入數據的時候,其中name這個字段對應的有一條數據的長度超過了10,例如'1234567890abc',超過了設定的字段長度10,那么不會報錯,并且取前十個字符存上,也就是說你這個數據被存為了'1234567890',而'abc'就沒有了,但是我們知道,我們給的這條數據是錯誤的,因為超過了字段長度,但是并沒有報錯,并且mysql自行處理并接受了,這就是寬松模式的效果,其實在開發、測試、生產等環境中,我們應該采用的是嚴格模式,出現這種錯誤,應該報錯才對,所以MySQL5.7版本就將sql_mode默認值改為了嚴格模式,并且我們即便是用的MySQL5.6,也應該自行將其改為嚴格模式,而你記著,MySQL等等的這些數據庫,都是想把關于數據的所有操作都自己包攬下來,包括數據的校驗,其實好多時候,我們應該在自己開發的項目程序級別將這些校驗給做了,雖然寫項目的時候麻煩了一些步驟,但是這樣做之后,我們在進行數據庫遷移或者在項目的遷移時,就會方便很多,這個看你們自行來衡量。mysql除了數據校驗之外,你慢慢的學習過程中會發現,它能夠做的事情還有很多很多,將你程序中做的好多事情都包攬了。

       

      改為嚴格模式后可能會存在的問題:

          若設置模式中包含了NO_ZERO_DATE,那么MySQL數據庫不允許插入零日期,插入零日期會拋出錯誤而不是警告。例如表中含字段TIMESTAMP列(如果未聲明為NULL或顯示DEFAULT子句)將自動分配DEFAULT '0000-00-00 00:00:00'(零時間戳),也或者是本測試的表day列默認允許插入零日期 '0000-00-00' COMMENT '日期';這些顯然是不滿足sql_mode中的NO_ZERO_DATE而報錯。

       

      模式設置和修改(以解決上述問題為例):

          方式一:先執行select @@sql_mode,復制查詢出來的值并將其中的NO_ZERO_IN_DATE,NO_ZERO_DATE刪除,然后執行set sql_mode = '修改后的值'或者set session sql_mode='修改后的值';,例如:set session sql_mode='STRICT_TRANS_TABLES';改為嚴格模式

              此方法只在當前會話中生效,關閉當前會話就不生效了。

          方式二:先執行select @@global.sql_mode,復制查詢出來的值并將其中的NO_ZERO_IN_DATE,NO_ZERO_DATE刪除,然后執行set global sql_mode = '修改后的值'。

              此方法在當前服務中生效,重新MySQL服務后失效

       

          方法三:在mysql的安裝目錄下,或my.cnf文件(windows系統是my.ini文件),新增 sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,

              添加my.cnf如下:

              [mysqld]

              sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER

       

              然后重啟mysql。

          此方法永久生效.當然生產環境上是禁止重啟MySQL服務的,所以采用方式二加方式三來解決線上的問題,那么即便是有一天真的重啟了MySQL服務,也會永久生效了。

      posted @ 2019-07-23 22:42  未來&你好  閱讀(622)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成人国产乱对白在线观看| 色综合久久一区二区三区| 国厂精品114福利电影免费| 国产色视频一区二区三区qq号| 国产桃色在线成免费视频| 国产精品久久久久鬼色| 熟妇人妻不卡中文字幕| 两个人的视频www免费| 免费视频一区二区三区亚洲激情| 中文字幕人妻有码久视频| 日韩精品有码中文字幕| 综合色一色综合久久网| 乱女乱妇熟女熟妇综合网| 亚洲一区二区啊射精日韩| 成人动漫综合网| 日韩精品亚洲专在线电影| 久久久久中文伊人久久久| 内地偷拍一区二区三区| 免费看国产精品3a黄的视频| 99精品人妻少妇一区| 日韩狼人精品在线观看| 中文字幕第一页亚洲精品| gogogo高清在线播放免费| 国产亚洲精品自在久久vr| 亚洲天堂一区二区三区四区| 国产在线观看网址不卡一区 | 亚洲色大成网站www久久九九| 欧美日韩性高爱潮视频| 轮台县| 国产又色又爽又高潮免费| 国产性色的免费视频网站| 汤阴县| 久久青青草原亚洲AV无码麻豆| 无码熟妇人妻AV在线影片最多| 黑人大荫道bbwbbb高潮潮喷| 国产AV大陆精品一区二区三区 | 国产热A欧美热A在线视频| 久久精品青青大伊人av| 无套内谢少妇一二三四| 色琪琪丁香婷婷综合久久| 美女一区二区三区亚洲麻豆|