标签: insert

Oracle 10g:正确使用 ora_rowscn 检测表行更改(即插入、更新、删除)

对检查表的记录上次更新、修改或删除时间的一些研究使我找到了称为 ora_rowscn 的伪列。

首先,我这样做:

select max(ora_rowscn) from tablename;

我记下了这个数字。然后我执行插入、更新和删除,检查每个之前和之后的最大值。它似乎随着每种类型的变化而增加。

如果您想知道我为什么要这样做,我们会在 C# windows 服务中缓存实体列表。此服务在两个负载平衡的服务器上运行,因此每个服务器都有一个单独的实例运行。当服务器 A 上发生更新时,服务器 B 需要知道它。我想要做的是将 max(ora_rowscn) 缓存到一个变量中。每次我们的应用程序插入、更新或删除一条记录时,它都会从数据库中获得一个新的最大值。如果值不同,那么它显然知道它需要从数据库中获取一个新列表。

所以我的实际问题是:是否还有其他我应该注意的问题可能会导致插入、更新或删除记录而不增加该值?

编辑:有人可以添加ora_rowscn为标签吗?

delete oracle-10g insert update

6
推荐指数
2
解决办法
3万
查看次数

INSERT INTO 不重复

我想做这个

INSERT INTO AdminAccounts (Name) 
SELECT Name
FROM Matrix 
Run Code Online (Sandbox Code Playgroud)

但我不想创建重复项。即,我几周前运行了它并且需要更新数据。

mysql insert upsert

6
推荐指数
2
解决办法
6万
查看次数

找出必须在插入语句中指定哪些列

有时在具有多列的表中插入数据时,如果插入语句不应该失败,知道必须指定哪些列会很有用。

我写了这个查询来找出哪些列不可为空、标识、计算、时间戳和没有默认值。

select  *
from    sys.columns
where   object_id = object_id('<table>') and
        is_nullable = 0 and
        is_identity = 0 and
        is_computed = 0 and
        default_object_id = 0 and
        type_name(system_type_id) <> 'timestamp'
Run Code Online (Sandbox Code Playgroud)

此检查中是否应包含任何其他属性?

sql-server-2008 sql-server insert default-value

6
推荐指数
1
解决办法
210
查看次数

可以在 Postgres 8.4 中嵌套插入吗?

我正在尝试将数据导入库存类型数据库。这是我的表格(为简洁起见被截断):

创建类型主机为 enum ('Physical', 'Virtual', 'Hypervisor', 'Other');

创建表主机(
  id 串行主键,
  主机名 varchar(40),
  角色hostrole
);

创建表接口(
  id 串行主键,
  名称 varchar(20),
  主机 int 在删除级联上引用主机(id),
  mac macaddr
);

我知道我可以将 a 嵌套select到一个insert语句中,我的问题是我是否可以insert将 an嵌套到 an 中insert(如果可以,该怎么做)。这是我试图运行的语句:

插入界面 
  (姓名, 
   苹果电脑, 
   主持人) 
     价值观 
  ('eth0', 
   '00:50:56:9d:34:d4', 
   (插入主机(主机名,主机角色)值('foobar','Virtual')返回 id)
);

错误出现在嵌套插入的“进入”处。我可以一次性完成此操作,还是必须进行单独的查询才能执行此插入操作?

postgresql insert

6
推荐指数
2
解决办法
2370
查看次数

如果存在,则增加行中的值,否则创建带值的行?

下面是我正在使用的 MySQL 表布局。基本上,我想增加浏览量、观察者和查询,因为它们通过网站的前端发生。我的问题是如何在第一次访问 ID: 1106 或 1107 时使用 MySQL 插入创建一个新的 _views 行?

ID 键值
----- ----- ------
1104 _reserve 10000
1104 _views 100
第 1104 章
1104 _inquiries 1
1105 _reserve 1500
1106 _reserve 24000
第 1106 章
1107 _reserve 45300

mysql insert if-not-exists row

6
推荐指数
1
解决办法
8549
查看次数

SQL Server 性能突然下降

我的 SQL Server 2008 R2 实例有问题。上周的表现突然崩溃了。所有插入都非常非常缓慢。它需要比以前长4-5倍。在硬件上我们没有发现任何缺陷。一个月前我们遇到了同样的问题,但一周后问题消失得很快。

我不是这些方面的专家,但我注意到实例上所有数据库的性能都很差。CPU 和磁盘未达到极限,因此应该不是硬件性能问题。

我将使用此查询查看缓存页数:

select
       count(*)as cached_pages_count,
       obj.name as objectname,
       ind.name as indexname,
       obj.index_id as indexid
