MySQL“存在しない場合はテーブルを作成” ->エラー1050
-
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)