标签: sql-insert

意外的INSERT ... SET查询行为

我有一个表,我需要从另一个表存储两个id.在做一些调试时我发现了一些奇怪的SQL行为.

错误的sql示例:

INSERT INTO follower_list set `followerUserId` = '3' AND `followingUserid` = '4' 
Run Code Online (Sandbox Code Playgroud)

上面的查询是在数据库中插入零作为值.我仔细研究了这个问题,发现我犯了一个and代替的错误,.我需要实现的目的是:

INSERT INTO table SET col1 = '3' , col2 = '4'
Run Code Online (Sandbox Code Playgroud)

这符合我的预期.我的问题与第一个(不正确的)查询有关 - 因为它执行并且在语法上是正确的,在哪里使用它的查询?

php mysql sql sql-insert

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

错误:关系列不存在PostgreSQL,无法运行插入查询

嗨我试图插入表tester3它使用语法失败

insert into tester3 (UN0, UN1) values ( 1, 'jishnu1');
Run Code Online (Sandbox Code Playgroud)

insert into tester3 values ( 1, 'jishnu1');
Run Code Online (Sandbox Code Playgroud)

工作正常.

mydb=# CREATE TABLE tester3
mydb-#    (
mydb(#     "UN0" integer,
mydb(#     "UN1" VARCHAR(40)
mydb(#    );
CREATE TABLE
mydb=# insert into tester3 (UN0, UN1) values ( 1, 'jishnu1');
ERROR:  column "un0" of relation "tester3" does not exist
mydb=# \d tester3
           Table "public.tester3"
 Column |         Type          | Modifiers
--------+-----------------------+-----------
 UN0    | integer               |
 UN1    | character varying(40) |
Run Code Online (Sandbox Code Playgroud)

我想我错过了一些非常微不足道的东西,我尝试了其他一些列名称,其中一些工作正常,一些不起作用.我很迷惑.PostgreSQL对列名的限制是否适用于插入查询的第一种语法?


编辑: 正如Gordon Linoff 所建议的 …

sql postgresql quoted-identifier sql-insert

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

是否有Z.EntityFramework.Extensions的非商业替代品?

实体框架在批量插入/更新/删除操作上可能非常慢.即使是经常建议的关闭AutoDetectChanges和/或ValidateOnSaveEnabled的调整也并不总是有帮助.

我在NuGet上遇到过Z.EntityFramework.Extensions,但它似乎是一个商业产品,只能运行一段时间.

https://www.nuget.org/packages/Z.EntityFramework.Extensions/

到目前为止,我真的只需要BulkInsert(),BulkUpdate()和BulkDelete().

我的问题是:

有没有可靠的非商业库,它与Z.EntityFramework.Extensions几乎相同?

谢谢你的任何提示!

c# sql-update sql-insert entity-framework-6 sql-delete

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

禁止"重复键值违反唯一约束"错误

我正在开发一个使用Postgres作为其数据库的Rails 3应用程序.我有下面的表格:

             Table "public.test"
    Column     |  Type   | Modifiers
---------------+---------+-----------
 id            | integer | not null
 some_other_id | integer |
Indexes:
    "test_pkey" PRIMARY KEY, btree (id)
    "some_other_id_key" UNIQUE CONSTRAINT, btree (some_other_id)
Run Code Online (Sandbox Code Playgroud)

这有两列:

  • id,这是主键(由rails自动创建)
  • some_other_id,包含由另一个系统生成的密钥.这个id必须是唯一的,所以我在表中添加了一个唯一的键约束.

现在如果我尝试插入一个带有重复的行some_other_id,它会失败(好)并且我在Postgres日志中得到以下输出:

ERROR:  duplicate key value violates unique constraint "some_other_id_key"
Run Code Online (Sandbox Code Playgroud)

问题是,我的应用程序尝试添加相同的ID两次是完全主线,并且我的日志被这个"错误"消息垃圾邮件,这会导致各种问题:文件占用大量磁盘空间,诊断会丢失噪音,Postgres必须丢弃diags以保持日志文件的大小限制等.

有谁知道我怎么做:

  • 通过禁止有关此键的所有日志,或者通过在尝试执行此操作的事务上指定某些内容来抑制日志INSERT.
  • 使用其他一些Postgres功能来发现重复的键,而不是尝试INSERT.我听说过规则和触发器,但是我无法工作(虽然我不是Postgres专家).

请注意,任何解决方案都需要使用Rails,它执行如下插入:

INSERT INTO test (some_other_id) VALUES (123) RETURNING id;
Run Code Online (Sandbox Code Playgroud)

sql postgresql ruby-on-rails duplicates sql-insert

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

将布尔值插入到 sqlite 表中

我创建了一个表 MYTABLE

CREATE TABLE "MYTABLE" (
       "surname" VARCHAR,
       "name" VARCHAR,
       "id" INTEGER PRIMARY KEY  NOT NULL ,
       "flag" BOOL);
Run Code Online (Sandbox Code Playgroud)

当我插入一条记录时:

INSERT INTO "MYTABLE" VALUES ("Super","Mario","94", true);
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息,即no such column: true. 如果我使用这个:

INSERT INTO "MYTABLE" VALUES ("Super","Mario","94", "true");
Run Code Online (Sandbox Code Playgroud)

我没有收到任何错误,但是当我阅读该记录时,rs.getBoolean("flag")我得到了错误。

最后,我试过这个

INSERT INTO "MYTABLE" VALUES ("Super","Mario","94", 1); 
Run Code Online (Sandbox Code Playgroud)

rs.getBoolean("flag")回报true。所以这里的教训是 Sqlite 中的布尔值插入 0/1 ?

sqlite sql-insert

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

Dapper multi insert返回插入的对象

使用Dapper我想实现一个采用IEnumberable类型对象的方法User.现在,User看起来如下:

public class User
{
  public int UserId { get; internal set; }
  public DateTime DateCreated { get; internal set; }
  public DateTime DateChanged { get; internal set; }
  public string Username { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这里的关键在于UserId,DateCreatedDateChanged永远不会通过对象进行设置,因此internal关键字.相反,数据库将填充这些值.

因为对象因此被修改为插入操作的一部分,所以我想返回另一个IEnumerable类型的对象,User但这次填充了相应的属性.

最近我意识到我可以让Dapper循环遍历下面的User对象IEnumerable:

public int Insert(IEnumerable<User> users)
{
  string sql = string.Format("INSERT INTO [User] (Username) VALUES (@Username)");
  return GetOpenConnection().Execute<User>(sql, …
Run Code Online (Sandbox Code Playgroud)

sql dapper sql-insert

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

使用乐观并发方法处理多个生产者插入唯一"不可变"实体的有效方法是什么?

假设一个具有多个并发生成器的系统,每个生成器都努力使用以下可通过其名称唯一标识的公共实体来持久保存一些对象图:

CREATE TABLE CommonEntityGroup(
    Id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
    Name NVARCHAR(100) NOT NULL
);
GO

CREATE UNIQUE INDEX IX_CommonEntityGroup_Name 
    ON CommonEntityGroup(Name)
GO


CREATE TABLE CommonEntity(
    Id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
    Name NVARCHAR(100) NOT NULL,
    CommonEntityGroupId INT NOT NULL,
    CONSTRAINT FK_CommonEntity_CommonEntityGroup FOREIGN KEY(CommonEntityGroupId) 
        REFERENCES CommonEntityGroup(Id)
);
GO

CREATE UNIQUE INDEX IX_CommonEntity_CommonEntityGroupId_Name 
    ON CommonEntity(CommonEntityGroupId, Name)
GO
Run Code Online (Sandbox Code Playgroud)

例如,生产者A保存了一些CommonEntityMeetings,而生产者B保存了CommonEntitySets.他们中的任何一个都必须坚持CommonEntity与他们的特定物品相关.

基本上,关键点是:

  • 有独立的生产者.
  • 它们同时运作.
  • 理论上(尽管可能会改变,现在还不完全正确),它们将通过相同的Web服务(ASP.Net Web API)运行,只需使用各自的端点/"资源".因此,理想的解决方案不应该依赖于此.
  • 他们努力坚持包含可能尚未存在的CommonEntity/CommonEntityGroup对象的对象的不同图形.
  • CommonEntity/CommonEntityGroup 一旦创建就是不可变的,之后永远不会被修改或删除 …

c# sql-server entity-framework optimistic-concurrency sql-insert

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

带有 WHERE 子句的 PostgreSQL ON CONFLICT

Postgres 文档使它看起来像 WHERE 子句可以作为 ON CONFLICT 条件:https : //www.postgresql.org/docs/9.5/static/sql-insert.html

我一直无法让它工作(如果可能的话)。这是我尝试过的众多排列之一:

INSERT INTO friends (id, dob, frn, status, "groupId", 
"createdAt", "updatedAt") 
VALUES ('1da04305-68ef-4dc1-be6c-
826ab83a6479', '1937-06-01T08:29:08-07:00', 100001, 'New', 'bc1567bc-
14ff-4ba2-b108-4cb2e0f0f768', NOW(), NOW()) 
ON CONFLICT 
    WHERE frn=100001 DO NOTHING
Run Code Online (Sandbox Code Playgroud)

frn 没有任何约束,所以语法更简单:

ON CONFLICT (frn) DO NOTHING
Run Code Online (Sandbox Code Playgroud)

引发数据库错误。我希望这是一个简单的语法问题。

sql postgresql upsert sql-insert

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

从db表1中选择数据并将其插入到php中的另一个db表2中

我有两个不同的数据库,名称:

  1. dbtest:表1
  2. dbtest2:表2

我想从dbtest表1中选择所有数据和新条目到dbtest2表2.

我试过这个

$sqlfin = "INSERT INTO dbtest2.Table2 SELECT * FROM dbtest.Table1";
$resultfi = mysqli_query($db_conn, $sqlfin);
Run Code Online (Sandbox Code Playgroud)

但到目前为止没有运气.我怎样才能确保将新记录插入两个表中?任何帮助,将不胜感激?

php mysql triggers bulkinsert sql-insert

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

INSERT INTO SELECT 非常慢,但是 INSERT 或 SELECT 单独运行时很快

我有一个这样的SQL:

INSERT INTO table1 (column1, column2) (
    SELECT column3, column4 FROM table2 WHERE column5 = 'value'
);
Run Code Online (Sandbox Code Playgroud)
  • table13,500,000 行。
  • table2900,000 行。
  • SELECT column3, column4 FROM table2 WHERE column5 = 'value'返回 NO 寄存器(零)并且需要大约 0.004 秒。
  • INSERT INTO table1 (column1, column2) VALUES ('value', 'value')也需要约 0.004 秒。

但是,当我将两者结合在一个INSERT INTO SELECT语句中时(如上所示),大约需要 7.7 秒。有解释吗?有解决办法吗?

sql database query-optimization mariadb sql-insert

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