3

h2 是否支持使用辅助键创建表?

当我尝试这个创建表时,它失败了“org.h2.jdbc.JdbcSQLException:未知数据类型:”(“;SQL语句:”

CREATE TABLE IF NOT EXISTS testTable
    (col1 BIGINT(20) NOT NULL AUTO_INCREMENT,
    col2 BIGINT(20) NOT NULL,
    col3 BIGINT(20) NOT NULL,
    col4 VARCHAR(100) NOT NULL,
    PRIMARY KEY(col1),
    KEY(col1, col2, col3));

但是这个成功了:

CREATE TABLE IF NOT EXISTS testTable
    (col1 BIGINT(20) NOT NULL AUTO_INCREMENT,
    col2 BIGINT(20) NOT NULL,
    col3 BIGINT(20) NOT NULL,
    col4 VARCHAR(100) NOT NULL,
    PRIMARY KEY(col1));
4

1 回答 1

0

KEY是 MySQL 特有的语法:

KEY(col1, col2, col3)

您正在寻找的是一个UNIQUE约束,例如

CREATE TABLE IF NOT EXISTS testTable (
    col1 BIGINT(20) NOT NULL AUTO_INCREMENT,
    col2 BIGINT(20) NOT NULL,
    col3 BIGINT(20) NOT NULL,
    col4 VARCHAR(100) NOT NULL,
    PRIMARY KEY (col1),
    UNIQUE (col1, col2, col3)
);

请注意,我通常喜欢命名我的约束,因为这样以后可以更轻松地查找/删除它们:

CREATE TABLE IF NOT EXISTS testTable (
    col1 BIGINT(20) NOT NULL AUTO_INCREMENT,
    col2 BIGINT(20) NOT NULL,
    col3 BIGINT(20) NOT NULL,
    col4 VARCHAR(100) NOT NULL,
    CONSTRAINT primary_key PRIMARY KEY (col1),
    CONSTRAINT secondary_key UNIQUE (col1, col2, col3)
);

如果您不是在寻找独特性

有趣的是(正如评论中所指出的那样),MySQL 使用术语KEY来表示非唯一索引。在大多数数据库(包括 MySQL)中,您只需为这种情况创建一个索引:

CREATE INDEX secondary_index ON testTable(col1, col2, col3);
于 2016-04-10T08:24:48.947 回答