2010-03-06 45 views
0

我试图建立一个不需要的值(没有错误消息,如果为空)的表行,但如果为空将插入一个默认值,如:在MySQL中可以插入NULL和DEFAULT值吗?

ALTER TABLE tablename ALTER rowname TINYINT UNSIGNED NOT NULL; 

ALTER TABLE tablename ALTER rowname SET DEFAULT 0; 

我设置了这样,但插入的值仍然是NULL。

这甚至可能吗?

谢谢!

回答

1

NOT NULL明确表示此列的值不能为NULL。所以没有用于该列的NULL值。但它可以保存整数值0,因为它是一个有效的整数值。

0

这有点奇怪。鉴于此表定义:

create table def (i int not null default 0); 

此语句的工作原理:

insert into def() values(); 
select * from def; 

+---+ 
| i | 
+---+ 
| 0 | 
+---+ 

但这一说法产生一个错误:

insert into def values(null); 
ERROR 1048 (23000): Column 'i' cannot be null 

如此看来, “非空默认0” 将提供当列未被显式赋值(通常会被赋予一个NULL)时,默认值为0,但由于NOT NULL属性不允许NULL显式赋值。

0

您确定插入到数据库中的值实际上是NULL,并且您的编程语言不仅仅是忽略类型,并将行中的0等同于NULL?如果你的列被定义为NOT NULL,MySQL甚至不应该允许NULL,更不用说它用作默认值。