【问题标题】:MySQL not null constraint doesn't workMySQL 非空约束不起作用
【发布时间】:2017-02-24 07:23:11
【问题描述】:

我已经创建了一张员工表(

create table person(
+--------+-----------------+------+-----+---------+----------------+
| Field  | Type            | Null | Key | Default | Extra          |
+--------+-----------------+------+-----+---------+----------------+
| p_id   | int(3) unsigned | NO   | PRI | NULL    | auto_increment |
| p_name | var char(50)     | NO   |     | NULL    |                |
| p_add  | var char(50)     | NO   |     | NULL    |                |
| p_mob  | int(10)         | YES  |     | NULL    |                |
+--------+-----------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)

在插入过程中,如果我编写类似的查询。

insert into employee values ('1','','','');
+------+--------+-------+-----------+
| p_id | p_name | p_add | p_mob     |
+------+--------+-------+-----------+
|    1 |        |       | 908765432 |
|    2 |        |       |        90 |
+------+--------+-------+-----------+

集合中的 2 行(0.00 秒)

如果我将所有其余列留空,那么它必须给出一些错误,因为我在查询中将这些所有列都写为 Not Null 但为什么它仍然插入空白的 null ,无论我是否尝试相同的代码甲骨文然后它正在工作。 MySQL有什么问题吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    如果能附上一些代码就好了,说明很难理解。 (我认为您也对表名感到困惑,person vs employee)我认为您想要的是:

    insert into employee values ('1',NULL,NULL,NULL);
    

    【讨论】:

      【解决方案2】:

      在 Oracle 中,空字符串和NULL 是一回事。但是,在 MySQL 中,空字符串是字符串值,而不是 NULL。因此,在 MySQL 中,您的非空约束永远不会阻止插入以下记录:

      INSERT INTO employee VALUES ('1', '', '', '');
      

      以下插入失败:

      INSERT INTO employee VALUES ('1', NULL, '', '');
      

      如果您需要一种方法来干净地处理NULL 和空字符串,就像在 MySQL 中一样,您可以使用 COALESCE(column, '') 并将其与空字符串进行比较。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-07
        • 1970-01-01
        • 2011-01-08
        相关资源
        最近更新 更多