相关疑难解决方法(0)

MySQL错误1153 - 获得的数据包大于'max_allowed_pa​​cket'字节

我正在导入MySQL转储并收到以下错误.

$ mysql foo < foo.sql 
ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes
Run Code Online (Sandbox Code Playgroud)

显然,数据库中有附件,这使得插入非常大.


这是在我的本地机器上,从MySQL软件包安装MySQL 5的Mac.

我在哪里可以更改max_allowed_packet以导入转储?

还有什么我应该设置的吗?

刚刚运行mysql --max_allowed_packet=32M …导致了同样的错误.

mysql max-allowed-packet

417
推荐指数
10
解决办法
40万
查看次数

多个INSERT语句与具有多个VALUES的单个INSERT

我在使用1000个INSERT语句之间运行性能比较:

INSERT INTO T_TESTS (TestId, FirstName, LastName, Age) 
   VALUES ('6f3f7257-a3d8-4a78-b2e1-c9b767cfe1c1', 'First 0', 'Last 0', 0)
INSERT INTO T_TESTS (TestId, FirstName, LastName, Age) 
   VALUES ('32023304-2e55-4768-8e52-1ba589b82c8b', 'First 1', 'Last 1', 1)
...
INSERT INTO T_TESTS (TestId, FirstName, LastName, Age) 
   VALUES ('f34d95a7-90b1-4558-be10-6ceacd53e4c4', 'First 999', 'Last 999', 999)
Run Code Online (Sandbox Code Playgroud)

..versus使用具有1000个值的单个INSERT语句:

INSERT INTO T_TESTS (TestId, FirstName, LastName, Age) 
VALUES 
('db72b358-e9b5-4101-8d11-7d7ea3a0ae7d', 'First 0', 'Last 0', 0),
('6a4874ab-b6a3-4aa4-8ed4-a167ab21dd3d', 'First 1', 'Last 1', 1),
...
('9d7f2a58-7e57-4ed4-ba54-5e9e335fb56c', 'First 999', 'Last 999', 999)
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,结果与我的想法相反:

  • 1000 INSERT语句:290毫秒.
  • 1个带有1000个值的INSERT语句:2800毫秒.

测试直接在MSSQL Management …

sql t-sql sql-server performance sql-server-2008

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

Doctrine2 - 一次性多次插入

我是Doctrine的新手,对我来说还有一些模糊的区域.在这种情况下,我使用循环和实体管理器在数据库中插入新记录.它工作正常,但我注意到Doctrine按实体进行一次插入查询,这可能会变得非常庞大.

使用Doctrine2和Symfony 2.3,我想知道如何设置它,这样它只会产生一个带有所有值的插入查询(当然我们只讨论1个实体).

我的意思是改变这个:

INSERT INTO dummy_table VALUES (x1, y1)    
INSERT INTO dummy_table VALUES (x2, y2)
Run Code Online (Sandbox Code Playgroud)

INSERT INTO dummy_table VALUES (x1, y1), (x2, y2)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

$em = $this->container->get('doctrine')->getManager();

foreach($items as $item){
    $newItem = new Product($item['datas']);
    $em->persist($newItem);
}

$em->flush();
Run Code Online (Sandbox Code Playgroud)

php mysql symfony doctrine-orm

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

在C#中的多个表中有效地将数据插入MySQL

我需要在mySQL数据库中将一个巨大的CSV文件插入到2个具有1:n关系的表中.

CSV文件每周发送一次,大约1GB,需要附加到现有数据.其中每个表都有一个自动增量主键.

我试过了:

  • 实体框架(占用所有方法的大部分时间)
  • 数据集(相同)
  • 批量上传(不支持多个表)
  • 带参数的MySqlCommand(需要嵌套,我当前的方法)
  • 带有StoredProcedure的MySqlCommand包括一个Transaction

还有什么建议?

让我们说简化这是我的数据结构:

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public List<string> Codes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我需要从csv插入到这个数据库中:

       User   (1-n)   Code     
+---+-----+-----+ +---+---+-----+        
|PID|FName|LName| |CID|PID|Code | 
+---+-----+-----+ +---+---+-----+
| 1 |Jon  | Foo | | 1 | 1 | ed3 | 
| 2 |Max  | Foo | | 2 | 1 | wst | 
| 3 |Paul | Foo | | …
Run Code Online (Sandbox Code Playgroud)

c# mysql insert

15
推荐指数
2
解决办法
3227
查看次数

在knex中批量更新

我想使用Knex.js执行批量更新

例如:

'UPDATE foo SET [theValues] WHERE idFoo = 1'
'UPDATE foo SET [theValues] WHERE idFoo = 2'
Run Code Online (Sandbox Code Playgroud)

值:

{ name: "FooName1", checked: true } // to `idFoo = 1`
{ name: "FooName2", checked: false } // to `idFoo = 2`
Run Code Online (Sandbox Code Playgroud)

我之前使用的是node-mysql,它允许多个语句.使用它时我只是构建了一个多语句查询字符串,只需在一次运行中通过线路发送.

我不确定如何用Knex实现同样的目标.我可以batchInsert看作我可以使用的API方法,但就任何batchUpdate问题而言都没有.

注意:

  • 我可以进行异步迭代并分别更新每一行.这是不好的原因,这意味着从服务器到数据库将会有很多往返

  • 我可以使用raw()Knex 的东西,可能做类似于我对node-mysql的操作.然而,这破坏了作为DB抽象层的整个knex目的(它引入了强大的DB耦合)

所以我想用"knex-y"来做这件事.

欢迎任何想法.

javascript knex.js

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

在JPA中插入多行的最有效方法

我有父/子单向关系.当我检查日志时,我看到每个子行都有一个单独的插入查询,相当于让我们说:

insert into childTable(col1, col2) values(val1, val2);
insert into childTable(col1, col2) values(val3, val4);
Run Code Online (Sandbox Code Playgroud)

在单个查询中插入所有行不是更有效吗?有点像:

insert into childTable(col1, col2) values(val1, val2), (val3, val4)
Run Code Online (Sandbox Code Playgroud)

有没有办法强制JPA生成多行插入而不是单行插入?

编辑: 我目前正在使用级联插入,所以我插入父级,并自动生成子项的插入.我宁愿继续使用该方法,而不是让我们说手动创建一个巨大的SQL查询,因为我认为级联插入产生更清晰的代码.

我已经定期刷新会话以控制L1缓存的大小,因此耗尽内存不是问题.

java mysql hibernate jpa-2.0

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