当您运行插入查询时,它会为user_name
和branch
列插入空字符串。我能够复制这个。
如果运行此查询,将非空列显式设置为空,则会返回错误:
INSERT INTO student( name, user_name, branch ) VALUES ( 'harjeet', null, null )
有关数据类型默认值,请参阅 MySql 5.0 参考:
从 MySQL 5.0.2 开始,如果列定义不包含显式 DEFAULT 值,MySQL 将按如下方式确定默认值:
如果列可以将 NULL 作为值,则使用显式 DEFAULT NULL 子句定义该列。这与 5.0.2 之前的相同。
如果该列不能以 NULL 作为值,MySQL 将定义没有显式 DEFAULT 子句的列。例外:如果列被定义为 PRIMARY KEY 的一部分但未显式定义为 NOT NULL,则 MySQL 将其创建为 NOT NULL 列(因为 PRIMARY KEY 列必须为 NOT NULL),但也会使用隐式默认值为其分配 DEFAULT 子句价值。为防止这种情况,请在任何 PRIMARY KEY 列的定义中包含显式 NOT NULL。
对于没有显式 DEFAULT 子句的 NOT NULL 列的数据输入,如果 INSERT 或 REPLACE 语句不包含该列的值,或者 UPDATE 语句将该列设置为 NULL,MySQL 根据有效的 SQL 模式处理该列时间:
如果启用了严格的 SQL 模式,则事务表会发生错误并回滚语句。对于非事务性表,会发生错误,但如果多行语句的第二行或后续行发生这种情况,则会插入前面的行。
如果未启用严格模式,MySQL 会将列设置为列数据类型的隐式默认值。
所以看起来你的 MySql 没有启用严格模式。列的隐式默认值varchar
是空字符串,所以这就是所使用的。如果您希望它返回错误,请打开字符串模式。