创建具有相互引用的延迟外键的表

时间:2016-10-14 19:21:16

标签: sqlite transactions foreign-keys

我是新手中的sqlite和sql,所以我不知道我的方法是否合理。

我想建模可以创建,借出,退回和丢弃的库存物品。

我想使用两个表对其进行建模,一个用于项目,包含id,名称和对最后一个事务(创建,借出,返回...)的引用以及包含id事务类型的事务表,日期和对项目的引用。

由于只创建一个表会使数据库处于不一致的状态,其中一个表引用一个不存在的表,我想到使用一个事务来同时创建两个表,并将外键定义为可延迟的。创建新项目必须在一个事务中一起完成,创建“已创建”事件以使数据库保持一致状态。

以下代码在linux上的sqliteman中给出了错误Query Error: not an error Unable to execute multiple statements at a time

PRAGMA foreign_keys = ON;

begin transaction;
create table items (
id  integer primary key,
name char(30),
foreign key (last_transaction) references transactions(transaction_id) DEFERRABLE INITIALLY DEFERRED
);

create table transactions(
transaction_id integer primary key,
text char(100)
foreign key (item) references items(id) DEFERRABLE INITIALLY DEFERRED
);
commit transaction;

我的方法是否有意义? 如果是,为什么代码不起作用? (我在某个地方犯了错误,还是我在mysql中尝试不可能的?)

注意:在没有外键约束的情况下简单地在一个事务中创建表会产生相同的错误。 (这可能是类似的问题:this question

0 个答案:

没有答案