不是混淆

时间:2015-04-28 05:22:53

标签: mysql

phpMyAdmin中,当我们创建表时,默认情况下对所有字段都没有空约束...并且根据我的知识,当我们将约束设置为非空时...它不允许用户保留字段为空,根据此链接不为空.....

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

现在我的问题是......根据这个链接,不是null意味着每一行数据必须包含一个值 - 在插入或更新操作期间不能留空.....但当我以编程方式插入数据时{​​{ 1}},我只能在两个字段中插入数据,而其他字段仍为空白,尽管对这些字段没有空约束...并且仍然没有生成任何错误....所以我不明白如何不工作???

例如,我创建表,让我们说5个字段......

insert into

并在两个字段中插入值,如

   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)"; 所以它需要''作为值....而且我仍然可以插入数据而没有错误......这怎么可能? ?

3 个答案:

答案 0 :(得分:0)

设置了NOT NULL约束的所有内容都需要包含数据。如果以编程方式插入数据而不插入NOT NULL单元格的数据,则会出现SQL错误。

e.g。你有这张桌子:

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(或者设置为创建表时默认设置的任何数据)。

答案 1 :(得分:0)

也许你可以参考这个link

  

对于多行INSERT语句或INSERT INTO ... SELECT   在语句中,该列被设置为隐式默认值   列数据类型。对于数字类型,这是0,空字符串('')   用于字符串类型,以及日期和时间类型的“零”值。插入   INTO ... SELECT语句的处理方式与多行相同   插入,因为服务器不检查结果集   SELECT以查看它是否返回单行。 (对于单排   INSERT,当NULL插入NOT NULL时不会发出警告   柱。相反,该语句失败并出现错误。)

答案 2 :(得分:0)

如果列定义不包含显式DEFAULT值,则定义为" Not Null"然后Mysql会根据数据类型自动为列分配默认值。例如0表示整数和"" for varchar

如果在列上创建唯一索引,则第一行将接受默认值,但在后续插入时会出错。