我有一张桌子:
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有关吗?
我试图更深入地了解 Oracle 11g。我的问题很简单:Oracle 如何处理试图同时将记录插入单个表的两个会话。
例如,INSERT A 在下午 1:00 针对表 1 运行。完成需要 5 分钟。INSERT B 在下午 1:02 针对表 1 执行。完成需要 1 分钟。
会发生什么?在 INSERT A 完成后,Oracle 会排队 INSERT B 吗?INSERT B 会与 INSERT A 同时运行吗?
谢谢!
执行insert语句时,在表中插入了一行或多行,SQL Server有没有办法提取最后插入的行?
我正在从连接两个表的查询中插入,然后我想要插入行中的新 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_id
和B.z
需要插入到第二个表。
当我为 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)
我遇到的问题是我不断收到错误消息“无法将值 …
我有一个名为“示例”的表
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)
执行上述查询后,该表如下所示:
再次执行上面的语句,结果如下:
我的陈述有什么问题?
如何将 插入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_INSERT
OFF
如何更改此表、列或属性,以便创建 ID 为零的记录?
参考如何从 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 获得相同的值这可能吗?
我有一个查询,它从源数据库 (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)
我的问题是,我可以避免为每个基于字符串的字段键入排序规则类型吗?有没有办法可以一次为整个查询指定排序规则类型?如果这是不可能的,还有其他捷径吗?
我已经开始使用 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) insert ×10
postgresql ×3
sql-server ×3
identity ×2
mysql ×2
t-sql ×2
bulk-insert ×1
case ×1
checksum ×1
collation ×1
duplication ×1
import ×1
innodb ×1
join ×1
myisam ×1
oracle ×1
performance ×1
update ×1