在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)";
所以它需要''
作为值....而且我仍然可以插入数据而没有错误......这怎么可能? ?
答案 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
如果在列上创建唯一索引,则第一行将接受默认值,但在后续插入时会出错。