CREATE TABLE中的1064错误... TYPE = MYISAM

时间:2012-09-14 16:46:53

标签: mysql syntax

这是我的错误(如果您需要更多信息请询问) - 错误 SQL查询:

CREATE TABLE dave_bannedwords(

id INT( 11 ) NOT NULL AUTO_INCREMENT ,
word VARCHAR( 60 ) NOT NULL DEFAULT  '',
PRIMARY KEY ( id ) ,
KEY id( id )
) TYPE = MYISAM ;
MySQL说:

  

1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法   在第6行'TYPE = MyISAM'附近

5 个答案:

答案 0 :(得分:71)

正如CREATE TABLE Syntax所述:

  

注意
  较早的TYPE选项与ENGINE同义。 TYPE在MySQL 4.0中已弃用,在MySQL 5.5中已删除。 升级到MySQL 5.5或更高版本时,您必须转换依赖TYPE的现有应用程序来改为使用ENGINE

因此,您需要:

CREATE TABLE dave_bannedwords(
  id   INT(11)     NOT NULL AUTO_INCREMENT,
  word VARCHAR(60) NOT NULL DEFAULT '',
  PRIMARY KEY (id),
  KEY id(id) -- this is superfluous in the presence of your PK, ergo unnecessary
) ENGINE = MyISAM ;

答案 1 :(得分:0)

有关SQL转储文件中CREATE TABLE .. TYPE=""语法的补充说明

TLDR:如果您仍然在由第三方工具生成的SQL转储文件中获得CREATE TABLE ... TYPE="..."语句,则很可能表明您的服务器配置为使用默认的sqlmodeMYSQL40MYSQL323

长话

就像其他人所说的那样,在MySQL中很久以来不推荐使用TYPE的{​​{1}}参数。 CREATE TABLE正确使用mysqldump参数,除非您特别要求它生成向后兼容的转储(例如,在ENGINE最高为5.7的版本中使用--compatible=mysql40)。

但是,许多外部SQL转储工具(例如,集成在MySQL客户端中的工具(例如phpmyadmin,Navicat和DBVisualizer)以及外部自动备份服务(例如iControlWP)使用的工具)并没有特别意识到此更改,并且而是依靠mysqldump命令为每个表提供表创建语句(要清楚地说:这实际上是一件好事)。但是,如果将SHOW CREATE TABLE ...变量设置为SHOW CREATE TABLETYPEsqlmode实际上会产生过时的语法,包括MYSQL40参数。

因此,如果您仍然在由第三方工具生成的SQL转储文件中获得MYSQL323语句,则很可能表明您的服务器配置为使用默认的CREATE TABLE ... TYPE="..."sqlmodeMYSQL40

这些MYSQL323基本上将MySQL配置为保留一些向后兼容的行为,并且几年前强烈建议默认使用它们。但是,如果没有这些模式,您仍然拥有无法正常工作的任何代码,这是极不可能的。无论如何,已经弃用了sqlmodeMYSQL40和其他几个类似的MYSQL323,并且在MySQL 8.0和更高版本中不受支持。

如果您的服务器仍配置有这些sqlmode,并且您担心如果更改这些遗留程序,某些旧版程序可能会失败,那么一种可能性是为该程序在本地设置sqlmode,方法是:连接后立即执行sqlmode。请注意,这仅应视为临时补丁,在MySQL 8.0及更高版本中将不起作用。

一个不涉及重写SQL查询的,更可靠的解决方案将是确定要启用的兼容性功能,并基于每个程序仅启用那些兼容性功能(如前所述)。理想情况下,默认SET SESSION sql_mode = 'MYSQL40';(即在服务器的配置中)应该保持未设置状态(它将使用当前版本的MySQL官方默认值)。 sqlmode(自MySQL 5.7起)的完整列表在此处描述:https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html

答案 2 :(得分:-2)

CREATE TABLE `admnih` (
  `id` int(255) NOT NULL auto_increment,
  `asim` varchar(255) NOT NULL default '',
  `brid` varchar(255) NOT NULL default '',
  `rwtbah` int(1) NOT NULL default '0',
  `esmmwkeh` varchar(255) NOT NULL default '',
  `mrwr` varchar(255) NOT NULL default '',
  `tid` int(255) NOT NULL default '0',
  `alksmfialdlil` int(255) NOT NULL default '0',
  `tariktsjil` varchar(255) NOT NULL default '',
  `aimwke` varchar(255) NOT NULL default '',
  `twkie` text NOT NULL,
  `rwtbahkasah` int(255) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

答案 3 :(得分:-2)

SELECT Email, COUNT(*)
FROM user_log    
WHILE Email IS NOT NULL    
GROUP BY Email    
HAVING COUNT(*) > 1    
ORDER BY UpdateDate DESC 
  

MySQL说:文档#1064 - 您的SQL中有错误   句法;查看与MySQL服务器版本对应的手册   在第36行的“TYPE = MyISAM”附近使用正确的语法

以下哪项更正:

CREATE TABLE users_online (
  ip varchar(15) NOT NULL default '',
  time int(11) default NULL,
  PRIMARY KEY  (ip),
  UNIQUE KEY id (ip),
  KEY id_2 (ip)
  TYPE=MyISAM;
)
#                           
# Data untuk tabel `users_online`
#

INSERT INTO users_online VALUES ('127.0.0.1', 1158666872);

答案 4 :(得分:-2)

尝试以下查询

.lovernehovermarket i.fa.fa-rocket { 
    transform: rotate(0deg);
    transition: transform 999s;
}