diff --git a/django/core/management/commands/createcachetable.py b/django/core/management/commands/createcachetable.py
index 287a036..47dabf7 100644
--- a/django/core/management/commands/createcachetable.py
+++ b/django/core/management/commands/createcachetable.py
@@ -3,6 +3,7 @@ from optparse import make_option
 from django.core.cache.backends.db import BaseDatabaseCache
 from django.core.management.base import LabelCommand
 from django.db import connections, router, transaction, models, DEFAULT_DB_ALIAS
+from django.db.utils import DatabaseError
 
 class Command(LabelCommand):
     help = "Creates the table needed to use the SQL cache backend."
@@ -51,7 +52,13 @@ class Command(LabelCommand):
             full_statement.append('    %s%s' % (line, i < len(table_output)-1 and ',' or ''))
         full_statement.append(');')
         curs = connection.cursor()
-        curs.execute("\n".join(full_statement))
-        for statement in index_output:
-            curs.execute(statement)
-        transaction.commit_unless_managed(using=db)
+        try:
+            curs.execute("\n".join(full_statement))
+            for statement in index_output:
+                curs.execute(statement)
+            transaction.commit_unless_managed(using=db)
+        except DatabaseError, e:
+            self.stderr.write(
+                self.style.ERROR("Cache database '%s' could not be created.\nThe error was: %s.\n" %
+                    (tablename, e)))
+            transaction.rollback_unless_managed(using=db)
diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py
index 93aaf99..b8c8ffe 100644
--- a/django/db/backends/mysql/base.py
+++ b/django/db/backends/mysql/base.py
@@ -105,7 +105,7 @@ class CursorWrapper(object):
             # misclassified and Django would prefer the more logical place.
             if e[0] in self.codes_for_integrityerror:
                 raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
-            raise
+            raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
         except Database.DatabaseError, e:
             raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
 
diff --git a/tests/regressiontests/cache/tests.py b/tests/regressiontests/cache/tests.py
index c5dc457..eabbfac 100644
--- a/tests/regressiontests/cache/tests.py
+++ b/tests/regressiontests/cache/tests.py
@@ -776,6 +776,12 @@ class DBCacheTests(BaseCacheTests, TransactionTestCase):
         self.cache = get_cache('db://%s?max_entries=30&cull_frequency=0' % self._table_name)
         self.perform_cull_test(50, 18)
 
+    def test_second_call_dont_crash(self):
+        from StringIO import StringIO
+        out = StringIO()
+        management.call_command('createcachetable', self._table_name, verbosity=0, interactive=False, stderr=out)
+        self.assertTrue("Cache database 'test cache table' could not be created" in out.getvalue())
+
 
 DBCacheWithTimeZoneTests = override_settings(USE_TZ=True)(DBCacheTests)
 
