使用phpmyadmin導出sql的時候,常常會出現SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";的語句。通過看sql手冊,明白了這裡
設定的含義。
那麼可以回答幾個疑惑性問題了
一、設定sql模式有什麼作用?會産生什麼方面的影響?
模式定義mysql會支援哪些sql文法。以及應執行哪種資料驗證檢查。最終達到的目标:适應在不同環境中适應mysql,因為可
以根據各自的程式不同設定對于德sql操作模式。輸入如下語句可以知道,目前使用的sql模式,select @@sql_mode
比如,NO_AUTO_VALUE_ON_ZERO模式下,根據字面意思,沒有自動增量為0的值。
二、做一個實驗:
步驟1.SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO" 您運作的 SQL 語句已經成功運作了。
2. SELECT @@sql_mode
@@sql_mode
為什麼結果是空呢?沒有設定成功嗎?
原因分析:可能是是在phpmyadmin中運作語句的。因為我在mysql用戶端運作結果,能夠看到設定後的sql模式結果。此時在
phpmyadmin中卻看不到設定好的模式。那一項的結果是空。
3.插入一條資料
INSERT INTO `julebu`.`matches` (
`MATCHNO` ,
`TEAMNO` ,
`PLAYERNO` ,
`WON` ,
`LOST`
)
VALUES (
'0', 'gg', 'ghh', 'hhh', 'hh'
);
主鍵字段的值插入的值是0.結果看到,儲存的并不是0,而變成了1。也正好說明了sql模式"NO_AUTO_VALUE_ON_ZERO"起作用
了。不允許自動增量的值為0(手冊:MySQL遇到0值一般會生成新的序列号).經過進一步插入資料測試,注意了解這裡的新序
列号:是生成新的序列号。遇到0,假如原來表中已經有個序列号是3,那麼就會生成4.接着原來序列号的自增。
結束//////////////////////////////////////////////////////
知識收集:
預設sql模式是為空的。非嚴格模式,難怪我們平時,插入一個字段,資料超過字段,不會報錯,會自動截斷存儲。
使用嚴格模式(STRICT_TRANS_TABLES),插入的資料超過字段長度,比如常見的char字段類型,會報錯,ERROR 1406 (22001): Data too long for column 'testchar' at row 1。
還有日期類型的字段。如果設定的值超過日期大小,也不會報錯。
經驗:mysql之是以預設設定為空。非嚴格模式,也是有道理的。這樣容錯性強。給一個設定級别給大家,也是可以友善自己根據需要來調試,一般是不太會使用嚴格模式的,嚴格模式造成程式很難跑起來,遇到點超過字段長度的錯誤,都會影響運作。