80

私はこのテーブルを追加しています:

CREATE TABLE contenttype (
        contenttypeid INT UNSIGNED NOT NULL AUTO_INCREMENT,
        class VARBINARY(50) NOT NULL,
        packageid INT UNSIGNED NOT NULL,
        canplace ENUM('0','1') NOT NULL DEFAULT '0',
        cansearch ENUM('0','1') NOT NULL DEFAULT '0',
        cantag ENUM('0','1') DEFAULT '0',
        canattach ENUM('0','1') DEFAULT '0',
        isaggregator ENUM('0', '1') NOT NULL DEFAULT '0',
        PRIMARY KEY (contenttypeid),
        UNIQUE KEY packageclass (packageid, class)
);

そして、私は1050の「テーブルはすでに存在します」を取得します

しかし、テーブルは存在しません。何か案は?

編集:誰もが私を信じていないようですので、詳細:)

DESCRIBE contenttype

収量:

1146-テーブル'gunzfact_vbforumdb.contenttype'が存在しません

CREATE TABLE gunzfact_vbforumdb.contenttype(
contenttypeid INT UNSIGNED NOT NULL AUTO_INCREMENT ,
class VARBINARY( 50 ) NOT NULL ,
packageid INT UNSIGNED NOT NULL ,
canplace ENUM( '0', '1' ) NOT NULL DEFAULT '0',
cansearch ENUM( '0', '1' ) NOT NULL DEFAULT '0',
cantag ENUM( '0', '1' ) DEFAULT '0',
canattach ENUM( '0', '1' ) DEFAULT '0',
isaggregator ENUM( '0', '1' ) NOT NULL DEFAULT '0',
PRIMARY KEY ( contenttypeid ) ,

収量:

1050-テーブル'contenttype'はすでに存在します

4

26 に答える 26

84

シュレーディンガーのテーブルがあるようですね...

真剣に今、あなたはおそらく壊れたテーブルを持っています。試す:

  • DROP TABLE IF EXISTS contenttype
  • REPAIR TABLE contenttype
  • 十分な権限がある場合は、データファイル(/ mysql / data / db_name内)を削除します
于 2010-07-21T19:07:31.990 に答える
34

MySQLログから:

InnoDB: You can drop the orphaned table inside InnoDB by
InnoDB: creating an InnoDB table with the same name in another
InnoDB: database and copying the .frm file to the current database.
InnoDB: Then MySQL thinks the table exists, and DROP TABLE will
InnoDB: succeed.
于 2012-08-23T07:31:52.720 に答える
16

これと同じエラーが発生しましたが、REPAIR TABLE(@NullUserExceptionの回答から)は役に立ちませんでした。

私は最終的にこの解決策を見つけました:

sudo mysqladmin flush-tables

私の場合、がないとsudo、次のエラーが発生しました。

mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'

(OS X 10.6で実行)

于 2010-11-23T00:00:57.383 に答える
15

テーブルキャッシュをフラッシュする必要がある場合があります。例えば:

DROP TABLE IF EXISTS `tablename` ;
FLUSH TABLES `tablename` ; /* or exclude `tablename` to flush all tables */
CREATE TABLE `tablename` ...
于 2010-11-21T17:48:22.543 に答える
5

ビューの作成中に同じ問題が発生しました。ビューは、いくつかの変更のために以前に存在していましたが、削除されましたが、もう一度追加しようとすると、「ビューは既に存在します」というエラーメッセージが表示されていました。

解決策

手動で1つのことを行うことができます。

  1. インストールしたMySQLフォルダに移動します
  2. その中のデータフォルダに移動します。
  3. データベースを選択して、その中に入ります。
  4. データベースは「.frm」形式のファイルを作成します。
  5. 特定のテーブルのファイルを削除します。
  6. 次に、テーブルを再度作成します。

テーブルが正常に作成されます。

于 2013-12-23T12:55:34.153 に答える
4

私はこれと一日中戦ってきました。私は、最初にテーブルに対して実行DROP IF EXISTS ...し、次にそれらを実行することによってテーブルのセットを構築するPerlスクリプトを持っていCREATEます。DROP成功しましたが、次のCREATEエラーメッセージが表示 されました。table already exists

私はついにその根底に到達しました:私が使用しているMySQLの新しいバージョンはInnoDBのデフォルトエンジン( "show engine \ G;")を持っています。my.cnfファイルでそれをデフォルトのMyISAMに変更しました。 MySQLを起動しましたが、「テーブルはすでに存在します」というエラーは発生しなくなりました。

于 2012-10-16T20:22:10.607 に答える
4

同じ問題に遭遇した(InnoDBテーブルを作成した)これが最終的に私のために働いたものです:

DROP DATABASE `having_issues`;

ファイルベースで権限を確認し、修復とフラッシュを試みましたが、何も機能しませんでした。

したがって、これがオプションの場合は、すべての作業テーブルを別のデータベースに移動し、古いテーブルをドロップし(ドロップして機能させる前に、データベースフォルダーからファイルを手動で削除する必要がある場合があります)、新しいテーブルの名前を変更します。帰り道。どうやら、InnoDBを使用して「キャッシュ」されたものはすべて、元のデータベースと一緒に削除されます。

于 2013-06-01T11:44:02.753 に答える
4

あなたは私を信じないでしょう!.sqlファイルからコメントブロックを削除したところ、機能するようになりました。

CREATE DATABASE  IF NOT EXISTS `issga` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `issga`;
--
-- Table structure for table `protocolo`
--

DROP TABLE IF EXISTS protocolo;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
 CREATE TABLE protocolo (
  `idProtocolo` int(11) NOT NULL AUTO_INCREMENT,
  `tipo` varchar(30) DEFAULT NULL,
  `estado` int(2) DEFAULT 0,
  PRIMARY KEY (`idProtocolo`)
 ) ENGINE=InnoDB AUTO_INCREMENT=142 DEFAULT CHARSET=utf8;
 /*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `protocolo`
--

LOCK TABLES protocolo WRITE;
/*!40000 ALTER TABLE protocolo DISABLE KEYS */;
/* INSERT INTO `protocolo` VALUES () */
/*!40000 ALTER TABLE protocolo ENABLE KEYS */;
UNLOCK TABLES;

削除されたコメントブロックは次のとおりです。

--
-- Table structure for table `protocolo`
-- 

問題のあるテーブルを同じ.sqlファイルに残しました。その後、コメントを削除しましたが、コードだけが残り、エラーは消えました。

于 2013-07-19T11:08:06.977 に答える
3

MySql12.3のSqlMaestroのWin7でこの問題が発生しました。非常に苛立たしい、実際にはショーストッパー。データベースを削除して再作成することすら、何の役にも立ちませんでした。私はXPでこれと同じ設定をしていて、そこで動作するので、アクセス許可についての回答を読んだ後、Win7のアクセス許可に関連している必要があることに気付きました。そのため、管理者としてMySqlを実行し、Sql Maestroが正常に実行されていても、エラーは消えました。したがって、Win7とMySqlの間のアクセス許可の問題であったに違いありません。

于 2012-09-15T12:05:44.257 に答える
3

また、テーブルを作成しようとすると既に存在すると表示され、テーブルを削除すると存在しないと表示されるというこの問題も発生しました。

「FLUSHTABLES」をやってみたら問題は解決しました。

于 2013-05-27T18:29:31.393 に答える
3

私は同じ問題に苦しんでいます。テーブルが存在しないのに作成できません。上記のすべての解決策を試しましたが、成功しませんでした。

私の解決策は、ファイル、、、およびをMySQLのデータフォルダから削除することib_logfil0でした。これらのファイルを削除する前に、必ず最初にMySQLサービスを停止してください。ib_logfile1ibdata1auto.cnf

次に、サービスを再起動した後、MySQLはこれらのファイルを再作成し、すべてCREATEのファイルが保存された状態でバックアップスクリプトを実行できました(sqldumpファイル)。

于 2015-09-03T22:08:23.173 に答える
2

まず、適切なデータベースUSE yourDBにアクセスSelect * from contenttypeしているかどうかを確認し、それが何であるか、実際に存在するかどうかを確認してください...

于 2010-07-21T18:29:19.547 に答える
2

MacOSXとMySQL5.1.40でも同じ問題が発生しました。eclipseを使用してSQLスクリプトを編集し、MySQLWorkbench5.2.28を試しました。おそらくそれは改行文字をMac形式に変換しました。ファイルの最初の行をコメントアウトするまで、スクリプトの何が問題になっているのかわかりませんでした。この後、このスクリプトはmysqlによって単一のコメントとして解釈されました。これを修正するために、組み込みのテキストエディットMacアプリケーションを使用しました。改行が正しい形式に変換された後、エラー1050はなくなりました。

Eclipseユーザー向けの更新:

ワークスペース全体で、作成された新しいファイルのデフォルトの終了を設定するには、次の手順に従います。

[ウィンドウ]->[設定]->[一般]->[ワークスペース]->[新しいテキストファイルの行区切り文字]。

既存のファイルを変換するには、編集用にファイルを開き、現在編集中のファイルについては、次のメニューに移動します。

ファイル->行区切り文字をに変換

于 2010-10-25T07:18:54.140 に答える
2

私も同じケースでした。問題は、親ディレクトリに対するアクセス許可であることになりました。

テスト中にmysqlの内外にファイルをコピーしていました。

drwx------   3 _mysql  wheel 

十分ではなかった、する必要がありました:

-rw-rw----   3 _mysql  wheel 

復活してすみません。

于 2012-04-23T05:06:19.783 に答える
2

エラー1050と150で大きな問題が発生していました。

問題は、条件の1つとして制約を追加しようとしていたことでしON DELETE SET NULLた。

に変更するとON DELETE NO ACTION、必要なFK制約を追加できるようになりました。

残念ながら、MySqlエラーメッセージはまったく役に立たないので、上記の質問への回答の助けを借りて、この解決策を繰り返し見つける必要がありました。

于 2014-08-19T11:12:41.923 に答える
2

ディスクがいっぱいになっている可能性もあります。(ちょうどそれを持っていた)

于 2015-07-10T06:03:09.340 に答える
1

この問題は、「ビュー」(架空のテーブル)が新しいテーブル名と同じ名前でデータベースに存在する場合にも発生します。

于 2012-08-22T06:54:50.557 に答える
1

これと同じ問題が発生しましたが、データベース名は大文字と小文字が区別されるようです。私のデータベースは次のように呼ばれます。

Mydatabase

私のスクリプトが含まれている間

USE mydatabase

データベース名を正しい大文字と小文字に変更すると、すべて機能しているように見えました。MACOSXでのMYSQLWorkbenchの使用

于 2012-08-10T10:44:02.927 に答える
1

私の場合、これはInnoDBの問題であることがわかりました。私は実際の問題が何であるかを発見したことはありませんでしたが、MyISAMとして作成することでそれを構築することができました

于 2012-10-06T00:34:13.593 に答える
1

私のCREATEステートメントはステージング環境ダンプの一部でした。

私は上記のすべてを試しました。解決策が得られませんでした。しかし、償還への私の道は次のとおりでした:

  1. データベース名の大文字と小文字の区別を修正したときに、CREATEステートメント(の多くの1つ)が通過したという事実に遭遇しました。これは何かをクリックしました。他のテーブルについても同じことを繰り返しました。

  2. しかし、新しいエラーが発生しました。'comments'の直接引用符は、構文エラーをスローしていました。私は衝撃を受けた。それらを置き換えましたが、新しいエラーがポップアップし始めました。ついに私は解決策を知った。

解決策:私が使用していたダンプは、異なるバージョンのMySqlからのものである可能性があります。ローカル(私のマシンにインストールされている)mysqlワークベンチを使用してステージングMYsqlに接続する許可を得ました。ステージングmysqlワークベンチにログインするためにステージングサーバーにrdpしませんでした。そこからダンプを作成しました。ダンプを実行し、それは甘いように機能しました。

于 2013-07-31T14:38:01.670 に答える
1

私の場合、mysqldumpの代わりにmysqlデータベースディレクトリのファイルシステムコピーを使用すると問題が発生しました。非常に大きなテーブルがいくつかあります。ほとんどがMyISAMといくつかのInnoDBキャッシュテーブルであり、データをmysqldumpするのは実用的ではありません。まだMyISAMを実行しているため、XtraBackupはオプションではありません。

上記と同じ症状が私に起こりました。テーブルはありません。ディレクトリにはテーブルに関連するファイルはありませんが、MySQLがそこにあると考えているため、作成できません。テーブルを削除すると、そこにないと表示され、テーブルを作成すると、存在すると表示されます。

この問題は2台のマシンで発生しましたが、どちらもバックアップをコピーすることで修正されました。ただし、バックアップに.MYDファイルと.MYIファイルがあることに気付きましたが、これらのファイルはInnoDBに使用されていないという印象を受けました。.MYDファイルと.MYIファイルにはrootの所有者があり、.frmはmysqlが所有していました。

バックアップからコピーする場合は、ファイルのアクセス許可を確認してください。テーブルのフラッシュは機能する可能性がありますが、データベースをシャットダウンして再起動することを選択しました。

幸運を。

于 2013-08-12T14:20:32.753 に答える
1

osCommerceおやおや、mysqlシステムに多くのデータベースがあり、クエリがそれ自体を各データベースにコピーすることを理解するまで、インストールスクリプトで同じ問題が発生しました。create tableしたがって、アクティブなデータベースに作業テーブルのみをドロップしても効果がなく、すべてのデータベースからテーブルをドロップする必要がありました。

于 2014-04-30T09:23:25.990 に答える
1

バックアップSQLファイルをインポートしようとしましたが、エラーが発生していました。1050「テーブルはすでに存在します」

私のセットアップは次のとおりです。

  • Windows 7
  • Mysql 5.5.16

解決:

  1. サーバーエンジンをInnoDBからMyISAMに変更しました
  2. phpMyAdminを使用してインポートしようとしたデータベースを削除しました
  3. mysqlサービスを再起動しました
  4. 再インポートを試みましたが、うまくいきました
于 2014-08-13T07:02:15.503 に答える
1

私の場合、問題はテーブルと同じ名前のビューがあったことでした。そのため、インポートを続行するには、ビューを削除する必要がありました。

drop view `my-view-that-has-same-name-as-table`;

私のために働いた自動化された解決策は、ダンプ中に通常のドロップテーブルをこのsedに置き換えて、存在する可能性のあるビューもすべてドロップすることです。

mysqldump my-db \
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/\0 DROP VIEW IF EXISTS\1/g' \
| mysql my-other-db

または、バックアップ用にファイルに印刷したい場合

mysqldump my-db \
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/\0 DROP VIEW IF EXISTS\1/g' \
> my-db.dump.sql

または、ダンプされたファイルを受け取り、それをデータベースにインポートしている場合

cat my-db.dump.sql \
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/\0 DROP VIEW IF EXISTS\1/g' \
| mysql my-other-db

あなたはアイデアを得る

注:ダンプには、触れたくない^他の種類のコマンドがあるため、置換正規表現の先頭にを追加することが重要です。DROP TABLE IF EXISTS

あなたはこのようなものを持っていることから行きます:

--
-- Table structure for table `my_table`
--

DROP TABLE IF EXISTS `my_table`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `my_table` (
...

このようなものを持つために:

--
-- Table structure for table `my_table`
--

DROP TABLE IF EXISTS `my_table`; DROP VIEW IF EXISTS `my_table`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `my_table` (
...
于 2017-06-21T21:45:17.897 に答える
1

同じエラーが発生しましたが、テーブルがすでに存在していることを知っていたので、テーブルに追加したいと思いました。同じエラーを探しているが、わずかに異なるシナリオを探しているときに、この質問がグーグルで私にとってナンバーワンとして出てくるので、私は私の答えを追加しています。基本的に私はカチカチ音をたてる必要がありました

「DROPTABLE/VIEW / PROCEDURE / FUNCTION / EVENT/TRIGGERステートメントを追加してください」

そして、これは私にとってエラーを解決しました。

于 2019-05-08T20:39:40.670 に答える
0

新しい空のデータベースにMagentoeコマースの.sqlダンプをインポートするときに同じエラーが発生しました。上記の解決策のいくつかを試しましたが、どれも機能しませんでした。ダンプの作成方法を変更する問題を修正しました。

ダンプの作成時に単一のトランザクションを追加すると、問題が修正されました。

于 2022-01-18T14:24:19.387 に答える