我正在尝试设置一个不需要值的表行(如果为空则没有错误消息)但是如果为空则会插入一个默认值,如:
ALTER TABLE tablename ALTER rowname TINYINT UNSIGNED NOT NULL;
ALTER TABLE tablename ALTER rowname SET DEFAULT 0;
我这样设置,但插入的值仍为NULL。
这甚至可能吗?
谢谢!
答案 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,更不用说将其用作默认值。