2017-02-24 87 views
0

我已創建了一個表,它是Employee表(MySQL的NOT NULL約束不起作用

create table person(
+--------+-----------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+--------+-----------------+------+-----+---------+----------------+ 
| p_id | int(3) unsigned | NO | PRI | NULL | auto_increment | 
| p_name | var char(50)  | NO |  | NULL |    | 
| p_add | var char(50)  | NO |  | NULL |    | 
| p_mob | int(10)   | YES |  | NULL |    | 
+--------+-----------------+------+-----+---------+----------------+ 
4 rows in set (0.02 sec) 

而在插入過程中,如果我寫的查詢等,在集

insert into employee values ('1','','',''); 
+------+--------+-------+-----------+ 
| p_id | p_name | p_add | p_mob  | 
+------+--------+-------+-----------+ 
| 1 |  |  | 908765432 | 
| 2 |  |  |  90 | 
+------+--------+-------+-----------+ 

2行(0.00秒)

如果我留下所有其餘列空白,那麼它必須給出一些錯誤,因爲我已經在我的查詢中寫入這些所有列爲不爲空,但爲什麼仍然插入空白的空值,無論我嘗試小號甲骨文的代碼,然後它在工作。 MySQL有沒有問題?

回答

0

如果你可以附上一些代碼,說明很難理解。 (我想你混淆了與表名太,person VS employee)你想要什麼,我認爲是:

insert into employee values ('1',NULL,NULL,NULL); 
0

在Oracle中,空字符串和NULL是一樣的。但是,在MySQL中,空字符串是一個字符串值,而不是NULL。因此,在MySQL的NOT NULL約束從來沒有阻止以下記錄的插入:

INSERT INTO employee VALUES ('1', '', '', ''); 

下插入失敗:

INSERT INTO employee VALUES ('1', NULL, '', ''); 

如果你需要一個乾淨地處理NULL和空字符串與MySQL中的相同,可以使用COALESCE(column, '')並將其與空字符串進行比較。