SQLite Autoincrement用于ROWID的别名

时间:2011-12-21 14:48:22

标签: sql sqlite foreign-keys primary-key

我在SQLite中创建一些表时遇到问题 - 外键不匹配。我希望有两个表(时间和节点)ID自动递增。在Node表中,我将不引用自动递增的ID,而是引用另一列(NODE_ID)。但是,由于我想使用Time表中的列作为一个主要的主键,我想到使用一个人工ID并引用它。

基于此和in this documentation,我创建了一个ID列,我不需要设置值。这有效。但是,在此表中插入一行后,我一直有外键不匹配,将行添加到其他表并尝试引用最近插入的时间行。 我想知道为什么......

**如何向表中添加多个外键?这在SQLite中是不可能的? **

我的表是:

CREATE TABLE Time (
  ID    integer NOT NULL,
  SECOND    integer NOT NULL,
  MINUTE    integer NOT NULL,
  HOUR      integer NOT NULL,
  M_DAY     integer NOT NULL,
  MONTH     integer NOT NULL,
  YEAR      integer NOT NULL,
  W_DAY     integer NOT NULL,
  Y_DAY     integer NOT NULL,
  IS_DST    integer NOT NULL,  
  SPAN      integer NOT NULL,
  PRIMARY KEY (ID, SECOND, MINUTE, HOUR, M_DAY, MONTH, YEAR, W_DAY, Y_DAY)
);


CREATE TABLE CpuUsage (
  ID       integer NOT NULL,
  NODE_ID  integer NOT NULL,
  TIME_ID  integer NOT NULL,
  CORE_ID  integer NOT NULL,
  USER     integer,
  NICE     integer,
  SYSMODE  integer,
  IDLE     integer,
  IOWAIT   integer,
  IRQ      integer,
  SOFTIRQ  integer,
  STEAL    integer,
  GUEST    integer,
--  /* Compound Primary Keys */
  PRIMARY KEY(ID, NODE_ID, TIME_ID, CORE_ID)
--  /* Foreign keys */
  FOREIGN KEY (NODE_ID)
    REFERENCES Node(NODE_ID)
    ON DELETE CASCADE
    ON UPDATE CASCADE
  FOREIGN KEY (TIME_ID)
    REFERENCES Time(ID)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

CREATE TABLE Node (
  ID        integer NOT NULL,
  NODE_ID   integer NOT NULL,
  PRIMARY KEY (ID, NODE_ID)
);

例如,这不起作用......

INSERT INTO Time (SECOND,MINUTE,HOUR,M_DAY,MONTH,YEAR,W_DAY,Y_DAY,IS_DST, SPAN) VALUES (13, 20, 13, 21, 11, 1011, 3, 354, 0, 0);

INSERT INTO CpuUsage (NODE_ID, TIME_ID, CORE_ID, USER, NICE, SYSMODE, IDLE, IOWAIT, IRQ, SOFTIRQ, STEAL, GUEST) 
VALUES (1, 1, -1, 394784, 325834, 552058, 2334284, 136542, 2053, 3334, 0, 0 );

0 个答案:

没有答案
相关问题