标签: on-duplicate-key

ON DUPLICATE KEY UPDATE的准备语句语法(params错误数)

这是我想要做的.如果主键(entity_id)存在,我想插入此表或更新记录.我只是遇到了SQL语法的问题.它不会让我有比第一个'VALUES'更多的参数,所以我得到以下错误:

参数索引超出范围(7>参数个数,即6).

int insertOrUpdateSuccess = MyDBSyncher.UPDATE("INSERT INTO " + DB_NAME + ".entities " +
    "(`entity_id`, `wai_type`, `wai_id`, `character_id`, `looted`, `creation_time`) " +
    "VALUES ((?), (?), (?), (?), (?), (?)) " +
    "ON DUPLICATE KEY UPDATE " +
    "`wai_type`='(?)', `wai_id`='(?)', `character_id`='(?)', `looted`='(?)'", 
    new String[]{tmpEntityId, values[0], values[1], values[2], values[3], values[4],
    values[0], values[1], values[2], values[3]});
Run Code Online (Sandbox Code Playgroud)

有点像我想的那样,但我不能解释它的需要.很抱歉可能会发布重复内容.

哦,这是我的代码中的UPDATE()函数:

public static int UPDATE(String updateStatement, String[] params){
    try {
        if(!conn.isClosed()) {
            logger.trace("Successfully connected to MySQL server using TCP/IP - " + conn);

            stat = conn.prepareStatement(updateStatement); …
Run Code Online (Sandbox Code Playgroud)

java mysql prepared-statement sql-update on-duplicate-key

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

具有多个唯一键的 MySQL“插入...在重复键上”

我一直在阅读如何在重复键上使用 MySQL 插入,看看它是否能让我避免选择一行,检查它是否存在,然后插入或更新。然而,当我阅读文档时,有一个方面让我感到困惑。这是文档所说的:

如果您指定 ON DUPLICATE KEY UPDATE,并且插入的行会导致 UNIQUE 索引或 PRIMARY KEY 中的重复值,则执行旧行的 UPDATE

问题是,我不想知道这是否适用于我的问题,因为我不插入新的“条件”是存在两列等于某个值的行,不一定主键是一样的。现在我想象的语法是这样的,但我不知道它是否总是插入而不是替换:

INSERT INTO attendance (event_id, user_id, status) VALUES(some_event_number, some_user_id, some_status) ON DUPLICATE KEY UPDATE status=1
Run Code Online (Sandbox Code Playgroud)

问题是, event_id 和 user_id 不是主键,但是如果“出席”表中的一行已经包含具有这些值的那些列,我只想更新它。否则我想插入它。这甚至可以通过 ON DUPLICATE 实现吗?如果没有,我可以使用什么其他方法?

mysql sql sql-insert on-duplicate-key

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

时间戳自动更新无法使用ON DUPLICATE KEY UPDATE(PDO)

我有一个表格作品集,时间戳设置为自动更新.

CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

PHP中的PDO语句不会导致时间戳更新.

$statement = $this->connection->prepare("
INSERT INTO folio(publication, productId) 
VALUES(:publication, :productId) 
ON DUPLICATE KEY UPDATE 
id=LAST_INSERT_ID(id), publication=:publication, productId=:productId");
Run Code Online (Sandbox Code Playgroud)

以下手动方法有效但不可取.

$statement = $this->connection->prepare(
"INSERT INTO folio(publication, productId) 
VALUES(:publication, :productId) 
ON DUPLICATE KEY UPDATE 
id=LAST_INSERT_ID(id), publication=:publication, productId=:productId, timestamp=NOW()");
Run Code Online (Sandbox Code Playgroud)

更新:这是我的作品集表结构

CREATE TABLE `folio` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `publication` varchar(255) DEFAULT NULL,
  `productId` varchar(255) DEFAULT NULL,
  `timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_folio` (`publication`,`productId`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

更新2:将timestamp设置为not null后的表结构 …

php mysql timestamp on-duplicate-key

3
推荐指数
1
解决办法
5027
查看次数

INSERT INTO的正确语法是什么...在MySQL中的DUPLICATE KEY UPDATE?


我的表结构(MySQL /每个都与下面相同)

+-------+--------------+------+------+-------------------+
| Field | Type         | Null | Key  | Default           |
+-------+--------------+------+------+-------------------+
| id    | int(11)      | NO   | PRI  | AUTO INCREMENT    | 
| lesson| varchar(255) | NO   |      | LESSON_NAME       | 
| exam  | char(50)     | NO   |UNIQUE| NO DEFAULT        |
| quest | text         | NO   |      | NO DEFAULT        |
| answer| text         | NO   |      | NO DEFAULT        |
| note  | text         | NO   |      | NO DEFAULT        |
+-------+--------------+------+------+-------------------+
Run Code Online (Sandbox Code Playgroud)

并且我发布了一些值来通过ajax($ …

php mysql on-duplicate-key

2
推荐指数
1
解决办法
7873
查看次数

mysql插入重复键更新知道是否发生了

在我正在构建的应用程序中,我在重复键更新时使用了大量插入.我的问题是,在我的应用程序中,我需要知道它是插入还是更新,以便我的代码可以做出适当的决定.有谁知道我怎么测试这个?

我正在使用perl的DBI模块,如果有人知道特定的方式.谢谢!

mysql perl dbi insert-update on-duplicate-key

2
推荐指数
1
解决办法
1003
查看次数

SQL INSERT没有重复(没有主键或唯一键)

让我们考虑一下,我有一个用于生成表B的表A.我没有可用于a的主键或唯一键ON DUPLICATE KEY.

我的表B有3列:A,B和C.

INSERT只有当行已经不存在时我才想这样做.我可以确定该行是否存在是A和B的组合.我使用一个WHERE NOT EXISTS语句来执行此操作.

INSERT INTO TableB
(A, B, C)
SELECT 
SUM(A),
SUM(B),
SUM(C)
FROM TableA
WHERE NOT EXISTS (SELECT * FROM TABLE B WHERE A=A AND B=B)
GROUP BY A, B
Run Code Online (Sandbox Code Playgroud)

如果表B为空,则插入行.但是,只要表B有记录,即使表B中不存在行,也不会插入任何行.

mysql sql insert on-duplicate-key

2
推荐指数
1
解决办法
1676
查看次数

MySQL ON DUPLICATE KEY UPDATE 和 CONCAT

我有一个查询(CodePRIMARY KEY):

INSERT INTO table (Code, ... events)
  VALUES
    (1, ... CONCAT(events, 'BAR')),
    (2, ... CONCAT(events, 'BAR')),
    ...
  ON DUPLICATE KEY
    UPDATE ... events = VALUES(events)
Run Code Online (Sandbox Code Playgroud)

我的意图是,events如果给定键已经有一行,则将插入的值连接到现有值。

对于我的查询,假设eventsis的现有值FOO,新events值总是'BAR'而不是'FOOBAR'

实现我想要的正确方法是什么?

mysql on-duplicate-key

2
推荐指数
1
解决办法
1430
查看次数

在重复密钥正确使用?不工作.MySQL/PHP

我试图在我的网站上记录用户的IP地址,并且我想在用户登录时拥有以下流程

if (new ip address detected)
  enter in to db
else if (ip address has already been recorded)
  do nothing
Run Code Online (Sandbox Code Playgroud)

这样我就不会记录每次用户登录的时间,只要它来自新的IP地址.我认为我有正确的代码,但重复仍然进入数据库.任何人都可以看到我错在哪里?

public function insertIpAddress($user_id, $user_ip) {
    return $this->dbHandler->DbQuery("INSERT into user_ip (user_id, ip_address) 
                  VALUES (?,?) ON DUPLICATE KEY UPDATE `user_id` = `user_id`",
                  array($user_id,$user_ip));
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过ON DUPLICATE KEY UPDATE ip_address= ip_address,但那不起作用.

我的数据库看起来像这样:

在此输入图像描述

它就是这样出来的:

ip_address   user_id
10.245.1.38  378
10.245.1.38  378
Run Code Online (Sandbox Code Playgroud)

php mysql on-duplicate-key

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

如何在 postgresql 9.3 中插入​​批量行并忽略重复项

我有很多行数据要插入到一个表中。表中已有数据。当我像这样进行批量插入时,

INSERT INTO permission(username, permission) values(('john','ticket_view'), ('john','ticket_modify'), ('john','ticket_approve'));
Run Code Online (Sandbox Code Playgroud)

但是我的表已经有一行john, ticket_view在这种情况下我上面的插入查询以错误结束duplicate key value violates unique constraint

如何在 postgresql 9.3 中忽略这个重复问题?我只想插入所有行。如果存在类似的行,我想忽略它。我怎样才能做到这一点?我欢迎你的帮助。

postgresql upsert on-duplicate-key postgresql-9.3

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

如何重复密钥更新

我有这个在我的Python脚本中执行的查询,但是当它插入数据库并找到我的唯一列的副本时,它会导致错误并停止.我知道我需要使用On Duplicate Key Update,但我要注意如何正确添加它.

我独特的专栏2.

cur.execute("""INSERT INTO logs (1,2,3) VALUES (%s,%s,%s) """,(line[0], line[1], line[2]))
Run Code Online (Sandbox Code Playgroud)

如果有重复,则让它更新该行/条目.

python mysql sql on-duplicate-key

0
推荐指数
1
解决办法
6362
查看次数