标签: insert

如果 PostgreSQL 中不存在密钥,我该如何插入?

我有一张桌子:

CREATE TABLE mytable (id SERIAL, name VARCHAR(10) PRIMARY KEY)
Run Code Online (Sandbox Code Playgroud)

现在我想向这个表中添加名称,但前提是它们不存在于表中,并且在这两种情况下都返回id. 我怎样才能用 PostgreSQL 做到这一点?

我已经看到了一些用于此的脚本,但是没有单个 SQL 语句可以执行此操作吗?

例如,我可以插入并返回id

INSERT INTO mytable (name) VALUES ('Jonas') RETURNING id
Run Code Online (Sandbox Code Playgroud)

它第一次工作并返回id。但是如果Jonas表中已经存在它会失败,但id即使插入失败我也想返回。这可能与PostgreSQL有关吗?

postgresql insert

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

Oracle 如何处理针对一张表的多个并发 INSERT

我试图更深入地了解 Oracle 11g。我的问题很简单:Oracle 如何处理试图同时将记录插入单个表的两个会话。

例如,INSERT A 在下午 1:00 针对表 1 运行。完成需要 5 分钟。INSERT B 在下午 1:02 针对表 1 执行。完成需要 1 分钟。

会发生什么?在 INSERT A 完成后,Oracle 会排队 INSERT B 吗?INSERT B 会与 INSERT A 同时运行吗?

谢谢!

oracle insert

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

如何提取 SQL Server 中最后插入的行?

执行insert语句时,在表中插入了一行或多行,SQL Server有没有办法提取最后插入的行?

sql-server insert t-sql identity

8
推荐指数
1
解决办法
7万
查看次数

在未插入的 RETURNING 中加入值

我正在从连接两个表的查询中插入,然后我想要插入行中的新 ID,以及插入中不涉及的原始行中的字段。是否可以?我收到“列不存在”错误。

INSERT INTO new_table (x,y) 
select A.x,B.y 
from A 
  join B on A.w = B.z 
RETURNING id,B.z;
Run Code Online (Sandbox Code Playgroud)

new_table有唯一约束(x,y)

new_idB.z需要插入到第二个表。

postgresql join insert

8
推荐指数
1
解决办法
5630
查看次数

CASE 语句中的空值

当我为 70-461 考试而学习时,我正在 SSMS 中玩弄一些东西以学习更多知识,但我遇到了一些问题。我正在尝试创建一个表来使用,因此我不必更改/删除 AdventureWorks 或 TSQL2012 数据库中任何已创建的表。在实际创建要使用的表之前,我创建了一个临时表来测试我的代码,这是我用来将值插入表中的代码:

DECLARE @i INT = 1
 WHILE @i < 10
    BEGIN
    INSERT INTO #TestEmployeeCountry 
    VALUES ( SUBSTRING('ABCDEFGHIJKLMNOP', @i, 1), 
        CASE (SELECT ABS(CHECKSUM(NEWID()))%10 +1)
            WHEN 1 THEN 'USA'
            WHEN 2 THEN 'CANADA'
            WHEN 3 THEN 'MEXICO'
            WHEN 4 THEN 'UK'
            WHEN 5 THEN 'FRANCE'
            WHEN 6 THEN 'SPAIN'
            WHEN 7 THEN 'RUSSIA'
            WHEN 8 THEN 'CHINA'
            WHEN 9 THEN 'JAPAN'
            WHEN 10 THEN 'INDIA'
        END)
    SET @i = @i + 1
    END;
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我不断收到错误消息“无法将值 …

insert t-sql case checksum

8
推荐指数
1
解决办法
1753
查看次数

INSERT ... ON DUPLICATE KEY UPDATE 没有按我预期的那样工作

我有一个名为“示例”的表

