我正在导入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 …导致了同样的错误.
我在使用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)
令我惊讶的是,结果与我的想法相反:
测试直接在MSSQL Management …
我是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) 我需要在mySQL数据库中将一个巨大的CSV文件插入到2个具有1:n关系的表中.
CSV文件每周发送一次,大约1GB,需要附加到现有数据.其中每个表都有一个自动增量主键.
我试过了:
还有什么建议?
让我们说简化这是我的数据结构:
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) 我想使用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"来做这件事.
欢迎任何想法.
我有父/子单向关系.当我检查日志时,我看到每个子行都有一个单独的插入查询,相当于让我们说:
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缓存的大小,因此耗尽内存不是问题.
mysql ×4
c# ×1
doctrine-orm ×1
hibernate ×1
insert ×1
java ×1
javascript ×1
jpa-2.0 ×1
knex.js ×1
performance ×1
php ×1
sql ×1
sql-server ×1
symfony ×1
t-sql ×1