MySQL“存在しない場合はテーブルを作成” ->エラー1050

StackOverflow https://stackoverflow.com/questions/1650946

  •  22-07-2019
  •  | 
  •  

質問

コマンドの使用:

CREATE TABLE IF NOT EXISTS `test`.`t1` (
    `col` VARCHAR(16) NOT NULL
) ENGINE=MEMORY;

これをMySQL Query Browserで2回実行すると、次の結果になります。

  

テーブル 't1'は既にエラー1050に存在しています

テーブル「IF NOT EXISTS」を作成すると考えていたでしょう。エラーをスローしません。何か不足していますか、それともバグですか?バージョン 5.1 を実行しています。ありがとう。

役に立ちましたか?

解決

5.0.27で正常に動作します

テーブルが存在するという警告(エラーではなく)が表示されるだけです;

他のヒント

すでに述べたように、これはエラーではなく警告ですが、(私の場合は)警告なしで実行したい場合は、その警告を無効にして、完了したら再び有効にすることができます。

SET sql_notes = 0;      -- Temporarily disable the "Table already exists" warning
CREATE TABLE IF NOT EXISTS ...
SET sql_notes = 1;      -- And then re-enable the warning again

次のクエリを使用して、MySqlの特定のデータベースへのテーブルを作成できます。

create database if not exists `test`;

USE `test`;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

/*Table structure for table `test` */

CREATE TABLE IF NOT EXISTS `tblsample` (

  `id` int(11) NOT NULL auto_increment,   
  `recid` int(11) NOT NULL default '0',       
  `cvfilename` varchar(250)  NOT NULL default '',     
  `cvpagenumber`  int(11) NULL,     
  `cilineno` int(11)  NULL,    
  `batchname`  varchar(100) NOT NULL default '',
  `type` varchar(20) NOT NULL default '',    
  `data` varchar(100) NOT NULL default '',
   PRIMARY KEY  (`id`)

);

あなたにも当てはまる問題の解決策があります。私のデータベースは、テーブルが見つからなかったため DROP TABLE が失敗した状態でした...しかし、MySQLはテーブルが存在すると考えたため CREATE TABLE も失敗しました。 (この状態は、IF NOT EXISTS句を簡単に混乱させる可能性があります)。

やがてこのソリューションが見つかりました:

sudo mysqladmin flush-tables

私にとっては、 sudo なしで、次のエラーが発生しました:

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

(OS X 10.6で実行)

create database if not exists `test`;

USE `test`;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

/*Table structure for table `test` */

***CREATE TABLE IF NOT EXISTS `tblsample` (
  `id` int(11) NOT NULL auto_increment,   
  `recid` int(11) NOT NULL default '0',       
  `cvfilename` varchar(250)  NOT NULL default '',     
  `cvpagenumber`  int(11) NULL,     
  `cilineno` int(11)  NULL,    
  `batchname`  varchar(100) NOT NULL default '',
  `type` varchar(20) NOT NULL default '',    
  `data` varchar(100) NOT NULL default '',
   PRIMARY KEY  (`id`)
);***

Debianの@CraigWalkerと同様の問題がありました。データベースが、テーブルを見つけることができなかったため DROP TABLE が失敗した状態でしたが、 CREATE TABLE も失敗しました。そのため、phpmyadminを調べたときに存在しなかったにもかかわらず、壊れたテーブルはまだどこかに存在していました。

この状態は、いくつかの MyISAM およびいくつかの InnoDB テーブルを持つデータベースを含むフォルダー全体をコピーするだけで作成されました

cp -a /var/lib/mysql/sometable /var/lib/mysql/test

(これは推奨されません!)

phpmyadminの新しいデータベース test に表示されないすべてのInnoDBテーブル。

sudo mysqladmin flush-tables も役に立たなかった。

私の解決策: drop database test で新しいテストデータベースを削除し、代わりに mysqldump でコピーする必要がありました:

mysqldump somedatabase -u username -p -r export.sql
mysql test -u username -p < export.sql

Phpmyadminエクスポート後にこのエラーが発生した場合、カスタムオプションを使用して「ドロップテーブル」を追加します。ステートメントはこれをクリアしました。

次のパラメーターを使用してmysql接続を作成します。 &quot; 'raise_on_warnings':False&quot;。警告は無視されます。例:

config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db',   'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top