私はこの表を追加しています:
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'は既に存在します
あなたが持っているように聞こえます シュレーディンガーのテーブル ...
真剣に今、あなたはおそらく壊れたテーブルを持っています。試してください:
DROP TABLE IF EXISTS contenttype
REPAIR TABLE contenttype
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.
これと同じエラーが発生し、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で実行)
テーブルキャッシュをフラッシュする必要がある場合があります。例えば:
DROP TABLE IF EXISTS `tablename` ;
FLUSH TABLES `tablename` ; /* or exclude `tablename` to flush all tables */
CREATE TABLE `tablename` ...
同じ問題に遭遇した(InnoDBテーブルを作成する)これが最終的に私のために働いたものです:
DROP DATABASE `having_issues`;
ファイル単位でアクセス許可を確認し、修復とフラッシュを試みましたが、何も機能しませんでした。
これがオプションである場合、すべての作業テーブルを別のデータベースに移動し、古いテーブルを削除します(作業する前にデータベースフォルダからファイルを手動で削除する必要があります) 、そしてあなたはあなたの方法に「戻る」べきです。どうやら、InnoDBを使用して「キャッシュ」されるものはすべて、元のデータベースとともにドロップされます。
私はこれと一日中戦っています。最初にDROP IF EXISTS ...
を実行し、次にCREATE
ingを実行して一連のテーブルを作成するPerlスクリプトがあります。 DROP
は成功しましたが、CREATE
で次のエラーメッセージが表示されました:table already exists
私はついに最後までやりました:使用しているMySQLの新しいバージョンには、InnoDBのデフォルトエンジンがあります( "show engine\G;")my.cnfファイルでMyISAMをデフォルトに変更しました。 MySQLを起動し、「テーブルが既に存在します」というエラーが表示されなくなりました。
ビューの作成中に同じ問題が発生しました。ビューは以前に存在していましたが、いくつかの変更により削除されましたが、再度追加しようとすると、「ビューは既に存在します」というエラーメッセージが表示されていました。
ソリューション:
手動で1つのことができます。
テーブルが正常に作成されます。
また、テーブルを作成しようとすると既に存在し、テーブルをドロップすると存在しないと表示されるこの問題に遭遇しました。
「FLUSH TABLES」を実行すると、問題は解決しました。
MySql 12.3のSql MaestroのWin7でこの問題が発生しました。ひどくいらいらする、実はショーストッパー。データベースをドロップして再作成することすら、何も助けになりませんでした。 XPにも同じ設定があり、そこで機能するため、アクセス許可に関する回答を読んだ後、Win7アクセス許可に関連する必要があることに気付きました。そのため、管理者としてMySqlを実行し、Sql Maestroが正常に実行されても、エラーは消えました。したがって、Win7とMySqlの間のアクセス許可の問題であったに違いありません。
これと同じケースがありました。問題は、親ディレクトリのアクセス許可になってしまいました。
私はテスト中にmysqlの内外にファイルをコピーしていました。
drwx------ 3 _mysql wheel
十分ではありませんでした:
-rw-rw---- 3 _mysql wheel
復活してすみません。
エラー1050および150で大きな問題が発生していました。
問題は、私にとってON DELETE SET NULL
を条件の1つとして制約を追加しようとしていたことです。
ON DELETE NO ACTION
に変更すると、必要なFK制約を追加できました。
残念ながら、MySqlのエラーメッセージはまったく役に立たないので、この解決策を繰り返し見つけ、上記の質問への回答の助けを借りなければなりませんでした。
まず、正しいデータベースUSE yourDB
にいるかどうかを確認し、Select * from contenttype
を試して、それが何であるか、実際に存在するかどうかを確認します...
私は同じ問題に苦しんでいます。テーブルが存在しなくても、作成できません。上記のすべてのソリューションを試してみましたが、成功しませんでした。
私の解決策は、MySQLのデータフォルダーからファイルib_logfil0
、ib_logfile1
、ibdata1
、およびauto.cnf
を削除することでした。これらのファイルを削除する前に、必ずMySQLサービスを停止してください。
その後、サービスを再起動した後、MySQLがこれらのファイルを再作成し、CREATE
sがすべて保存されていたバックアップスクリプト(sqldumpファイル)を実行できました。
Mac OS XとMySQL 5.1.40でも同じ問題がありました。 Eclipseを使用してSQLスクリプトを編集し、MySQLWorkbench 5.2.28を試しました。おそらく、改行文字をMac形式に変換しました。ファイルの最初の行をコメントアウトするまで、スクリプトの何が問題なのかわかりませんでした。この後、このスクリプトはmysqlによって1つのコメントとして解釈されました。これを修正するには、組み込みのTextEdit Macアプリケーションを使用しました。改行が正しい形式に変換された後、エラー1050はなくなりました。
Eclipseユーザー向けの更新:
ワークスペース全体で作成された新しいファイルのデフォルトの終了を設定するには:
ウィンドウ->設定->一般->ワークスペース->新しいテキストファイルの行区切り文字。
既存のファイルを変換するには、編集用にファイルを開き、現在編集中のファイルに対しては、メニューに移動します。
ファイル->行区切り記号の変換
バックアップSQLファイルをインポートしようとしていましたが、エラーが発生していました。 1050「テーブルは既に存在します」
私のセットアップは:
解決:
私にとっては、mysqldumpの代わりにmysqlデータベースディレクトリのファイルシステムコピーを使用すると問題が発生しました。私はいくつかの非常に大きなテーブル、主にMyISAMといくつかのInnoDBキャッシュテーブルを持っていますが、データをmysqldumpすることは実用的ではありません。まだMyISAMを実行しているため、XtraBackupはオプションではありません。
上記と同じ症状が私に起こりました。テーブルは存在せず、ディレクトリにテーブルに関連するファイルはありませんが、MySQLがテーブルを認識しているため、作成できません。テーブルを削除すると、存在しないと表示され、テーブルを作成すると、存在すると表示されます。
この問題は2台のマシンで発生し、両方ともバックアップをコピーすることで修正されました。しかし、バックアップで.MYDおよび.MYIファイルが存在することに気付きました。これらのファイルはInnoDBには使用されていないという印象を受けていました。 .MYDおよび.MYIファイルの所有者はrootでしたが、.frmの所有者はmysqlでした。
バックアップからコピーする場合は、ファイルのアクセス許可を確認してください。フラッシュテーブルは動作する可能性がありますが、データベースをシャットダウンして再起動することを選択しました。
幸運を。
同じエラーが発生しましたが、テーブルがすでに存在することを知っていたため、追加したいと考えました。この質問は、同じエラーを探しているが、わずかに異なるシナリオを探しているときに、Googleで1位になったため、回答を追加します。基本的に私はチェックする必要がありました
「DROP TABLE/VIEW/PROCEDURE/FUNCTION/EVENT/TRIGGERステートメントの追加」
これでエラーが解決しました。
これと同じ問題があり、データベース名では大文字と小文字が区別されたようです。私のデータベースは次のように呼ばれます:
Mydatabase
私のスクリプトが含まれている間
USE mydatabase
データベース名を正しい大文字と小文字に変更すると、すべてうまくいくように見えました。 MAC OSXでのMYSQLワークベンチの使用
ディスクもいっぱいになっている可能性があります。 (ちょうどそれを持っていた)
CREATEステートメントは、ステージング環境ダンプの一部でした。
上記のすべてを試しました。 I DID解決策が得られません。しかし、償還への私の道は:
データベース名の大文字と小文字の区別を修正したときに、CREATEステートメント(の多くの1つ)が通過したという事実につまずきます。これは何かをクリックしました。他のテーブルについても同じことを繰り返しました。
しかし、新しいエラーが発生しました。 「コメント」の単純な引用符は、構文エラーを投げていました。私はショックを受けました。それらを置き換えましたが、新しいエラーがポップアップし始めました。最後に、私は解決策を知っていました。
解決策:私が使用していたダンプは、MySqlの異なるバージョンのものである可能性があります。ローカル(マシンにインストール済み)mysqlワークベンチを使用してステージングMYsqlに接続する許可を得ました。 mysqlワークベンチのステージングにログインするためにステージングサーバーにrdpしませんでした。そこからダンプを作成しました。ダンプを実行し、それは甘いように働いた。
この問題は、新しいビュー名と同じ名前で「ビュー」(仮想テーブル)がデータベースに存在する場合にも発生します。
私の場合、問題はテーブルと同じ名前のビューがあったことでした。そのため、インポートを続行するにはビューをドロップする必要がありました。
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` (
...
私の場合、これはInnoDBの問題であることがわかりました。私は実際の問題が何であるかを決して発見しませんでしたが、MyISAMとして作成することで
gosh、mysqlシステムに多くのデータベースがあり、create table
クエリが各データベースに自分自身をコピーするまで、osCommerce
インストールスクリプトで同じ問題が発生したため、アクティブなdbの作業テーブルのみを削除しました、すべてのデータベースからテーブルを削除する必要がありました
あなたは私を信じません! .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ファイルに残しました。その後、コメントを削除し、唯一のコードが残され、エラーが消えました。