乍看之下,这个问题似乎很容易,但我只是没有找到合理的解决方案。
考虑具有以下特征的表:
ID INTEGER PRIMARY KEY AUTOINCREMENT
name INTEGER
values1 INTEGER
values2 INTEGER
dates DATE
每天,都会生成N个新行,用于表示将来的日期,并且“名称”来自有限列表。我想在有新数据时插入新行,但是如果已经有一个包含“名称”和“日期”的行,只需对其进行更新。
请注意,目前提出的检查条件的SPROC解决方案是不可行的,因为这是从另一种语言推送的数据。
那insert on duplicate key update
是为了什么
手册页面在这里。
诀窍是表需要具有唯一键(可以是复合键),以便clash
可以检测到插入操作。这样,将在该行上进行更新,否则将进行插入。当然,它可以是主键。
就您而言,您可以使用一个组合键,例如
unique key(theName,theDate)
如果该行已经存在,则将clash
检测到该行,然后进行更新。
create table myThing
( id int auto_increment primary key,
name int not null,
values1 int not null,
values2 int not null,
dates date not null,
unique key(name,dates) -- <---- this line here is darn important
);
insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
insert myThing(name,values1,values2,dates) values (778,1,1,'2015-07-11') on duplicate key update values2=values2+1;
-- do the 1st one a few more times:
insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
显示结果
select * from myThing;
+----+------+---------+---------+------------+
| id | name | values1 | values2 | dates |
+----+------+---------+---------+------------+
| 1 | 777 | 1 | 4 | 2015-07-11 |
| 2 | 778 | 1 | 1 | 2015-07-11 |
+----+------+---------+---------+------------+
如预期的那样,在重复的密钥更新上插入仅2行。
问题内容: 我的应用程序结合使用Flask,Flask-SQLAlchemy,Flask-WTF和Jinja2。 在当前版本中,我有一个设置表。该表将只有一个记录和一个字段。最初,该表包含零个记录。 我要实现的是: 鉴于db中不存在任何条目,因此请显示空表单以供用户输入 假设存在一个条目,请显示该条目,然后 如果用户更改值,则更新db中的rec。 这是我的代码: models.py 表格 view
问题内容: 我在形成条件插入时遇到困难 我有x_table的列(实例,用户,项目),其中实例ID是唯一的。我只想在用户已经没有给定项目的情况下插入新行。 例如,尝试插入instance = 919191 user = 123 item = 456 朝正确方向的任何帮助或指导将不胜感激。 问题答案: 如果您的DBMS在执行插入操作时不限制从哪个表中选择,请尝试: 在这里,是一个只有一行的表(最初在O
我需要创建一个在表中插入或不插入数据的条件。有11个字段,从6到11,用户可以填写,也可以不填写。如果没有,它就不能保存此表中的任何数据。代码已创建,但正在进行插入。有人知道怎么修理吗?谢谢!
问题内容: 我需要从每日CSV文件中消耗大量数据。CSV包含约12万条记录。使用hibernate模式时,这会减慢爬行速度。基本上,当使用saveOrUpdate()时,hibernate似乎在每个单独的INSERT(或UPDATE)之前执行SELECT。对于使用saveOrUpdate()持久存储的每个实例,在实际的INSERT或UPDATE之前发出SELECT。我能理解为什么要这样做,但是在进
问题内容: 有没有办法像在MySQL服务器上那样批量执行查询? 将无法使用,因为如果该字段已经存在,它将直接忽略该字段并且不插入任何内容。 将无法工作,因为如果该字段已经存在,它将首先对其进行处理,然后再次进行处理,而不是对其进行更新。 可以使用,但不能批量使用。 因此,我想知道是否可以批量发出这样的命令(一次不止一次发送)。 问题答案: 您 可以 使用INSERT … ON DUPLICATE
问题内容: 定义:两个集合的笛卡尔积是这些集合的所有可能对的集合,因此{A,B} x {a,b} = {(A,a),(A,b),(B,a ),(B,b)}。 现在,我想将这样的笛卡尔积插入数据库表(每对成一行)。打算在表中使用每对的默认值,因此此时数据库中不存在数据(即两组)。 任何想法如何使用postgresql实现这一目标? 编辑 : 借助Grzegorz Szpetkowski的答案,我能够