我用的是Mysql5.5,我创建一张表,f2和f3字段都是非空字段
CREATE TABLE t_tee (f1 INT,f2 INT NOT NULL,f3 VARCHAR(20) NOT NULL);
我执行
insert into t_tee (f1) values (1);
数据库只给我提出警告,数据依然能插进去,
f2和f3的结果会插入0和''
但是这种情况下,我不想让这条记录插入,我应该怎么设置。

解决方案 »

  1.   

    你有default吗?没default应该不会进去的,或者你用的是工具?
      

  2.   

    程序控制,没有DEFAULT也可以插入,int就是0
      

  3.   

    mysql会抛错至少我的是这样,不能插入
      

  4.   

    注意‘’ 和null 得区别!!数据库中是有很大差别的,特别是插入的时候!!
      

  5.   

    检查一下你的系统变量 sql_modeselect @@sql_mode;
      

  6.   

    有一个办法,不过没经过权威验证,LZ可以考虑尝试一下(以f3列为例)。首先把这个列改为允许为空,然后创建两个触发器BEFORE INSERT和BEFORE UPDATE,当显式插入null或者隐式插入null(即类似insert into t_tee (f1) values (1))的时候,执行一条明显错误的SQL语句,就会导致插入null失败;在把这列UPDATE为null的时候,同样也执行这条明显错误的SQL语句,就会导致更新为null失败。
    这样就保证了该列不为null,且当不显式为该列赋值的时候报错。示例代码如下(只以f3列为例):
    插入前触发器:
    DELIMITER $$
    DROP TRIGGER IF EXISTS testtable_before_insert $$
    CREATE TRIGGER testtable_before_insert
        BEFORE INSERT ON testtable FOR EACH ROW
    BEGIN
      IF NEW.name is null THEN
        insert testtable values ('hello','','');
      END IF;
    END $$
    更新前触发器:
    DELIMITER $$
    DROP TRIGGER IF EXISTS t_tee_before_update $$
    CREATE TRIGGER t_tee_before_update
        BEFORE UPDATE ON t_tee FOR EACH ROW
    BEGIN
      IF NEW.f3 is null THEN
        insert t_tee values ('hello','','');
      END IF;
    END $$
      

  7.   

    刚才第一个触发器代码里的表名和列名写的都是我尝试时用的,我不小心粘错~我再粘一次:)
    有一个办法,不过没经过权威验证,LZ可以考虑尝试一下(以f3列为例)。首先把这个列改为允许为空,然后创建两个触发器BEFORE INSERT和BEFORE UPDATE,当显式插入null或者隐式插入null(即类似insert into t_tee (f1) values (1))的时候,执行一条明显错误的SQL语句,就会导致插入null失败;在把这列UPDATE为null的时候,同样也执行这条明显错误的SQL语句,就会导致更新为null失败。
    这样就保证了该列不为null,且当不显式为该列赋值的时候报错。示例代码如下(只以f3列为例):
    插入前触发器:
    DELIMITER $$
    DROP TRIGGER IF EXISTS t_tee_before_insert $$
    CREATE TRIGGER t_tee_before_insert
      BEFORE INSERT ON t_tee FOR EACH ROW
    BEGIN
      IF NEW.f3 is null THEN
      insert t_tee values ('hello','','');
      END IF;
    END $$
    更新前触发器:
    DELIMITER $$
    DROP TRIGGER IF EXISTS t_tee_before_update $$
    CREATE TRIGGER t_tee_before_update
      BEFORE UPDATE ON t_tee FOR EACH ROW
    BEGIN
      IF NEW.f3 is null THEN
      insert t_tee values ('hello','','');
      END IF;
    END $$
      

  8.   


    知道了,设置STRICT_TRANS_TABLES或者STRICT_all_TABLES,即可。