如何将空非约束添加到具有空值的现有列?

时间:2012-09-08 16:50:47

标签: mysql sql

我在stackexchange上看到了一个类似的问题,但它的答案没有给我正确的结果。

出于演示目的,我有一个简单的表PURCHASES,其中列PURCHASE_NUMPURCHASE_DATECUSTOMER_ID.我想对{{1}强制执行非空约束}表。我尝试了以下方法:

CUSTOMER_ID

该语法很好,但随后我插入以下内容:ALTER TABLE PURCHASES MODIFY CUSTOMER_ID char NOT NULL; 并且添加了元组而没有问题。为什么约束没有被强制执行?在添加约束之前,该列中是否已有NULL值会影响事物?

由于

编辑 INSERT INTO PURCHASES VALUES (333, NULL, NULL);针对感兴趣的专栏说明以下内容:

DESCRIBE PURCHASES;

3 个答案:

答案 0 :(得分:0)

也许你必须改为

ALTER TABLE PURCHASES MODIFY  CUSTOMER_ID char NOT NULL;

答案 1 :(得分:0)

ALTER命令无效,Null列仍然显示YES。您的ALTER命令语法看起来很好,应该有效。检查您的输入,然后重试。

您的客户ID真的只是一个字符吗?

答案 2 :(得分:0)

根据手册,数据输入NOT NULL列没有明确的DEFAULT子句会将列设置为NULL。因此,您应该ALTER列中包含DEFAULT。从4.0文档:

  

隐式默认值定义如下:

     

对于数字类型,默认值为0,但对于使用AUTO_INCREMENT属性声明的整数或浮点类型,默认值为序列中的下一个值。

     

对于TIMESTAMP以外的日期和时间类型,默认值是该类型的相应“零”值。对于表中的第一个TIMESTAMP列,默认值是当前日期和时间。请参见第10.3节“日期和时间类型”。

     

对于ENUM以外的字符串类型,默认值为空字符串。对于ENUM,默认值是第一个枚举值。