问题标签 [on-duplicate-key]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
74 浏览

php - 重复键仍在 MYSQL 中作为条目插入

row即使它已经存在,它也会不断添加,我不明白为什么?

任何人都可以帮忙吗?

0 投票
0 回答
830 浏览

python - 添加到插入的 sqlalchemy 文字文本

我试图让 sqlalchemy 在插入时接受一些更复杂的行为,但无法找出惯用的方法。为了简化事情,我只是想在查询末尾添加一个文字字符串,但找不到有效的方法。我已经看到“text()”函数用于将字符串文字添加到查询中,但它不会像我使用它的方式那样工作。这是我正在尝试做的一个例子(这不会编译,但至少抓住了这个想法......)

任何建议将不胜感激。

0 投票
0 回答
790 浏览

mysql - MySQL如何仅在保存或插入新数据时更新updated_by字段

我有一个前端 PHP 应用程序,它将数据保存在 MySQL 数据库中。该updated_by值将发生变化,因为它将是正在更新记录的用户。仅当我们为任何其他列 ( , ) 插入新值并且插入或更新记录时
,我才想更新该列。updated_bysnamescol2
欢迎任何帮助,非常感谢:)


表信息:

  • test
  • 唯一索引:snamescol2
  • 列: sname , scol2, updated_at,updated_by
  • 值: name1、col2、03-02-2013、phpuser1


MySQL 5.6 信息:
INSERT INTO.. ON DUPLICATE KEY UPDATE
“..如果将行作为新行插入,则返回 1,如果更新现有行,则返回 2...”


示例:用户将更新或插入记录:

INSERT INTO test(sname) VALUES("name1") ON DUPLICATE KEY UPDATE sname="name1", scol2="col2";
结果: 上面的查询不会更新任何东西。完美的。

INSERT INTO test(sname) VALUES("name1") ON DUPLICATE KEY UPDATE sname="name1", scol2="col22";
结果:上述查询将更新列:scol2updated_at.Perfect。


如何在一个查询中自动更新 updated_by 列?

INSERT INTO test(sname) VALUES("test1") ON DUPLICATE KEY UPDATE sname="name1", scol2="col2", updated_by="phpuser2222";
这不起作用,它会在每次列updated_by可能的解决方案时更新两个查询:updated_at


  1. 插入记录:INSERT ... ON DUPLICATE KEY UPDATE...
  2. 在我的 PHP 应用程序中获取返回值以了解它是否已[更新或插入],然后updated_by使用第二个查询更新该字段:INSERT INTO test(updated_by) VALUES("phpuser2222");
0 投票
0 回答
121 浏览

oracle - 如何在 unix 中编写忽略 dupkey 命令?

我知道在 oracle 中,这是一种忽略 dupkey 的写法,例如

有没有办法做同样的事情,但使用 unix 命令?我认为有办法,WHENEVER SQLERROR EXIT SQL.SQLCODE但我不确定,我不知道该怎么做。谢谢

0 投票
5 回答
6235 浏览

mysql - 从 ON DUPLICATE KEY UPDATE 获取插入/更新行数

我有一个尝试插入记录的语句,如果它已经存在,它只是更新记录。

完整的语句有多个插入,我希望根据 UPDATE 计算 INSERT 的数量。我可以用 MySQL 变量来做到这一点吗,我在搜索后还没有找到一种方法来做到这一点。

0 投票
1 回答
1066 浏览

php - 在忽略重复键的情况下将数据从一个表插入到另一个表

我有两个 MySQL 表。第一个表有一个 cron 作业正在运行,它每五分钟更新一次。当 cron 作业运行时,它将所有数据从第一个表移动到第二个表(存档表),截断第一个表,然后更新 CSV 文件中的信息,该文件在某个 URL 处不断更新。我通过将结构从一个表复制到下一个表来制作表格(因此它们的结构相同)。

这是我正在运行的代码,它有效:

问题是,cron 作业运行如此频繁,以至于它并不总是会完全更新,因此它会在 table2 中生成重复条目。这是我试图使用的代码,但它似乎不起作用:

我已确保两个表的键相同(id)。

这些操作不能一起工作还是我的语法在某个地方有错误?我想尝试一次性运行这些操作,而不是更新表,然后运行不同的操作来消除重复项。

谢谢你的帮助!

0 投票
3 回答
1268 浏览

oracle - How can i ignore dupkey with sqlplus?

I want to write a sql plus error for when the oracle find a record, or more records, that already exist and just ignore it/them. This is a example:

In this example sqlplus controls if the variable $sqlError contains a value different from spaces. How can i change this condition put the DUPKEY error? Thanks

0 投票
1 回答
2000 浏览

mysql - 如何在 FIND_IN_SET 中插入或更新所有值并更新 NOT FIND_IN_SET On Duplicate Key 更新

这是我想做的事情:

称为部门的表与称为员工的表具有多对多关系。因此,表 department_employees 具有列:department_id、employee_id、is_active。

索引department_id,employee_id 为pk。

我得到一串员工 ID,例如“12,15,18,19”。我得到部门ID。

我调用了一个 Mysql 存储过程(例程),它应该:

  • 将所有员工插入部门
  • 如果它们存在且未激活,则激活
  • 应停用所有其他员工

创建过程(在 @dep_id INT 中,在 @emp_ids 文本中)

INSERT INTO TBL_DEPARTMENT_EMPLOYEES (DEPARTMENT_ID, EMPLOYEE_ID, IS_ACTIVE) SELECT @dep_id, EMPLOYEE_ID, 1 FROM TBL_EMPLOYEES WHERE FIND_IN_SET(EMPLOYEE_ID, @emp_ids) ON DUPLICATE KEY UPDATE IS_ACTIVE=1;

UPDATE TBL_DEPARTMENT_EMPLOYEES SET IS_ACTIVE=0 WHERE DEPARTMENT_ID=@dep_id 而不是 FIND_IN_SET(EMPLOYEE_ID, @emp_ids);

只有第一个查询运行,我猜第二个查询由于锁定或其他原因而无法运行,我尝试了 TRANSACTION - COMMIT 技巧,没有奏效。我想也许这里有一位很棒的人可以提供帮助,或者 eben 让这一切都在一个查询中运行。谢谢!

0 投票
3 回答
13788 浏览

mysql - MySQL INSERT 重复键 UPDATE 与 SELECT

我有如下查询

引发以下错误

1093 - 您不能在 FROM 子句中为更新指定目标表“连接”

显然,我不能在insert into on duplicate update语法中包含 SELECT 子句,但我真的宁愿这样做,而不是运行 2 个查询。谁能告诉我我该怎么做?

0 投票
1 回答
153 浏览

mysql - 我可以在不使用 auto_increment 值的情况下在 DUPLICATE KEY 上使用 INSERT INTO ...吗?

我正在尝试编写一个查询来检查记录是否存在(基于几个子句而不是唯一标识符)如果这样的搜索返回记录,那么我需要更新所有找到的记录,如果没有找到那么我需要插入记录。请注意,我不能使用 IF EXISTS 因为我正在尝试查询客户端脚本而不是服务器端。所以我想到了 INSERT INTO .... ON DUPLICATE KEY

我可以在不知道行键标识符的情况下执行此操作吗?因此,如果我找到 accountid = 17 和 name = 'Mike' 的记录,然后如果没有带有这 2 个子句的记录,则更新它以使名称为“Mike A”,然后插入一条记录。

这是给我一个语法错误的尝试

这种方法可以处理我想要做的事情吗?如果是,那么您能纠正我的语法吗?

谢谢