我在stackexchange上看到了一个类似的问题,但它的答案没有给我正确的结果。
出于演示目的,我有一个简单的表PURCHASES
,其中列PURCHASE_NUM
,PURCHASE_DATE
,CUSTOMER_ID.
我想对{{1}强制执行非空约束}表。我尝试了以下方法:
CUSTOMER_ID
该语法很好,但随后我插入以下内容:ALTER TABLE PURCHASES MODIFY CUSTOMER_ID char NOT NULL;
并且添加了元组而没有问题。为什么约束没有被强制执行?在添加约束之前,该列中是否已有NULL值会影响事物?
由于
编辑 INSERT INTO PURCHASES VALUES (333, NULL, NULL);
针对感兴趣的专栏说明以下内容:
DESCRIBE PURCHASES;
答案 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,默认值是第一个枚举值。