我正在设计一个在MySQL中使用的关系数据库。我有下一种情况:在一个表中,有些字段在大多数情况下都是NULL. 这些字段将类似于:
Table name: tabla
Fields:
idtabla not null,
text (varchar(n)) not null,
image (mediumblob) {this can be null}
Run Code Online (Sandbox Code Playgroud)
疑问:是否最好创建另一个表,当需要使用图像时,查询新表?为什么您的解决方案更适合设计?MySQL的时间响应、查询的便捷性等?
mysql performance null database-design relational-theory query-performance
我有一张这样的表:
create table foo (foo_label text, foo_price int, foo_date date);
insert into foo (
values
('aaa', 100, '2017-01-01'),
('aaa', NULL, '2017-02-01'),
('aaa', NULL, '2017-03-01'),
('aaa', NULL, '2017-04-01'),
('aaa', 140, '2017-05-01'),
('aaa', NULL, '2017-06-01'),
('aaa', 180, '2017-07-01')
);
Run Code Online (Sandbox Code Playgroud)
如您所见,foo_price列上的一些值丢失了。
我需要的是缺失值以这种方式用“前一个”可用值填充:
foo_label | fixed_foo_price | foo_date
-----------+-----------------+------------
aaa | 100 | 2017-01-01
aaa | 100 | 2017-02-01
aaa | 100 | 2017-03-01
aaa | 100 | 2017-04-01
aaa | 140 | 2017-05-01
aaa | 140 | 2017-06-01
aaa | 180 …Run Code Online (Sandbox Code Playgroud) 为什么这如此棘手,令牌设置为什么,它不等于 null 也不等于空字符串?
SELECT lexemes
FROM ts_debug('This is a title')
WHERE alias = 'asciiword';
lexemes
---------
{}
{}
{}
{titl}
(4 rows)
Run Code Online (Sandbox Code Playgroud)
好吧..所以我想摆脱{},
SELECT lexemes
FROM ts_debug('This is a title')
WHERE alias = 'asciiword'
AND lexemes <> '{}'
AND lexemes <> ARRAY[]::text[]
AND lexemes IS NOT NULL
AND lexemes <> ARRAY[' ']
AND lexemes <> ARRAY[null]::text[];
Run Code Online (Sandbox Code Playgroud)
我知道其中大多数都行不通。,但我完全困惑为什么<> '{}'不起作用<> ARRAY[]::text;。我该如何过滤掉这个?
我在SQL Server数据库中有几个带有可为空列的表。这些可为空的属性要么在行创建时未提供,要么在某些情况下不适用。
我意识到NULL在某些情况下我不能使用相同的值来表示“未提供”,而在其他情况下则表示“不适用”。这些可选列的类型的int,datetime和string。即使我标记string为强制性(列NOT NULL),要么设置的属性为“未提供”和“不适用”合适,怎么做int和datetime列?我从书中阅读了第 23 章:
数据库探索:CJ Data 和 Hugh Darwen 关于第三宣言的论文
看起来状态列只有数值,但由于作者设置了 'n/a' 和 'd/k'(不知道),不确定他们是否将状态创建为字符串列。将所有可选列创建为字符串列并在属性没有值时捕获属性中的原因是否是个好主意?
我试图通过使用 SELECT 和我提供给编译器的集合中的一个(随机?)字符串来替换表中的 NULL 值。
例子:
|id | date |
+---+------+
| 1 | 2017 |
| 2 | NULL |
| 3 | NULL |
Run Code Online (Sandbox Code Playgroud)
我希望NULL值是“2015”、“2012”等,从我指定的集合中随机获取。
不幸的是,COALESCE只返回第一个非空值,而不是指定的值。是否有一些功能,如:
IF column_value = 'NULL (or something)' THEN RAND(string1, string2, string3, string4).
Run Code Online (Sandbox Code Playgroud)
提前致谢。
我想在不枚举列名的情况下计算表中每行存在的空值数。例如:
WITH t as (VALUES
(NULL ,'hi',2,NULL,'null'),
('' ,'hi',2,3,'test'),
(NULL ,'hi',2,3,'null')
)
SELECT countnulls(t)
FROM t;
Run Code Online (Sandbox Code Playgroud)
会导致:
numnulls
2
0
1
Run Code Online (Sandbox Code Playgroud)
我能得到的最接近的是以下黑客row_to_json():
select
(CHAR_LENGTH(row_to_json(t)::text)
- CHAR_LENGTH(REPLACE(row_to_json(t)::text, 'null', '')))/4 from t;
Run Code Online (Sandbox Code Playgroud)
这是......相当的黑客(不是很好)。它可以工作,有点,但是当它出现在实际数据或列名中时,它会将字符串 'null' 计为 NULL。所以在上述情况下是不正确的。
我有一张桌子。我需要向NOT NULL其中一列添加约束。这是我对解决方案的最佳尝试:
alter table clookup add CONSTRAINT lookup_9 NOT NULL (clookup_col)
这ERROR at line 1: ORA-00904: : invalid identifier在NOT NULL零件上产生。为什么?
我知道NULLIF比较两个值并NULL在匹配时返回的函数。
是否有一个函数可以比较两个值并NULL在它们不匹配时返回?即过滤掉其他值。
我知道我可以使用CASE以下方法做类似的事情:
CASE column WHEN value THEN 1 END
Run Code Online (Sandbox Code Playgroud)
我也知道我可以写一个函数。
也许有一个NULLIF我不知道的微妙使用技巧。
我认为NULLIF是通用的。我正在寻找一个通用的解决方案,以便它可以应用于任何标准数据库。
(前一个问题是:将多个列设置为非空时,Postgres 会使用多列索引吗?)
通常,当我将列设置为非空时,如果它没有索引,那么我首先添加它,以便 postgres 可以(希望)在锁定表的同时进行表扫描时使用索引,以便表被锁定在较短的时间内。
我想设置几列不为空,如下所示:
alter table foos
alter column bar1 set not null
alter column bar2 set not null
alter column bar3 set not null
alter column bar4 set not null;
Run Code Online (Sandbox Code Playgroud)
如果我为这些列创建了多列索引,那么在进行此更改之前,postgres 会在扫描锁定表时使用它吗?
CREATE INDEX CONCURRENTLY my_index on foos (bar1, bar2, bar3, bar4);
Run Code Online (Sandbox Code Playgroud)
如果我在 IS NULL(或 IS NOT NULL)上建立了部分索引怎么办
CREATE INDEX CONCURRENTLY my_index on foos (bar1, bar2, bar3, bar4) where bar1 is null and bar2 is null and bar3 is null and bar4 is null;
Run Code Online (Sandbox Code Playgroud) 我在网上某处和 Microsoft Press 的书中读到了一个字段声明属性,可用于指示 NULL VARCHAR 值不应在叶级消耗空间,而不是每个叶消耗几个字符。
有人可以帮我确定该属性在哪里吗?
我不记得 Attribute 关键字是什么,但我记得看到它是因为保存空的 2 个字节并使其成为没有数据的 0 字节存储的价值。
null ×10
postgresql ×4
sql-server ×2
alter-table ×1
array ×1
condition ×1
constraint ×1
count ×1
index ×1
isnull ×1
locking ×1
mysql ×1
oracle ×1
performance ×1
sql-standard ×1
ssms ×1
syntax ×1
t-sql ×1