DEFAULT关键字处理有问题
示例:
CREATE TABLE BAR(c1 int null,c2 int default 1 not null)
执行这样的SQL:
INSERT INTO BAR SET c1 = 1, c2 = COALESCE(null,DEFAULT)
结果: 未找到“DEFAULT”列; SQL语句: INSERT INTO BAR SET c1 = 1,c2 = COALESCE(null,DEFAULT)[42122-161] 42S22 / 42122
同时:
INSERT INTO BAR (c1,c2) values (1, DEFAULT)
确定!
但是,
INSERT INTO BAR SET c1 = 1, c2 = DEFAULT
结果: 列“C2”不允许NULL; SQL语句: INSERT INTO BAR SET c1 = 1,c2 = DEFAULT [23502-161] 23502/23502
我认为这是一个错误。如果不是,是否可以指定使用 默认值是否存在?
H2 1.3.161(2011-10-28)
答案 0 :(得分:1)
术语DEFAULT不是伪列或可以在公式中使用的表达式。 DEFAULT用于表达式的而不是。我试过MySQL,它的工作方式与H2相同。
drop table foo cascade;
CREATE TABLE FOO(c1 int null,c2 int default 1 not null);
INSERT INTO FOO SET c1 = 1, c2 = default; -- works
INSERT INTO FOO SET c1 = 1, c2 = default * 2; -- doesn't work
你可能想要的是使用参数化语句(对吗?),其中NULL被转换为默认值。 H2确实支持这一点,但它没有完全记录。您可以使用:
drop table foo cascade;
CREATE TABLE FOO(c1 int null,c2 int default 1 not null null_to_default);
INSERT INTO FOO SET c1 = 1, c2 = null;