可以在INSERT操作中省略某些列。省略的列必须满足以下某个条件:
(1)该列定义为允许NULL值
(2)在表定义中给出默认值。我现在有一张表,表创建语句是:
CREATE TABLE `test` (
 `id` int(11) NOT NULL auto_increment,
 `name` varchar(50) collate utf8_bin NOT NULL,
 `sex` varchar(50) collate utf8_bin NOT NULL,
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=202 DEFAULT CHARSET=utf8 COLLATE=utf8_binname和sex列是NOT NULL的,而且都没有默认值。
但我用INSERT插入语句时,如果省略他们,也可以正常插入
如:INSERT INTO test(name) values('ll');   INSERT INTO test(sex) values('male');
那不就和书上说的相悖了吗?这是怎么回事呢?谢谢!

解决方案 »

  1.   

    插入的不是NULL值
    SELECT *,IFNULL(sex,'1'),IFNULL(NAME,'aa') FROM test
    看看结果
      

  2.   


    嗯我知道插进去的不是NULL,我只是想知道MySQL中NULL有什么意义呢?尤其是在创建表时的列约束NOT NULL。另外书上说的:
    可以在INSERT操作中省略某些列。省略的列必须满足以下某个条件:
    (1)该列定义为允许NULL值
    (2)在表定义中给出默认值。这个说法是错的吗???
      

  3.   

    no
    如果一个字段中没有指定DEFAULT修饰符,MySQL会依据这个字段是NULL还是NOT NULL自动设置默认值。如果指定字段可以为NULL,则MySQL为其设置默认值为NULL。如果是NOT NULL字段,MySQL对于数值类型插入0,字符串类型插入空字符串,时间戳类型插入当前日期和时间,ENUM类型插入枚举组的第一条。