使用命令:

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

在MySQL查询浏览器运行此两次导致:

  

表 '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`)
);***

我也有类似的问题,因为@CraigWalker在Debian:我的数据库是一个状态,其中一个DROP TABLE失败,因为它找不到表,但CREATE TABLE也未能因为MySQL认为该表仍然存在。所以破表仍然存在的地方,虽然它不存在,当我在phpMyAdmin看了。

我通过仅仅复制包含具有一些MyISAM和一些InnoDB表的数据库的整个文件夹中创建该状态

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

(这是不推荐!)

所有InnoDB表其中在phpMyAdmin新数据库test不可见。

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连接。 “ 'raise_on_warnings':假”。它将忽略警告。 e.g。

config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db',   'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top