gpt4 book ai didi

sql - 为 HSQLDB 中的列指定默认空字符串的正确方法?

转载 作者:行者123 更新时间:2023-12-04 05:04:00 25 4
gpt4 key购买 nike

可以使用默认空字符串指定表列的能力和方式似乎取决于 RDBMS 实现。

这个答案 ( default a column with empty string ) 和这个 ( Avoid NULL columns using DEFAULT Empty String ) 表明可以使用 CREATE TABLE 列规则设置默认的空字符串,该规则使用带有 DEFAULT 约束的空单引号文字。

这是我在 HSQLDB 2.2.9 中使用的 DDL 摘录。我正在使用 SQuirreL 3.4.0 对数据库执行 SQL:

CREATE CACHED TABLE Clients ( 
cli_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
mRN VARCHAR(24) NOT NULL UNIQUE,
lastName VARCHAR(48) NOT NULL,
midName VARCHAR(24),
firstName VARCHAR(24) DEFAULT '' NOT NULL,
);

lastName 不能为 NULL

midName 没有列规则

firstName 不可为空,并尝试通过指定一个空字符串文字来使其默认为空字符串,如前面的答案所建议的那样。

当我使用 SQuirreL 使该表可编辑,然后在表中插入一行时,列中会出现以下值:
lastName:    (empty)
midName: <null>
firstName: ''

似乎 HSQLDB 中的语义 DEFAULT '' NOT NULL 导致列默认为两个单引号而不是空字符串。当列规则 NOT NULL 单独使用而没有 DEFAULT 规则时,看起来好像在插入新行时 SQuirreL 报告了一个空字符串。

有人可以确认在 HSQLDB 中将 VARCHAR 列默认为非空、空、零长度字符串的正确方法是使用这些语义:
CREATE CACHED TABLE Clients ( 
cli_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
mRN VARCHAR(24) NOT NULL UNIQUE,
lastName VARCHAR(48) NOT NULL,
midName VARCHAR(24) NOT NULL,
firstName VARCHAR(24) NOT NULL,
);

谢谢:-)

最佳答案

正确的方法实际上是您原来的 CREATE TABLE。如果列没有 DEFAULT 子句但有 NOT NULL 约束,则它没有默认值,并且在插入表时必须包含该列的值。

可能是 SQuirreL 客户端使用它自己的约定来显示或插入 firstName 列。

您可以使用 HSQLDB 数据库管理器在 SQL 语句中插入不完整的行:

INSERT INTO clients(mrn, lastname) VALUES 'mrn00', 'Aname'

并使用 SELECT 检查结果:
SELECT * FROM clients

当您切换到 View->Results in Text 时显示这一点
CLI_ID MRN   LASTNAME MIDNAME FIRSTNAME 
------ ----- -------- ------- ---------
0 mrn00 Aname (null)

关于sql - 为 HSQLDB 中的列指定默认空字符串的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15754601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com