from sys.dm_os_buffer_descriptors as bd
    inner join
    (
        select       object_id as objectid,
                           object_name(object_id) as name,
                           index_id,allocation_unit_id
        from sys.allocation_units as au
            inner join sys.partitions as p
                on au.container_id = p.hobt_id
                    and (au.type = 1 or au.type = 3)
        union all
        select       object_id as objectid,
                           object_name(object_id) as name,
                           index_id,allocation_unit_id
        from sys.allocation_units as au
            inner join sys.partitions as p
                on au.container_id = p.partition_id …
Run Code Online (Sandbox Code Playgroud)

performance insert sql-server-2008-r2 cache

6
推荐指数
1
解决办法
3328
查看次数

将转义的双引号插入 MySQL JSON 字段

我正在尝试插入一个字符串化的 JSON,如下所示:

'{"test": "string with \"escaped quotes\" does not work"}'
Run Code Online (Sandbox Code Playgroud)

进入 MySQL JSON 字段,但我总是收到错误消息:

SQL 错误 (3140):无效的 JSON 文本:“对象成员后缺少逗号或‘}’。”
在值(或列)中的位置 24 '{"test": "带有"转义引号"的字符串不起作用"}'。

知道什么可能导致问题吗?

完整的INSERT声明是:

INSERT INTO test(json_test)
VALUES ('{"test": "string with \"escaped quotes\" does not work"}');
Run Code Online (Sandbox Code Playgroud)

mysql insert json mysql-5.7

5
推荐指数
1
解决办法
3万
查看次数

PostgreSQL:为什么 CREATE TABLE AS 比 CREATE ... INSERT INTO 快?

以下是同一事物的两种不同语法。

  1. 带有COPY TABLE AS SELECT( CTAS)。

    CREATE TABLE main
    AS
      SELECT *
      FROM other;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 作为单独的语句CREATE TABLEINSERT INTO

    CREATE TABLE main (like other);
    
    INSERT INTO main
    SELECT *
    FROM other;
    
    Run Code Online (Sandbox Code Playgroud)

我观察到的CTAS比明显快CREATE TABLE.. INSERT。第一个需要 20 秒才能完成执行。第二个语法二需要 1 分 15 秒才能完成执行。

差异的原因可能是什么?

postgresql insert write-ahead-logging bulk-insert ctas

5
推荐指数
1
解决办法
3609
查看次数

插入表 Exec SP 性能不佳

我正在开发一个数据仓库。我们每晚刷新的一个临时表有大约 1000 万行。我们正在使用自定义构建的 ETL 工具,我无法对其进行太多更改。该工具像这样加载这个临时表:

truncate stage_table;
insert into stage_table with (tablockx) (column1, column2, etc...)
exec load_stage_table @batch_id = @batch_input
Run Code Online (Sandbox Code Playgroud)

的内容load_stage_table有一些设置和选择语句。我无法分享确切的代码,但这是一个基本示例。

create table load_stage_table
(
     @batch_id varchar(max) = null
)
as 

-- <update batch_id in batch_table>

-- collect data

select
    column1 = table1.column1,
    column2 = table2.column2,
    ...
from table1
join table2
    on table2.id = table1.table2_id
-- many more similar joins
Run Code Online (Sandbox Code Playgroud)

问题是,当我按照 ETL 工具运行的方式运行存储过程时,运行时间几乎是 30 分钟。但是,如果我修改存储过程以在内部包含插入语句,则只需 1 分钟。

    create table load_stage_table
(
     @batch_id varchar(max) = null
)
as 

-- …
Run Code Online (Sandbox Code Playgroud)

performance sql-server insert sql-server-2016 exec query-performance

5
推荐指数
1
解决办法
1593
查看次数

将多行插入到只有 IDENTITY 列的表中

我有一个dbo.Groups定义如下的表:

CREATE TABLE dbo.Groups
(
  GroupID int NOT NULL IDENTITY (1,1) PRIMARY KEY
);
Run Code Online (Sandbox Code Playgroud)

该表实际上只包含一IDENTITY列。

有时我想一次插入多行并获取生成的 ID。(我已经有一个预定义的表变量,@output其中包含ID要在OUTPUT子句中使用的单个列。)

现在我知道如果它是单行我将如何进行:

INSERT INTO
  dbo.GroupID
OUTPUT
  inserted.GroupID INTO @output (ID)
DEFAULT VALUES
;
Run Code Online (Sandbox Code Playgroud)

但我希望能够一次性插入两个或更多。实际数量由此查询返回的行数决定:

SELECT
  *
FROM
  dbo.MySource
;
Run Code Online (Sandbox Code Playgroud)

因此,如果查询返回一行,我想插入一行dbo.Groups并返回生成的GroupID. 如果它是一百行,那么我希望插入一百行并同时生成和返回一百个 ID。

一种明显的方法是在循环中一次插入一行。我想避免这种情况,而是使用基于集合的方法,类似于

INSERT INTO
  dbo.GroupID
OUTPUT
  inserted.GroupID INTO @output (ID)
SELECT
  ...  -- what?
FROM
  dbo.MySource
;
Run Code Online (Sandbox Code Playgroud)

有没有办法IDENTITY在(最好)单个语句中只用一列将多行插入到表中?

sql-server-2008 sql-server insert identity

5
推荐指数
1
解决办法
1517
查看次数