相关疑难解决方法(0)

"INSERT IGNORE"vs"INSERT ... ON DUPLICATE KEY UPDATE"

在执行INSERT包含许多行的语句时,我想跳过可能导致失败的重复条目.经过一些研究,我的选择似乎是使用:

  • ON DUPLICATE KEY UPDATE 这意味着需要花费一些不必要的更新,或者
  • INSERT IGNORE 这意味着邀请其他类型的未能在未经宣布的情况下失败.

我对这些假设是对的吗?简单地跳过可能导致重复的行并继续执行其他行的最佳方法是什么?

mysql insert

820
推荐指数
9
解决办法
82万
查看次数

MySQL - 在一个查询中更新具有不同值的多个行

我试图了解如何使用不同的值更新多行,我只是不明白.解决方案无处不在,但对我来说,它看起来很难理解.

例如,三个更新为1个查询:

UPDATE table_users
SET cod_user = '622057'
    , date = '12082014'
WHERE user_rol = 'student'
    AND cod_office = '17389551'; 

UPDATE table_users
SET cod_user = '2913659'
    , date = '12082014'
WHERE user_rol = 'assistant'
    AND cod_office = '17389551'; 

UPDATE table_users
SET cod_user = '6160230'
    , date = '12082014'
WHERE user_rol = 'admin'
    AND cod_office = '17389551'; 
Run Code Online (Sandbox Code Playgroud)

了一个例子,但我真的不明白如何进行查询.即:

UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
    ,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
Run Code Online (Sandbox Code Playgroud)

如果在WHERE和IF条件中存在多个条件,我不完全清楚如何进行查询.任何想法?

mysql sql sql-update

118
推荐指数
5
解决办法
23万
查看次数

PDO支持多个查询(PDO_MYSQL,PDO_MYSQLND)

我知道PDO不支持在一个语句中执行多个查询.我一直在谷歌,发现很少有关于PDO_MYSQL和PDO_MYSQLND的帖子.

PDO_MySQL是一个比任何其他传统MySQL应用程序更危险的应用程序.传统的MySQL只允许一个SQL查询.在PDO_MySQL中没有这样的限制,但是您可能会注入多个查询.

From:使用PDO和Zend Framework防止SQL注入(2010年6月;作者Julian)

似乎PDO_MYSQL和PDO_MYSQLND确实支持多个查询,但我无法找到有关它们的更多信息.这些项目是否已停止?现在有没有办法使用PDO运行多个查询.

php mysql pdo

96
推荐指数
3
解决办法
10万
查看次数

更新MySQL中的列

我有一个table1包含三列和一堆行的表:

[key_col|col_a|col_b]
Run Code Online (Sandbox Code Playgroud)

我想用一组值更新col_a(即保持col_b不变),如下所示:

INSERT INTO table1 AS t1 (key_col, col_a) VALUES ("k1", "foo"), ("k2", "bar");
Run Code Online (Sandbox Code Playgroud)


但它不起作用,我该怎么做?

mysql insert-update

66
推荐指数
3
解决办法
20万
查看次数

JDBC批量插入性能

我需要在mysql数据库中插入几亿条记录.我一次批量插入100万.请参阅下面的代码.这看起来很慢.有没有办法优化它?

