我不确定这是首选方法,但我想介绍我的解决方案,看看你们那里的 symfony2 向导是否对此有启发性的评论。
我在一个表中注册金融交易,每个用户都有自己的一系列序列号(即每个用户的交易表都会以1开头)。
我知道这必须由代码处理,然后如果假设两个人将登录到同一个用户帐户注册交易,或者用户同时触发多个交易写入,我就会冒着为用户输入重复条目的风险time 和 Doctrine 将在第一个写入触发之前在两个操作中执行 SELECT...
$em->getConnection()->exec('LOCK TABLES transaction WRITE;'); //lock for write access
$results = $em->createQuery("SELECT MAX(t.serial) FROM ekonomiKassabokBundle:Transaction t WHERE t.user = $userId")->getResult();
$temp = $results[0];
$max_serial = $temp[1];
$new_serial = $max_serial + 1;
$entity->setSerial($new_serial);
$em->persist($entity);
$em->flush();
$em->getConnection()->exec('UNLOCK TABLES;');
上面的代码给了我...
SQLSTATE[HY000]: General error: 1100 Table 't0_' was not locked with LOCK TABLES
或者这甚至可能是矫枉过正,我应该跳过表锁吗?