我试图建立一个不需要的值(没有错误消息,如果为空)的表行,但如果为空将插入一个默认值,如:在MySQL中可以插入NULL和DEFAULT值吗?
ALTER TABLE tablename ALTER rowname TINYINT UNSIGNED NOT NULL;
ALTER TABLE tablename ALTER rowname SET DEFAULT 0;
我设置了这样,但插入的值仍然是NULL。
这甚至可能吗?
谢谢!
我试图建立一个不需要的值(没有错误消息,如果为空)的表行,但如果为空将插入一个默认值,如:在MySQL中可以插入NULL和DEFAULT值吗?
ALTER TABLE tablename ALTER rowname TINYINT UNSIGNED NOT NULL;
ALTER TABLE tablename ALTER rowname SET DEFAULT 0;
我设置了这样,但插入的值仍然是NULL。
这甚至可能吗?
谢谢!
NOT NULL
明确表示此列的值不能为NULL
。所以没有用于该列的NULL
值。但它可以保存整数值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显式赋值。
您确定插入到数据库中的值实际上是NULL,并且您的编程语言不仅仅是忽略类型,并将行中的0等同于NULL?如果你的列被定义为NOT NULL
,MySQL甚至不应该允许NULL,更不用说它用作默认值。