假设我有这张桌子:
#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);
我期待从表中删除最新记录,但它没有?为什么?什么是解决这些问题的正确方法?
答案 0 :(得分:4)
在SQL中,值NULL
非常特殊!几乎任何表达式中包含NULL
值的表达式将评估为NULL
。这意味着当您执行STATUS<>3
时,如果STATUS
为NULL
,则结果为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