CREATE TABLE IF NOT EXISTS `example` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a` int(11) NOT NULL,
  `b` int(11) NOT NULL,
  `c` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)

如果不存在,我想插入值,如果值存在则更新,所以我使用以下语句:

INSERT INTO example (a, b, c) VALUES (1,2,3) 
  ON DUPLICATE KEY UPDATE a = VALUES(a), b = VALUES(b), c = VALUES(c);
Run Code Online (Sandbox Code Playgroud)

执行上述查询后,该表如下所示:

在此处输入图片说明

再次执行上面的语句,结果如下:

在此处输入图片说明

我的陈述有什么问题?

mysql insert duplication update

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

在 SQL Server 中将 IDENTITY_INSERT 更改为 ON

如何将 插入ID到 SQL Server 的标识列中?我会在我的桌子上制作一个特殊的项目,我会通过ID. 因此,因为所有其他 ID 都大于或等于 1,所以我将赋予该特殊项目的 ID 为零。

现在的问题是,当我创建该表时,我已将列 ID 的标识设置为 true。如果我现在插入带有以下代码的特殊项目,则会出现下一个错误:

INSERT INTO MyTable(ID, Name, Description) 
VALUES (0, 'Special title', 'special item');
Run Code Online (Sandbox Code Playgroud)

错误:

设置为MyTable时,无法为表中的标识列插入显式值。IDENTITY_INSERTOFF

如何更改此表、列或属性,以便创建 ID 为零的记录?

sql-server insert identity

8
推荐指数
1
解决办法
9万
查看次数

postgresql 从选择查询插入,加上静态值

参考如何从 PostgreSQL 中的选择查询将值插入表中?,

我想从另一个表行插入,由 SELECT DISTINCT 指定,加上一些静态值,例如:

INSERT INTO new_tbl (column1, column2, column3)
SELECT DISTINCT id FROM -- long where clause --, 
  'a string', 0;
Run Code Online (Sandbox Code Playgroud)

这样新表中的每一行都会为 column2 和 column3 获得相同的值这可能吗?

postgresql insert

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

SQL Server 避免在查询中多次重复排序规则类型

我有一个查询,它从源数据库 (DatabaseA) 中选择行,并将它们插入到目标数据库 (Database B) 中。数据库之间的排序规则类型不同,无法更改。我需要通过显式指定 varchar 字段的排序规则来解决查询中的排序规则差异。

目前我的查询是这样的:

INSERT INTO DatabaseB.dbo.Users(
    Id,
    UserNumber,
    FirstName,
    Surname,
    Address1,
    Address2,
    AddressTown,
    AddressCity
)
SELECT 
    Id,
    UserNumber,
    FirstName COLLATE SQL_Latin1_General_CI_AS,
    Surname COLLATE SQL_Latin1_General_CI_AS,
    Address1 COLLATE SQL_Latin1_General_CI_AS,
    Address2 COLLATE SQL_Latin1_General_CI_AS,
    AddressTown COLLATE SQL_Latin1_General_CI_AS,
    AddressCity COLLATE SQL_Latin1_General_CI_AS
FROM DatabaseA.dbo.Users
Run Code Online (Sandbox Code Playgroud)

我的问题是,我可以避免为每个基于字符串的字段键入排序规则类型吗?有没有办法可以一次为整个查询指定排序规则类型?如果这是不可能的,还有其他捷径吗?

sql-server collation insert import bulk-insert

8
推荐指数
2
解决办法
4233
查看次数

MySQL 8 中的插入比 MySQL 5.7 中的插入慢

我已经开始使用 MySQL 8 (8.0.12),我意识到这个版本中的“插入”比 MySQL 5.6 或 MySQL 5.7 慢。表是 MyISAM 还是 InnoDB 都没有关系,只有一个“插入”,只有一条记录,服务器在 MySQL 8 中大约需要 0.2 ~ 0.3 秒。在 MySQL 5.7 中相同的“插入”只需要 0.003 秒或更短.

我已经放弃了 Windows Defender 或其他防病毒程序,硬盘的写入速度不是问题,因为我在同一台服务器上有一个虚拟机,VM 有 MySQL 5.7,结果也很好:0.003 秒或更少。

我已经在不同 SO 的不同计算机上测试了相同的“插入”,结果总是相同的:MySQL 5.7(或 5.6)需要 0,003 秒或更短,同时 MySQL 8 每次插入需要 0.2 ~ 0.3 秒,只有一条记录. “创建”也较慢。

我觉得奇怪的是,在 MySQL 8 中,简单的“选择”或“带连接的选择”比以前的版本更快。我认为问题在于写入磁盘的查询,但不是磁盘限制,可能是 my.ini 或其他 MySQL 设置中的指定限制。

在这里,我将在 MySQL 8 中性能缓慢的脚本留给您:

CREATE TABLE `ciiu_test2` (
`id` INT(11) NULL DEFAULT NULL,
`codbut` VARCHAR(11) NULL DEFAULT NULL,
`ciiu` VARCHAR(8) NULL DEFAULT NULL …
Run Code Online (Sandbox Code Playgroud)

mysql innodb myisam performance insert

8
推荐指数
2
解决办法
9323
查看次数