【问题标题】:auto_increment causing errors with CREATE TABLEauto_increment 导致 CREATE TABLE 出错
【发布时间】:2008-11-09 16:58:45
【问题描述】:

我一直在使用 netbeans 作为我的 java 工具,但我遇到了问题。我阅读了this tutorial,然后我尝试使用此 SQL 创建一个表:

CREATE TABLE CUSTOMERS (
    ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FIRST_NAME VARCHAR(20),
    LAST_NAME VARCHAR(30),
    ADDRESS VARCHAR(30),
    CITY VARCHAR(30),
    STATE_ VARCHAR(30),
    ZIP VARCHAR(15),
    COUNTRY_ID INTEGER,
    PHONE VARCHAR(15),
    EMAIL_ADDRESS VARCHAR(50)
)ENGINE=INNODB;

当我尝试运行它时,我收到以下错误消息:

sql 状态 42X01:语法错误: 在第 2 行遇到“AUTO_INCREMENT” 第 29 栏

当我删除 AUTO_INCREMENT 时,另一个错误:

检测到 ENGINE=INNODB;

有人可以帮助我吗?谢谢。

【问题讨论】:

  • 您使用的是哪个版本的 MySQL?
  • 我使用的是 Netbean 6.1 ,所以 MySql 是从那里包含进来的。
  • 您使用的是什么数据库引擎?你是如何访问它的?

标签: sql mysql syntax


【解决方案1】:

您似乎正在将 MySQL 语法与另一个数据库引擎一起使用。它抱怨的部分正是 MySQL 特定的部分。

【讨论】:

  • 是的,就是这样。有问题的数据库是 DB2。
【解决方案2】:

我的建议如下

CREATE TABLE CUSTOMERS 
( ID INTEGER NOT NULL auto_increment,
FIRST_NAME VARCHAR(20), 
LAST_NAME VARCHAR(30), 
ADDRESS VARCHAR(30), 
CITY VARCHAR(30), 
STATE_ VARCHAR(30), 
ZIP VARCHAR(15), 
COUNTRY_ID INTEGER, 
PHONE VARCHAR(15), 
EMAIL_ADDRESS VARCHAR(50),
PRIMARY KEY (ID));

不知道 engine=innodb 是干什么用的,你试过没有它吗?

【讨论】:

  • 从未使用过该 api 顺便说一句,只是发布了我编写创建表 sql 的方式
【解决方案3】:

“engine=innodb”部分指定在数据库中使用的数据库引擎。使用 MySQL,您可以指定不同的引擎,如“InnoDB”、“MyISAM”等。它们具有不同的属性和特性——有些允许外部索引,有些则不允许。有些具有不同的锁定机制,有些具有不同的原子性/回滚属性。我不知道细节,但如果您需要一个真正高性能的数据库设置,您应该调查哪种引擎最适合您正在创建的每种类型的表。另外,我所有的数据库经验都是使用 MySQL 的,我不确定您是否正在使用它。

【讨论】:

    【解决方案4】:

    已经很长时间了,但如果其他人像我一样偶然发现这个问题,对我有用的解决方案不是使用auto_increment,而是将 ID 列描述为

    ID INTEGER GENERATED ALWAYS AS IDENTITY, WHATEVER VARCHAR(20), ETC ETC...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-04
      • 2013-04-13
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      • 2020-06-30
      相关资源
      最近更新 更多