32

这是我的错误(如果您需要更多信息,请询问)- 错误 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' 附近使用正确的语法

4

5 回答 5

75

CREATE TABLE语法中所述:

注意
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 ;
于 2012-09-14T16:51:07.383 回答
0

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

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

很长的故事

正如其他人所说,该TYPE论点CREATE TABLE在 MySQL 中已被弃用了很长时间。mysqldump正确使用该ENGINE参数,除非您明确要求它生成向后兼容的转储(例如在最高 5.7--compatible=mysql40的版本中使用)。mysqldump

但是,许多外部 SQL 转储工具(例如,那些集成在 MySQL 客户端中的工具,如 phpmyadmin、Navicat 和 DBVisualizer,以及外部自动备份服务(如 iControlWP)使用的工具)并没有特别意识到这一变化,而是依赖于为每个表提供表创建语句的SHOW CREATE TABLE ...命令(并且明确表示:这实际上是一件好事)。但是,如果变量设置为or SHOW CREATE TABLE,实际上会产生过时的语法,包括参数。TYPEsqlmodeMYSQL40MYSQL323

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

这些sqlmodes 基本上配置 MySQL 以保留一些向后兼容的行为,并且默认使用它们在几年前被广泛推荐。然而,如果没有这些模式,您仍然有任何无法正常工作的代码是极不可能的。无论如何,MYSQL40MYSQL323其他几个类似sqlmode的 s 本身已被弃用,并且在 MySQL 8.0 及更高版本中不受支持。

如果您的服务器仍然配置有这些sqlmodes,并且您担心如果更改这些旧程序可能会失败,那么一种可能性是通过在连接后立即sqlmode执行来为该程序设置本地。SET SESSION sql_mode = 'MYSQL40';请注意,这仅应被视为临时补丁,在 MySQL 8.0 及更高版本中不起作用。

不涉及重写 SQL 查询的更面向未来的解决方案是确定需要启用哪些兼容性功能,并且仅启用那些,基于每个程序(如前所述)。默认值sqlmode(即,在服务器的配置中)最好不要设置(它将使用当前版本的官方 MySQL 默认值)。sqlmode(从 MySQL 5.7 开始)的完整列表在此处描述: https ://dev.mysql.com/doc/refman/5.7/en/sql-mode.html 。

于 2018-12-10T16:19:23.063 回答
-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 ;
于 2016-08-14T05:38:56.603 回答
-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);
于 2017-01-30T06:59:43.890 回答
-2

试试下面的查询

CREATE TABLE card_types (
  card_type_id int(11) NOT NULL auto_increment,
  name varchar(50) NOT NULL default '',
  PRIMARY KEY  (card_type_id),
) ENGINE = MyISAM ;
于 2017-06-12T22:08:10.997 回答