在MySQL中是否可以插入NULL和DEFAULT值?

时间:2010-03-06 18:05:06

标签: mysql

我正在尝试设置一个不需要值的表行(如果为空则没有错误消息)但是如果为空则会插入一个默认值,如:

ALTER TABLE tablename ALTER rowname TINYINT UNSIGNED NOT NULL;

ALTER TABLE tablename ALTER rowname SET DEFAULT 0;

我这样设置,但插入的值仍为NULL。

这甚至可能吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

所以看起来“not null default 0”在没有显式赋值(通常会被赋值为NULL)时会提供默认值0,但是不允许显式赋值NULL,因为NOT NULL属性。

答案 2 :(得分:0)

您确定插入数据库的值实际上是NULL,并且您的编程语言不只是忽略类型并将行中的0视为等效于NULL吗?如果您的列定义为NOT NULL,MySQL根本不应该允许NULL,更不用说将其用作默认值。