auto_increment使用CREATE TABLE导致错误

时间:2008-11-09 16:58:46

标签: sql mysql syntax

我一直在使用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 state 42X01:语法错误:   在第2行遇到“AUTO_INCREMENT”   第29栏

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

  

检测到ENGINE = INNODB;

有人能帮帮我吗?感谢。

4 个答案:

答案 0 :(得分:5)

您似乎将MySQL语法与其他数据库引擎一起使用。它抱怨的部分恰好是特定于MySQL的部分。

答案 1 :(得分:1)

我的消化将是以下

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));

Dunno引擎= innodb的用途是什么,你试过没有吗?

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

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

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