我有一个已设置为允许Null的字段,但我现在想要将其更改为不允许Null。MySQL从零空间变为非空
当我试图改变这个我不能,因为PhpMyAdmin已经将所有以前的记录设置为空。
我该如何解决这个问题?
是否有一个查询,我可以把这将删除所有的空值,并将字段设置为非空?
我有一个已设置为允许Null的字段,但我现在想要将其更改为不允许Null。MySQL从零空间变为非空
当我试图改变这个我不能,因为PhpMyAdmin已经将所有以前的记录设置为空。
我该如何解决这个问题?
是否有一个查询,我可以把这将删除所有的空值,并将字段设置为非空?
当然。但是,你是什么意思“删除所有的NULL
值?”这是否意味着要删除该字段中具有NULL
的所有行?如果是这样,你可以这样做:
DELETE FROM your_table WHERE your_field IS NULL;
如果您想保留这些行,你得把一些其他的价值在这一领域。有没有道理?如果你想保留的行
UPDATE your_table SET your_field = 42 WHERE your_field IS NULL;
(其中,当然,42
是要改用任何值。)
,并没有任何:如果是这样,你可以这样做其他值可以使用,那么现在有的NULL
应该保留,现在可能需要重新评估为什么要将字段设置为NOT NULL
。
UPDATE my_precious_table
SET stinky_field TO my_favourite_non_null_value
WHERE stinky_field IS NULL;
你似乎有点困惑,至于什么是空的真的。以下是我在其他地方发布的文章,应该可以安全地在此重新发布:
Null表示没有预定义的值。
当在数据库中的表中创建列时,可以添加一些约束条件。其中一个限制是否更高,列允许空值。
如果行中的某个字段未明确设置为其他字段,则该字段为空。您可以在创建表时提供默认值,也可以在向表中添加新行时设置值,或稍后更新行。要添加或更新表中的行,使用INSERT和UPDATE命令。
当一个字段为空时,所有与该字段的比较也将为空。这意味着,当一个空值所涉及的所有布尔代数行为不端: *真正的和空是空 *假和空是空
等等...
普通数学不工作,要么因为5 +空等于空。
这样做的一个有趣的副作用是,当您比较两个都为空的字段时,结果将不为真,它将为空。
要仍然能够处理可以包含空值的字段,有几个选项:T-SQL(Microsoft SQL Server)和MySql都具有函数COALESCE()和ISNULL()。
ISNULL():如果您正在查找的值为空,则返回预定义的值。SELECT ISNULL(NULL,2)将返回2
COALESCE():返回在预定义的列表不为空的第一值:SELECT COALESCE(A,B,C,d ...)
在MySql还有一个空安全比较运算符:a < => b如果两个值均为空,则返回1(true),如果任一值为null,则返回0(false)。
当涉及到表中的计算行你也需要知道空的含义。 SELECT COUNT(*)FROM TableName将返回表中的总行数,但SELECT COUNT(FieldName)FROM TableName将仅返回列'FieldName'不为null的行数。
常常数据库设计,通过lazyness或多或少,设置所有列的默认值在表或限制所有精密组件不允许空。当数据库设计者确实使用数据库的每个人都被迫构成'魔术'值时,就没有实际的价值可供使用。
假设我们有一个表,用于存储车辆信息和在该表中,我们有一个列来存储每个存储的车辆的燃料类型。什么样的燃料应该用于自行车?如果该列允许为空,则答案很简单;由于自行车上没有发动机,因此无需使用燃料类型,因此只需在所有代表自行车的行上将字段设置为空。如果数据库设计人员将禁忌置于不允许null的列上,则开发人员必须设置一个值来表示“无燃料类型”。如果该字段是一个整数零可能会用来做到这一点。此外,如果有一个表格包含车辆表应该参考的所有可行的燃料类型,以查找燃料类型的名称和描述,则开发人员必须在表格中放置假燃料类型,以便数据库管理服务器可以执行数据数据库的完整性。
空是该地段的“普通”的编程语言不具有数据库的一个很不错的功能,但一个数据库开发人员,设计人员需要跟踪在何处以及如何使用它的。
我诚实地通读了一遍,虽然我可以证实这是真的,但哪一段的目的是回答“问题是否存在......”部分? – Zed 2009-08-30 15:09:39
FWIW,还有一个SQL-99谓词'IS [NOT] DISTINCT FROM'工作方式类似于MySQL的专有''<=>操作。 PostgreSQL,IBM DB2和Firebird支持'IS [NOT] DISTINCT FROM'。 – 2009-08-30 15:41:02
实际上没有,但问题要求一种方法来删除空值,并且我得到了他根本不会问的感觉,如果他掌握了null是什么。 – idstam 2009-08-30 20:56:11
+1; NULL不仅仅是一个特殊值的懒惰占位符,它表明缺少一个值,并且在设计良好的数据库中,这具有一定的意义。 – Rob 2009-08-30 14:25:16
+1,用于提示42作为占位符值。并理解'null'。 – Eric 2009-08-30 14:27:46