有人在外键约束下对本地EXPO的sqlite数据库做出反应吗?我们可以使用类似于sql的结构吗?
我正在尝试使用外键条件构建多个表。
示例:如果我们有2个表Persons和Orders,其中personID在orders表中称为外键。使用sqlite怎么办?
答案 0 :(得分:0)
您将有两个表,也许有一个列作为 rowid 列的别名,即
例如
CREATE TABLE persons (
personid INTEGER PRIMARY KEY,
personname TEXT
);
CREATE TABLE orders (
orderid INTEGER PRIMARY KEY,
ordername TEXT,
person_reference INTEGER REFERENCES persons(personid)
);
PRAGMA foreign_keys = ON;
(或true)。参见PRAGMA foreign_keys column_name INTEGER PRIMARY KEY
中,如果您随后尝试为不存在的Personid插入订单,则会收到外键冲突。
列级定义的替代方法是在表级定义外键,例如
CREATE TABLE orders (
orderid INTEGER PRIMARY KEY,
ordername TEXT,
person_reference INTEGER,
FOREIGN KEY (person_reference) REFERENCES persons(personid)
);
作为示例,请考虑以下内容:-
INSERT INTO persons (personname) VALUES
('Fred'),
('Mary'),
('Sue'),
('Tom')
;
INSERT INTO orders (ordername, person_reference) VALUES
('Order 1 for Fred',1),
('Order 2 for Sue',3),
('Order 3 for Fred',1),
('Order 4 for Mary',2)
;
INSERT into orders (ordername, person_reference) VALUES
('Order 5 for nobody',100);
结果将是:-
INSERT INTO persons (personname) VALUES ('Fred'),('Mary'),('Sue'),('Tom') > Affected rows: 4 > Time: 0.453s INSERT INTO orders (ordername, person_reference) VALUES ('Order 1 for Fred',1),('Order 2 for Sue',3),('Order 3 for Fred',1),('Order 4 for Mary',2) > Affected rows: 4 > Time: 0.084s INSERT into orders (ordername, person_reference) VALUES ('Order 5 for nobody',100) > FOREIGN KEY constraint failed > Time: 0s
即最后一个,因为在人员表中没有任何行,且没有任何一个id为100的人,那么最后一个插入(在其本身的doe演示中)将失败。