2013-08-20 35 views
1

請幫助我DEFAULT不組數據工作

CREATE TABLE RET (anim SET('dog','pig','voon') DEFAULT 'pig'); 

插入:

INSERT INTO RET VALUES('root') //empty string! Why? DEFAULT doesn't work! 

感謝。

回答

5

DEFAULT不會替換無效值,它只是定義了默認值,如果在插入沒有指定的使用。

+0

完美答案。謝謝 –

+0

如果在插入中指定爲NULL,該怎麼辦? NULL值是否被替換爲默認值? – Jorrit

+0

@Jorrit'null'是一個值,所以它將被用來代替默認值。小提琴在這裏:http://sqlfiddle.com/#!9/ea8037/1 – Joe

6

它的工作原理應該如此。 更改您的架構是這樣,例如

CREATE TABLE RET (id int, anim SET('dog','pig','voon') DEFAULT 'pig'); 

然後省略anim列在您的插入

INSERT INTO ret (id) VALUES(1); 

或者使用DEFAULT關鍵字

INSERT INTO ret (id, anim) VALUES(2, DEFAULT); 

輸出:

 
| ID | ANIM | 
------------- 
| 1 | pig | 
| 2 | pig | 

這裏是SQLFiddle演示

3

+1到@ peterm的答案,但FWIW這裏有一些其他的方法可以說明行爲:

INSERT INTO ret (anim) VALUES (DEFAULT); 
INSERT INTO ret() VALUES(); 

之所以插入,而不是一個空字符串值「根」的結果默認值是默認值在您指定值時未啓動。

值'root'不是SET定義中的有效條目之一,但在默認行爲下,MySQL「截斷」無效值並插入一個空集。它在截斷無效值時會生成警告,但不會阻止INSERT的發生。

您可以設置嚴格模式以禁用自動截斷。這將警告轉化爲錯誤,並且INSERT將失敗。

mysql> SET SQL_MODE=STRICT_ALL_TABLES; 
mysql> INSERT INTO RET VALUES('root'); 
ERROR 1265 (01000): Data truncated for column 'anim' at row 1 
+0

好評:「MySQL」截斷「無效值,並插入一個空集。」坦克爲你提供幫助。 –