コマンドの使用:
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
はテーブルが見つからなかったため失敗しました... CREATE TABLE
は、MySQLがテーブルが存在すると判断したために失敗しました。 (この状態は、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`)
);***
Phpmyadminエクスポート後にこのエラーが発生した場合、カスタムオプションを使用して「ドロップテーブル」ステートメントを追加すると、このエラーが解消されます。
Debianの@CraigWalkerと同様の問題がありました。データベースが、テーブルを見つけることができなかったためDROP TABLE
が失敗した状態でしたが、MySQLはテーブルがまだ存在すると考えたため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