我有一个名为emp1. 有一个名为 的表tx_feeder。我想从该表中获取行数。
我使用以下查询来获取单日数据,
select count (*) from tx_feeder
where datum between (select sysdate -31 from dual) and (select sysdate -1 from dual);
SQL> 3455890
Run Code Online (Sandbox Code Playgroud)
它将给出整个月的计数。但是,我不想获得整个月的计数,而是希望通过单个 SQL 查询获得如下所示的输出,即一个月中每天的总计数。
sysdate -31 = 11190
sysdate -30 = 13390
sysdate -29 = 65790
sysdate -28 = 44390
........
sysdate -1 = 14590
Run Code Online (Sandbox Code Playgroud) 问题是关于 MySQL InnoDB 表中同时 SELECT 和 UPDATE 的行为:
我们有一个相对较大的表,我们定期扫描读取多个字段,包括名为 LastUpdate 的字段。在扫描期间,我们更新先前扫描的行。更新在后台线程中批处理和执行 - 使用不同的连接。需要注意的是,我们更新已读取的行。
三个问题:
SELECT它仍在进行中?READ-UNCOMMITTED用于SELECT帮助吗?我之前发布过关于srvctl,没有意识到只有在安装了网格基础设施时才使用它,在我的情况下,它不是。
无论如何,我在我的 Windows 8.1 pro 个人机器上安装了 Oracle 12c 数据库,用于测试目的(实际上是学校作业)。因此,我不希望每次登录我的 PC 时它都会启动。SQL shutdown每次登录时都被迫运行很麻烦(我意识到我可以编写批处理脚本,但这是最后的手段)。
我无法弄清楚启动时启动 Oracle 实例的服务是什么。有谁知道是做什么的?我一直在梳理 Oracle Doc,但似乎无法找出它是什么。
TL;DR:只是试图阻止我的 Oracle 数据库在 PC 启动时初始化。
在 MS SQL Server 中,可以在非主、非唯一键上聚集索引。例如,如果我想在插入日期创建一个聚集索引以防止在 UUID 主键中间插入时页面拆分和碎片,SQL Server 将为此执行后台工作。
在 MySQL/InnoDB 中,聚集索引将在添加到表中的第一个主键或唯一键上创建。除了添加非 UUID 主键或不构建任何唯一键之外,如何避免主要碎片?有没有其他引擎可以更好地工作?
如果不可避免,除了定期重建聚集索引之外,是否可以采取任何措施来缓解该问题?
背景: SQL Server Version 2014,设计的是发票订单系统。
我有几个问题来确认我对 SQL Server 并发性的看法。作为简要背景,创建此模型的开发人员构建了每个订单库存表(属于订单的一部分的项目)和带有InUse字段的订单表(订单)。会发生的情况是,当销售人员尝试更新订单时,通过更改订购商品的名称(例如需要将一本名为《哈利波特》的书重命名为《哈利波特》),如果其他人正在阅读该数据,他们就不能访问对象。
实际的数据库设计是这样的:该SalesOrder表将具有SalesPersonId与InUse列设置为1,没有人可以访问OrderId。这意味着对于每次读取、更新、插入或删除,都会发生三个事务:首先将更新设置InUse为 1,以便没有人可以访问特定的OrderId,然后是实际事务,然后是将最终更新设置InUse为 0 以允许人们访问那个OrderId。这意味着多次读取和写入而不是更少 - 随着规模的扩大,性能噩梦!
开发人员解释说,如果两个用户尝试写入或更新订单中的项目,这可以解决并发问题。嗯?
根据我对 SQL Server 的了解,如果两个用户尝试写入相同的顺序——比如添加两个新项目,它们都会被添加,因为这些将作为元数据插入日志中,然后添加到磁盘上。另外,如果插入物完全相同,我们应该设计具有唯一约束的表来防止这种情况(公平地说,该开发人员根本不使用约束和外键),因此不会发生第二次插入。这意味着两个用户可以将插入写入同一个表,并且插入通常会很快发生。
此外,如果两个用户正在更新同一个记录——比如说一个OrderItemId名字为“Harry Potter”的 1 来更新为“Harry Potter”(这是一个特定的项目OrderId),即使是两个不同的更新也会发生,但是第二个无关紧要,因为它是相同的更新。 只有当对同一对象发生两次不同的更新时,例如更新一是“哈利波特”,更新二是“哈利波特”,才会出现问题,因为它们不同。但是,不允许用户访问对象并不能解决这个问题(他的设计),因为用户一个的更新可能是错误的更新,从而锁定了用户 2(反之亦然)。
我不明白这个设计;对我来说,它反映了对SQL Server并发的完全误解,以及SQL数据库如何处理事务,而且他创建的大部分内容已经由SQL Server在后端处理(除了没有解决错误更新的问题) . 但是,也许我遗漏了一些东西,其他人可以启发我这是 SQL Server 的标准做法(我以前从未见过这种设计)。
我正在大学介绍数据库对象课程。
我与教授在如何解释 ERD 图中基数的鱼尾纹符号方面存在分歧。
示例:看看这张图片(我从演讲幻灯片中提取的一张图片):
根据我的解释,这表明:
但是,根据我导师的解释,这表明:
我一直无法找到任何证据来证明我自己对此的理解……但是,再说一次,我只是一个学生。也许我错过了什么?如果我是,我想弄清楚我哪里出错了。
我已经安装了 SQL Server 2019 RC1,但无法创建快照。当我运行快照代理时,我不断收到相同的消息:
2019-10-30 12:32:41.59 Microsoft (R) SQL Server Snapshot Agent
2019-10-30 12:32:41.59 [Assembly Version = 15.0.0.0, File Version = 15.0.1900.25]
2019-10-30 12:32:41.59 Copyright (c) 2016 Microsoft Corporation.
2019-10-30 12:32:41.59 The timestamps prepended to the output lines are expressed in terms of UTC time.
2019-10-30 12:32:41.59 User-specified agent parameter values:
2019-10-30 12:32:41.59 --------------------------------------
2019-10-30 12:32:41.59 -Publisher DB100
2019-10-30 12:32:41.59 -PublisherDB REF3_DB
2019-10-30 12:32:41.59 -Publication REF3_PDR4
2019-10-30 12:32:41.59 -Distributor DB100
2019-10-30 12:32:41.59 -DistributorSecurityMode 1
2019-10-30 12:32:41.59 -XJOBID 0xA694274CD89FAF418C8B059F22C01B85
2019-10-30 …Run Code Online (Sandbox Code Playgroud) 表很简单:
CREATE TABLE `t1` (
`ID` int NOT NULL AUTO_INCREMENT,
`name` int DEFAULT '1',
`LastName` int DEFAULT '0',
UNIQUE KEY `idx_ID` (`ID`) USING BTREE,
KEY `idx_name` (`name`)
) ENGINE=InnoDB;
DELIMITER $$
DROP PROCEDURE IF EXISTS populate_t1;
CREATE PROCEDURE populate_t1(IN num INT)
BEGIN
DECLARE COUNT INT DEFAULT 0;
WHILE COUNT < num DO
INSERT INTO t1(`name`,`LastName`) VALUES(round(rand()+5, 0), round(rand()*10000, 0));
SET COUNT = COUNT + 1;
END WHILE;
END $$
DELIMITER ;
CALL populate_t1(1000000);
CREATE INDEX idx_name ON t1 (`name`);
OPTIMIZE …Run Code Online (Sandbox Code Playgroud) 我在 PostgreSQL v13 中有一个小模式,只有模式结构,但仍然没有数据。
我所看到的是,我得到了一些pg_toast普通表的表,尽管里面没有数据。我有一个包含 5 列的简单表,其中一些是 varchar=200 长度和 inte=19 长度。
pg_toast当我没有向表中插入任何数据时,为什么我会得到这些表。pg_toast我可以看到表pg_class与列的关系reltoastrelid。
这些表有 0 KB 数据,根据:
pg_relation_size(reltoastrelid) AS toast_size
Run Code Online (Sandbox Code Playgroud)
唯一拥有pg_toast数据的是:pg_rewrite和pg_statistic。
我的任务是根据 DDL 将 Oracle 数据库转换为 SQL Server。Oracle建表语句示例如下:
CREATE TABLE "RENTAL"."ADDRESS"
( "ID" NUMERIC(8,0),
"TOWN" NVARCHAR(40),
"COUNTY" NVARCHAR(40),
"POSTCODE" NVARCHAR(10)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 163840 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "AAA_123" ;
Run Code Online (Sandbox Code Playgroud)
这里是什么TABLESPACE?它在 SQL Server 中是否有等效项?数据库中似乎使用了 6 个不同的表空间。
(我一直认为表名中点之前的部分(本例中为 RENTAL)称为表空间)
mysql ×4
sql-server ×3
oracle ×2
performance ×2
concurrency ×1
erd ×1
index ×1
innodb ×1
migration ×1
oracle-12c ×1
postgresql ×1
replication ×1
select ×1
uuid ×1