MYSQL:针对整数检查的null行为

时间:2016-07-17 06:06:44

标签: mysql null

假设我有这张桌子:

#include<studio.h>
#include<string.h>
main()
{
    char *a;
    a=(char *)malloc(1);
    strcpy(a, "example");
}

并填写此记录:

CREATE TABLE `offers` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `status` int(11) DEFAULT NULL,
  )

现在运行此查询:

INSERT INTO offers (status) VALUES (null);

我期待从表中删除最新记录,但它没有?为什么?什么是解决这些问题的正确方法?

3 个答案:

答案 0 :(得分:4)

在SQL中,值NULL 非常特殊!几乎任何表达式中包含NULL值的表达式将评估为NULL。这意味着当您执行STATUS<>3时,如果STATUSNULL,则结果为NULL,当直接用作真值时,结果为false。因此,表达式WHERE STATUS <> 3选择具有3 以外的值的行。值为3的行和没有值的行(即NULL)将被选中。唯一一次比较NULL的变量是真的,如果你使用IS NULL比较或相关的特殊结构。如果您确实希望以建设性的方式使用NULL,则可能需要查看手册的相关部分。

答案 1 :(得分:1)

MySQL's documentation about NULL回答了这个问题。您正在进行的整数比较不满足NULL值。 NULL不被视为值,它表示没有值。如果你想删除那些你要说的行

DELETE FROM offers WHERE status <> 3 OR status IS NULL

答案 2 :(得分:0)

null不是字符串,它是mysql中的关键字,因此请使用: -

DELETE FROM offers WHERE STATUS is null