2015-04-28 55 views
0

phpMyAdmin,當我們創建表時,默認情況下,所有字段都不存在空約束......並且根據我的知識,當我們將約束設置爲非空時......它不允許用戶保留字段爲空這是不是null按照該鏈接.....非空混淆

http://www.techopedia.com/definition/27370/not-null-constraint

現在我的問題is..according這個環節,而不是null表示數據的每一行必須包含一個價值 - 它不能在插入或更新操作期間留空白.....但是當我像insert into一樣以編程方式插入數據時,我能夠在兩個字段中插入數據,而其他字段仍保持空白,儘管在該字段上沒有空約束......並且仍然不會產生任何錯誤....所以我不明白如何不空作品?

例如,我創建表,可以說5場......

create table myTable 
    (
     Column1 int not null, 
     Column2 int not null, 
     Column3 int not null, 
     Column4 int not null, 
     Column5 int not null, 
    ) 

,並在短短的領域,如

"INSERT INTO myTable (column1,column2) VALUES(10,20)"; 

插入值,但其他領域我不給任何''所以它需要0作爲值....仍然我能夠插入數據沒有錯誤...這怎麼可能?

+1

可能的重複[我設置MySQL列爲「NOT NULL」,但我仍然可以插入一個空值](http://stackoverflow.com/questions/7264702/i-set-a-mysql-column-to -not-null-but-still-i-can-insert-an-empty-value) –

回答

0

所有具有NOT NULL約束集的東西都需要包含數據。如果以編程方式插入數據,並且不爲NOT NULL單元格插入數據,則會收到SQL錯誤。

例如你有這樣的表:

CREATE TABLE test (
id INTEGER PRIMARY_KEY AUTO_INCREMENT, 
some_value INTEGER NOT NULL, 
some_other_value INTEGER); 

然後SOME_VALUE將包含在每一個數據集中返回,some_other_value可能會或可能不包含在返回的每個數據集的數據。解決這個問題的唯一事情是這樣的:

CREATE TABLE test (
id INTEGER PRIMARY_KEY AUTO_INCREMENT, 
some_value INTEGER NOT NULL DEFAULT 0, 
some_other_value INTEGER); 

如果現在設置數據編程,不設置SOME_VALUE數據,SOME_VALUE將默認爲0(或任何數據您的默認設置爲上表的創建)。

0

也許你可以參考這個link

對於多行INSERT語句或INSERT INTO ... SELECT語句 ,列被設置爲 列數據類型的隱含默認值。數字類型爲0,字符串類型爲空字符串('') ,日期和時間類型爲「0」值。 INSERT INTO ... SELECT語句的處理方式與插入多行 的方式相同,因爲服務器不檢查來自 SELECT的結果集以查看它是否返回單行。如果列定義包含沒有明確的默認值,它(當NULL被插入一個NOT NULL 列對於單排 INSERT,沒有出現警告。相反,聲明因錯誤而失敗。)

0

被定義爲「Not Null」,那麼Mysql將根據數據類型自動將默認值分配給該列。例如0代表整數,「」代表varchar

如果您在列上創建唯一索引,則會在第一行接受默認值,但會在後續插入時發生錯誤。

+0

看看編輯...我只是插入2列的值和其他我甚至沒有提及...所以對於其他字段,當我沒有提及''或'「時,它會自動生成0」 –

+0

準確地說,0是默認值(因爲它是int類型) - 所以它隱含着一個不設置值的插入。 – mseifert