我有一个表,我需要从另一个表存储两个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)
这符合我的预期.我的问题与第一个(不正确的)查询有关 - 因为它执行并且在语法上是正确的,在哪里使用它的查询?
嗨我试图插入表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 所建议的 …
实体框架在批量插入/更新/删除操作上可能非常慢.即使是经常建议的关闭AutoDetectChanges和/或ValidateOnSaveEnabled的调整也并不总是有帮助.
我在NuGet上遇到过Z.EntityFramework.Extensions,但它似乎是一个商业产品,只能运行一段时间.
https://www.nuget.org/packages/Z.EntityFramework.Extensions/
到目前为止,我真的只需要BulkInsert(),BulkUpdate()和BulkDelete().
我的问题是:
有没有可靠的非商业库,它与Z.EntityFramework.Extensions几乎相同?
谢谢你的任何提示!
我正在开发一个使用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)
这有两列:
现在如果我尝试插入一个带有重复的行some_other_id,它会失败(好)并且我在Postgres日志中得到以下输出:
Run Code Online (Sandbox Code Playgroud)ERROR: duplicate key value violates unique constraint "some_other_id_key"
问题是,我的应用程序尝试添加相同的ID两次是完全主线,并且我的日志被这个"错误"消息垃圾邮件,这会导致各种问题:文件占用大量磁盘空间,诊断会丢失噪音,Postgres必须丢弃diags以保持日志文件的大小限制等.
有谁知道我怎么做:
INSERT.INSERT.我听说过规则和触发器,但是我无法工作(虽然我不是Postgres专家).请注意,任何解决方案都需要使用Rails,它执行如下插入:
INSERT INTO test (some_other_id) VALUES (123) RETURNING id;
Run Code Online (Sandbox Code Playgroud) 我创建了一个表 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 ?
使用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,DateCreated和DateChanged永远不会通过对象进行设置,因此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) 假设一个具有多个并发生成器的系统,每个生成器都努力使用以下可通过其名称唯一标识的公共实体来持久保存一些对象图:
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与他们的特定物品相关.
基本上,关键点是:
c# sql-server entity-framework optimistic-concurrency sql-insert
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)
引发数据库错误。我希望这是一个简单的语法问题。
我有两个不同的数据库,名称:
我想从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)
但到目前为止没有运气.我怎样才能确保将新记录插入两个表中?任何帮助,将不胜感激?
我有一个这样的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-insert ×10
sql ×6
postgresql ×3
c# ×2
mysql ×2
php ×2
bulkinsert ×1
dapper ×1
database ×1
duplicates ×1
mariadb ×1
sql-delete ×1
sql-server ×1
sql-update ×1
sqlite ×1
triggers ×1
upsert ×1