try {
        // Disable auto-commit
        connection.setAutoCommit(false);

        // Create a prepared statement
        String sql = "INSERT INTO mytable (xxx), VALUES(?)";
        PreparedStatement pstmt = connection.prepareStatement(sql);

        Object[] vals=set.toArray();
        for (int i=0; i<vals.length; i++) {
            pstmt.setString(1, vals[i].toString());
            pstmt.addBatch();
        }

        // Execute the batch
        int [] updateCounts = pstmt.executeBatch();
        System.out.append("inserted "+updateCounts.length);
Run Code Online (Sandbox Code Playgroud)

mysql performance jdbc batch-file

64
推荐指数
4
解决办法
5万
查看次数

在单个MySQL查询中更新多行

我试图运行这个:

UPDATE test 
SET col2=1 WHERE col1='test1', 
SET col2=3 WHERE col1='test2';
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
Run Code Online (Sandbox Code Playgroud)

我的桌子:

CREATE TABLE `test` (
    `col1` varchar(30) NOT NULL,
    `col2` int(5) DEFAULT NULL,
    PRIMARY KEY (`col1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)

这是,第一行结束时的事情.当我将其更改;为时,它无法识别col2.如何在一个查询中执行此操作?

mysql sql

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

MySQL CASE更新多个列

我想使用case语句更新表中的多个列,但我找不到如何执行此操作(这是否可行).我想出了以下无效的引用查询:

UPDATE tablename SET
    CASE name
        WHEN 'name1' THEN col1=5,col2=''
        WHEN 'name2' THEN col1=3,col2='whatever'
        ELSE col1=0,col2=''
    END;
Run Code Online (Sandbox Code Playgroud)

有没有办法用有效的SQL实现预期的结果?

mysql sql case

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

意外的T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或T_NUM_STRING错误

我一直茫然地看着这个错误,似乎无法知道问题是什么.当我运行查询时,我收到此错误:

意外的T_ENCAPSED_AND_WHITESPACE,期望此行的T_STRING或T_VARIABLE或T_NUM_STRING:

$sqlupdate1 = "UPDATE table SET commodity_quantity=$qty WHERE user=$rows['user'] ";
Run Code Online (Sandbox Code Playgroud)

php mysql select

17
推荐指数
3
解决办法
14万
查看次数

这可以作为单个更新查询运行吗?

UPDATE userTable 
SET userAge=245, userName="fred"  WHERE userId = 321, 
SET userAge=32, userName="dave" WHERE userId = 424;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来编写这段代码?

php mysql sql

6
推荐指数
2
解决办法
177
查看次数

在rails中使用一个查询更新多行

以下Rails代码导致6个查询

people = { 1 => { "name" => "David" }, 2 => { "name" => "Jeremy" }, 3 => { "name" => "Tom" } }
Person.update(people.keys, people.values)
Run Code Online (Sandbox Code Playgroud)

每个更新的行将执行两次查询.一个选择和一个更新.

有没有办法在Rails 4中只用一个查询(或只有两个查询)执行相同的任务?

这里有一些关于如何在MySQL中执行此操作的信息,但不包括Rails: MySQL中的多个更新

谢谢.

activerecord ruby-on-rails

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

Oracle:ON DUPLICATE KEY UPDATE

我正在尝试实现我 Michiel de Mare 找到的解决方案,用一个(最好是简单的语法感知)查询来更新多个记录.我想要学习的示例代码如下所示:

INSERT INTO table (id,Col1,Col2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12) ON DUPLICATE KEY UPDATE Col1=VALUES(Col1),Col2=VALUES(Col2);
Run Code Online (Sandbox Code Playgroud)

我正在使用Oracle(并且还不熟悉SQL查询).

基于一些动态内容,我将类似于上面的查询连接起来.它的长度可能会有所不同,具体取决于我要更新的记录数,但这是我生成的查询示例:

INSERT INTO my_table (question_id,ug) VALUES (30,0),(31,1) ON DUPLICATE KEY UPDATE ug=VALUES(ug) 
Run Code Online (Sandbox Code Playgroud)

以上查询收到此错误:

Native message: ORA-00933: SQL command not properly ended
Run Code Online (Sandbox Code Playgroud)

我正在处理一个内容管理系统,它有一个运行查询的函数调用; 在这个框架内.我不认为这是相关的,但我从来不需要把';' 但是,在查询结束时,我尝试使用和不使用分号.

sql oracle upsert

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

在MySQL中更新多行

我试图通过这样做来更新MySQL数据库中一个表中的多个行.它不起作用.

$query = "UPDATE cart SET cart_qty='300' WHERE cart_id = '21';
          UPDATE cart SET cart_qty='200' WHERE cart_id = '23';
          UPDATE cart SET cart_qty='100' WHERE cart_id = '24';";
mysql_query($query,$link);// $link is specified above
Run Code Online (Sandbox Code Playgroud)

任何人都知道这有什么问题.

php mysql

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

如何在一个查询中更新多行

我知道这个问题在这些论坛上可能会被问到太多次,但我真的找不到可靠的答案.他们都给出了不同的方法.

无论如何,我有这个代码来更新一行:

$sql = "UPDATE $userName SET P1 = '$p1MON' WHERE day = 'MON1'";
Run Code Online (Sandbox Code Playgroud)

是否可以在同一查询中更新多行?像这样的东西:

$sql = "UPDATE $userName SET P1 = '$p1MON' WHERE day = 'MON1',
        UPDATE $userName SET P1 = '$p1TUE' WHERE day = 'TUE1',
        UPDATE $userName SET P1 = '$p1WED' WHERE day = 'WED1'";
Run Code Online (Sandbox Code Playgroud)

或者,要在一个查询中更新多行,他们是否必须共享标识符?

谢谢.

编辑:评论中的建议似乎不起作用......

$sql = "UPDATE $userName SET P1 = '$p1MON' WHERE day = 'MON1';
        UPDATE $userName SET P1 = '$p1TUE' WHERE day = 'TUE1';
        UPDATE $userName SET P1 = '$p1WED' WHERE day …
Run Code Online (Sandbox Code Playgroud)

php mysql sql

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