我有一个包含 1699 列的表,当我尝试插入更多列时,我得到了,
错误代码:1117。列太多
在这个表中,我只有 1000 行。对我来说,最重要的是列数。桌子上有什么限制吗?我想创建 2000 列。那可能吗?
我知道可以在创建时定义mysql表注释:
create table (...)comment='table_comment';
您可以通过以下方式显示评论:
show table status where name='table_name';
创建后如何更改(更改?)表注释。我的意思是没有再次删除和重新创建表。
是否有任何内置函数/存储过程/查询有助于检索有关MyTableSQL Server 数据库中大小的信息?
我有两张桌子
@T1 TABLE
(
Id INT,
Date DATETIME
)
@T2 TABLE
(
Id INT,
Date DATETIME
)
Run Code Online (Sandbox Code Playgroud)
这些表在 (Id, Date) 上有一个非聚集索引
我加入这些表
SELECT *
FROM T1 AS t1
INNER JOIN T2 AS t2
ON
t1.Id = t2.Id
WHERE
t1.Date <= GETDATE()
AND
t2.Date <= GETDATE()
Run Code Online (Sandbox Code Playgroud)
这也可以写成
SELECT *
FROM T1 AS t1
INNER JOIN T2 AS t2
ON
t1.Id = t2.Id
AND
t1.Date <= GETDATE()
AND
t2.Date <= GETDATE()
Run Code Online (Sandbox Code Playgroud)
我的问题是,这两个查询中哪一个提供了更好的性能,为什么?或者他们是平等的?
我正在寻找一个通用术语,例如数据库抽象,它包括所有表格数据结构,如数据库表、视图、表格查询结果。
据我了解,“实体”不是正确的术语,因为它对应于表,而不是视图,甚至不是查询。“结果”对于可修改的数据结构来说是违反直觉的。
在专业环境中哪个是合适的术语?
我有一个表设计方案,并且作为非 DBA 类型,希望对哪个更可扩展提出意见。
假设您被要求记录一个都市区的房屋信息,从一个小社区(200 所房屋)开始,但最终增长到 5000000 多所房屋。
您需要存储基本信息:ID#(我们可以用作唯一索引的唯一批次 #)、地址、城市、州、邮编。很好,简单的表会处理它。
但是每一年,你都会被要求记录所有房子的额外信息——每年都有哪些信息会发生变化。因此,例如,第一年,您需要记录所有者的姓氏和面积。第二年,你被要求保留姓氏,但丢弃平方英尺,而是开始收集业主的名字。
最后 - 每年额外列的数量都会改变。可能从 2 个额外的列开始,然后到明年的 6 个,然后回到 2 个。
因此,一种表格方法是尝试将自定义信息添加为房屋表格中的列,因此只有一张表格。
但是我有一种情况,有人为此将表格布置为:
“房屋表”列:ID、地址、城市、州、邮编 - 每所房屋一行
ID Addr City State Zip
-------------------------------------------
1 10 Maple Street Boston MA 11203
2 144 South Street Chelmsford MA 11304
3 1 Main Avenue Lowell MA 11280
Run Code Online (Sandbox Code Playgroud)
“自定义信息表”列:ID、名称、值 - 表格如下所示:
ID Name Value
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 Square Footage 1200
2 Square Footage 1930
3 Square Footage …Run Code Online (Sandbox Code Playgroud) 我已经按照以下方式donor在架构中创建了表reference:
CREATE TABLE reference.donor (
donor_code smallint PRIMARY KEY,
donor_name character varying NOT NULL,
donor_type smallint REFERENCES reference.donor_type (type_id),
alpha_2_code char(2) REFERENCES reference.iso_3166_1 (alpha_2_code)
);
Run Code Online (Sandbox Code Playgroud)
我已经按照以下方式填充了表格:
INSERT INTO reference.donor (donor_code, donor_name, donor_type, alpha_2_code)
SELECT donor_code, donor_name, donor_type, alpha_2_code
FROM reference.donor_template;
Run Code Online (Sandbox Code Playgroud)
当我运行时:
\dt+ reference.*
Run Code Online (Sandbox Code Playgroud)
在 psql 我看到reference.donor表:
List of relations
Schema | Name | Type | Owner | Size | Description
-----------+----------------+-------+----------+-------+-------------
reference | donor | table | postgres | 16 kB |
reference | …Run Code Online (Sandbox Code Playgroud) 描述Postgres 10 新功能的页面提到了“触发器的转换表”。
触发器的转换表
此功能
AFTER STATEMENT通过适当地向查询公开旧行和新行,使触发器既实用又高效。在此功能之前,AFTER STATEMENT触发器无法直接访问这些,并且变通方法是拜占庭式的并且性能很差。现在可以将许多触发器逻辑编写为AFTER STATEMENT,从而避免需要在 FOR EACH ROW 触发器所需的每一行进行昂贵的上下文切换。
什么是过渡表?
今天我删除了一个临时表时遇到了这个奇怪的问题。我删除了临时表并描述了该表只是为了验证。但是,桌子没有掉下来。经过一番搜索,我发现:
MySQL 允许创建一个与永久表同名的临时表。所以临时表被删除了,而不是永久表。我对我正在工作的表感到非常困惑。
MySQL 版本:5.1.36-enterprise-gpl-pro-log
这是我测试过的:
mysql> create table test(id int);
Query OK, 0 rows affected (0.00 sec)
mysql> desc test;
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------
id int(11) YES NULL
mysql> create temporary table test(id int);
Query OK, 0 rows affected (0.00 sec)
mysql> desc test;
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------
id int(11) YES NULL
mysql> drop table test;
Query OK, 0 …Run Code Online (Sandbox Code Playgroud) table ×10
mysql ×3
postgresql ×3
sql-server ×2
architecture ×1
comments ×1
index ×1
join ×1
psql ×1
query ×1
schema ×1
t-sql ×1
terminology ×1
trigger ×1
view ×1