2013-12-22 31 views
2

我正在使用版本5.5的MySQL客戶端。今天我嘗試了「NOT NULL」來設置一個屬性,但只有在我的測試中發現它不起作用。有人幫助解釋這一點?爲什麼「NOT NULL」在MySQL客戶端中不起作用

//Create Table 
    CREATE TABLE state(
      state_cd char(2) NOT NULL, 
      state_name varchar(30) 
      ); 

    //Insert an "Invalid" Record 
    INSERT INTO state(state_name) 
      values('Massachusetts'); 

    //DB Operation succeeds!!! 
    Query OK, 1 row affected, 1 warning (0.09 sec) 

    //Check the table 
    mysql> select * from state; 
    +----------+---------------+ 
    | state_cd | state_name | 
    +----------+---------------+ 
    |   | Massachusetts | 
    +----------+---------------+ 
    1 row in set (0.00 sec) 


    mysql> describe state; 
    +------------+-------------+------+-----+---------+-------+ 
    | Field  | Type  | Null | Key | Default | Extra | 
    +------------+-------------+------+-----+---------+-------+ 
    | state_cd | char(2)  | NO |  | NULL |  | 
    | state_name | varchar(30) | YES |  | NULL |  | 
    +------------+-------------+------+-----+---------+-------+ 
    2 rows in set (0.00 sec) 
+1

它確實有效,但NOT NULL字段不能爲空,但可能爲空。 –

回答

3

如果您嘗試插入或更新NOT NULLNULL,MySQL將它設置爲默認值,而不是(在這種情況下,事實上的默認爲空字符串)。 MySQL也會發出一個警告,你可以通過SHOW WARNINGS來看到這個警告,它應該說明一些錯誤的列值。它不會阻止您試圖插入空值,但它不會接受該值。

您可能要指定一個明確的默認值

state_cd char(2) NOT NULL DEFAULT '--' 

如果你想嘗試,你可以在應用程序級別處理這個或看看MySQL server modes,您可以設置當查詢失敗TRADITIONAL因此INSERT/UPDATE將嘗試添加不正確的值時失敗。