Database H2复合主键(字段获得唯一但不是主键)

Database H2复合主键(字段获得唯一但不是主键),database,primary-key,h2,composite-primary-key,Database,Primary Key,H2,Composite Primary Key,我的h2数据库表中的复合主键有问题。 这是表的create语句: CREATE TABLE IF NOT EXISTS TTColumn ( Name VARCHAR(15) NOT NULL, TTName CHAR(8) NOT NULL, Type VARCHAR(15) NOT NULL, Length INTEGER NOT NULL, Position INTEGER NOT NULL, IsDBLogType

我的h2数据库表中的复合主键有问题。 这是表的create语句:

 CREATE TABLE IF NOT EXISTS TTColumn (  
    Name VARCHAR(15) NOT NULL,  
    TTName CHAR(8) NOT NULL,  
    Type VARCHAR(15) NOT NULL,  
    Length INTEGER NOT NULL,  
    Position INTEGER NOT NULL,  
    IsDBLogType BIT NOT NULL,   
    PRIMARY KEY(TTName,Name),   
    FOREIGN KEY(TTName) REFERENCES TrackingTable(Name))  
(TTName是列的表名,因此表中的每一列都是相同的,但表中的每一列都是唯一的,因此它是一个复合键)
如果我用数据填充这个表,我会得到以下异常

rg.h2.jdbc.JdbcSQLException: Eindeutiger Index oder Primärschlüssel verletzt: "CONSTRAINT_INDEX_E8 ON PUBLIC.TTCOLUMN(TTNAME) VALUES ('KIBLCOVI', 1)"
Unique index or primary key violation: "CONSTRAINT_INDEX_E8 ON PUBLIC.TTCOLUMN(TTNAME) VALUES ('KIBLCOVI', 1)"; SQL statement:
INSERT INTO TTColumn (Name,TTName,Type,Length,Position,IsDBLogType) VALUES (?,?,?,?,?,?) [23505-189] 
正如您所看到的,“Name”列不再是主键的一部分,就像我在create语句中定义的那样,我不知道为什么。 我在其他表中也遇到了这个问题,在创建主表之后,用alter表添加主表解决了同样的问题。当“Name”是主键中的第一列时,它将获取主键中的唯一列,因此最后一个条目将被删除

我知道,一种解决方案是使用id,但我想使用复合主键,因为我不喜欢在不必要的时候添加id。 我的create语句有什么问题吗?或者你还有其他提示吗

另外,我尝试了版本1.4.189和版本1.3.176作为.jar(没有服务器)

编辑: 嗯,下面是show columns的输出:

NAME|VARCHAR(15)|NO|UNI|NULL|  
TTNAME|CHAR(8)|NO|UNI|NULL|  
TYPE|VARCHAR(15)|NO||NULL|  
LENGTH|INTEGER(10)|NO||NULL|  
POSITION|INTEGER(10)|NO||NULL|  
ISDBLOGTYPE|BOOLEAN(1)|NO||NULL| 
不知何故,列名和TTName是UNI(唯一的),但不是主键。 如果更改主键声明中的顺序,列TTName将成为主键字段,但名称保持唯一