相关疑难解决方法(0)

MySQL中的OUTPUT子句

有没有办法模拟MySQL中的OUTPUT子句,因为我们在SQL Server中有一个OUTPUT子句.

这是我的查询类型

UPDATE       employee
SET          empage = 10
OUTPUT       INSERTED.empid
WHERE        (empage < 10)
Run Code Online (Sandbox Code Playgroud)

因为我需要为MySQL服务器数据库提供此功能.

请建议实现此功能的最佳方法.

mysql sql

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

如何使用spring JDBC Template批处理在数据库中进行多次插入?

我需要一次性在数据库中插入数千条记录.我在我的应用程序中使用spring JDBC模板.

下面是我到目前为止编写的代码,它一次执行所有插入.所以,如果我有10,000个用户,他们一次插入.但我想要的是批量执行它们,例如一批500条记录,等等.

@Override
public void saveBatch(final List<Employee> employeeList) {
    final int batchSize = 500;

    getJdbcTemplate().batchUpdate(QUERY_SAVE,
            new BatchPreparedStatementSetter() {
                @Override
                public void setValues(PreparedStatement ps, int i)
                        throws SQLException {
                    Employee employee = employeeList.get(i);
                    ps.setString(1, employee.getFirstname());
                    ps.setString(2, employee.getLastname());
                    ps.setString(3, employee.getEmployeeIdOnSourceSystem());
                }

                @Override
                public int getBatchSize() {
                    return employeeList.size();
                }
            });

}
Run Code Online (Sandbox Code Playgroud)

如何更改上面的代码,以便代替employeeList.size()作为批量大小,我们可以将批量大小称为500,执行它们然后下一个500,依此类推?

请帮忙.

spring-jdbc

18
推荐指数
3
解决办法
7万
查看次数

在带有Connector/J的MySQL中使用getGeneratedKeys和批量插入

使用Connector/J,我想在主表中进行批量插入,然后将批量插入到详细信息表中(PreparedStatement.executeBatch()对于两者).我没有在网上找到太多的信息,所以我正在寻找有这方面经验的人的任何反馈.

  1. 我可以使用 Statement.getGeneratedKeys()获取主表中新插入的行的ID,以便我可以在详细信息插入中将它们用作外键吗?

  2. 如果不是每个查询都导致插入(例如,有一个insert ignoreinsert ... on duplicate key update查询),该怎么办?我会Statement.getGeneratedKeys()为每个陈述或仅针对新陈述添加一行吗?

  3. 什么会 Statement.getGeneratedKeys()回到那里与被插入的主记录一个错误,并 continueBatchOnError设置为true 连接字符串中?

  4. Connector/J版本5.0.x与5.5.x之间的相关行为是否有任何差异?MySQL 5.0 vs 5.1怎么样?

  5. 还有其他任何我应该注意的问题或陷阱吗?

  6. 有一个更好的方法吗?

java mysql database jdbc connector-j

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

使用LAST_INSERT_ID()在多个表上进行MySQL批量插入

我试图将大量用户插入到具有两个表的MySQL数据库中:

第一个表包含用户数据.示例INSERT如下所示(id是主键,mail是唯一键):

INSERT INTO users (id, mail, name)  
VALUES (NULL, "foo@bar.tld", "John Smith") 
ON DUPLICATE KEY UPDATE name = VALUE(name)
Run Code Online (Sandbox Code Playgroud)

第二个表包含用户所属的组.它只存储两个外键users_idgroups_id.示例查询如下所示:

INSERT INTO users_groups (users_id, groups_id)
VALUES (LAST_INSERT_ID(), 1)
Run Code Online (Sandbox Code Playgroud)

此设置适用于小型数据集.当我导入大量数据(> 1M行)时,INSERTs变慢.显然,进行批量插入会好得多:

INSERT INTO users (id, mail, name)  
VALUES (NULL, "foo@bar.tld", "John Smith"), (NULL, "baz@qux.tld", "Anna Smith") 
ON DUPLICATE KEY UPDATE name = VALUE(name)
Run Code Online (Sandbox Code Playgroud)

和:

INSERT INTO users_groups (users_id, groups_id)
VALUES (LAST_INSERT_ID(), 1), (LAST_INSERT_ID(), 4)
Run Code Online (Sandbox Code Playgroud)

问题当然是,LAST_INSERT_ID()只返回批处理的一个(第一个)id INSERT …

mysql database

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

带有last_insert_id()的Mysql mulitple row insert-select语句

好.所以缺点是,我试图做一个INSERT SELECT,例如:

START TRANSACTION;  
INSERT INTO dbNEW.entity (commonName, surname)  
SELECT namefirst, namelast  
FROM dbOLD.user;  
SET @key = LAST_INSERT_ID();  
INSERT INTO dbNEW.user (userID, entityID, other)  
SELECT user_id, @key, other  
FROM dbOLD.user;  
COMMIT;
Run Code Online (Sandbox Code Playgroud)

当然@key不会从每个插入返回每个后续的LAST_INSERT_ID(),而只返回最后一个插入的ID.

基本上,我将旧的USER表拆分为ENTITY和USER,如:

 dbOLD.user
 +-------------+---------------------+------+-----+------------+----------------+
 | Field       | Type                | Null | Key | Default    | Extra          |
 +-------------+---------------------+------+-----+------------+----------------+
 | user_id     | int(10) unsigned    | NO   | PRI | NULL       | auto_increment |
 | namefirst   | varchar(20)         | NO   |     |            |                |
 | namelast    | varchar(20)         | NO   | …
Run Code Online (Sandbox Code Playgroud)

mysql sql lastinsertid

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

Node.js 中的 MySQL 批量插入 - 如何获取所有 insertId?

我目前正在将一个旧的 PHP 项目迁移到 Node.js,并且正在努力使用 mysqljs/mysql 模块。

我必须执行批量插入 - 到目前为止一切顺利,效果很好。但我还需要所有 insertId。不幸的是我只在回调中得到第一个 insertId 。

假设变量“nestedDataArray”有四个要插入的数据数组 - 所以我们应该得到 4 个新行。这是一个例子:

db.query({
    sql: 'INSERT INTO `table` (`field1`, `field2`, `field3`) VALUES ?;',
    timeout: 5000,
    values: [ nestedDataArray ] // This works as intended.
}, function(error, result){
    if (error) {
        // ... handle error
    } else {
        var id = result.insertId; // Here I get only the first one. What about the other three inserts?

        db.query( /* Yes, there are nestes queries. */ );
    }
}); …
Run Code Online (Sandbox Code Playgroud)

javascript mysql node.js

5
推荐指数
0
解决办法
2094
查看次数

我可以从批量插入中检索lastInsertId吗?

INSERT INTO details (idactivity,user,hours,val,date) VALUES ('981','133','0','10500','2008-07-01'),('981','184','0','2750','2008-07-01'),('981','184','0','2750','2008-07-01')
Run Code Online (Sandbox Code Playgroud)

(iddetails如细节表PK)

有没有办法获得3个新的iddetails并让他们进入下一个批量插入查询?

INSERT INTO activity (idactivity,iddetails) VALUES('981',??),('981',??),('981',??)
Run Code Online (Sandbox Code Playgroud)

php mysql sql

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