diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php b/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
index c0f6c10..df5dcc9 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
+++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
@@ -104,7 +104,7 @@ public static function open(array &$connection_options = array()) {
       // Convert numeric values to strings when fetching.
       \PDO::ATTR_STRINGIFY_FETCHES => TRUE,
     );
-    $pdo = new \PDO('sqlite:' . $connection_options['database'], '', '', $connection_options['pdo']);
+    $pdo = new PDOConnection('sqlite:' . $connection_options['database'], '', '', $connection_options['pdo']);
 
     // Create functions needed by SQLite.
     $pdo->sqliteCreateFunction('if', array(__CLASS__, 'sqlFunctionIf'));
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/PDOConnection.php b/core/lib/Drupal/Core/Database/Driver/sqlite/PDOConnection.php
new file mode 100644
index 0000000..95cfd1b
--- /dev/null
+++ b/core/lib/Drupal/Core/Database/Driver/sqlite/PDOConnection.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Database\Driver\sqlite\PDOConnection.
+ */
+
+namespace Drupal\Core\Database\Driver\sqlite;
+
+/**
+ * SQLite-specific implementation of a PDO connection.
+ *
+ * Since SQLite does not support row level locks, we have to acquire a reserved
+ * lock on the database immediately. Because of https://bugs.php.net/42766 we
+ * have to create such a transaction manually which also means we cannot use
+ * \PDO::commit() or \PDO::rollback() for SQLite.
+ */
+class PDOConnection extends \PDO {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function beginTransaction() {
+    return $this->exec('BEGIN IMMEDIATE TRANSACTION') !== FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function commit() {
+    return $this->exec('COMMIT') !== FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function rollBack() {
+    return $this->exec('ROLLBACK') !== FALSE;
+  }
+
+}
