如何在SQLITE3中创建一对多?

如何在SQLITE3中创建一对多?,sql,database,database-design,sqlite,one-to-many,Sql,Database,Database Design,Sqlite,One To Many,如何在SQLITE3中创建一对多? 我有两张桌子: Mans: _id name 1 antony 2 fred 及 我不知道SQL语法,请帮帮我。这句话的语法如下 CREATE TABLE (MySecondTable) Foo INT FOREIGN KEY(Foo) REFERENCES MyFirstTable(PrimaryKeyField) ON DELETE CASCASDE ON UPDATE CASCASDE 仅适用于v3.6.1+ 以下是iamkril

如何在SQLITE3中创建一对多? 我有两张桌子:

Mans:
_id   name
 1    antony
 2    fred


我不知道SQL语法,请帮帮我。

这句话的语法如下

CREATE TABLE (MySecondTable) Foo INT FOREIGN KEY(Foo) REFERENCES MyFirstTable(PrimaryKeyField) ON DELETE CASCASDE ON UPDATE CASCASDE
仅适用于v3.6.1+


以下是iamkrillin所写的文档:

CREATE TABLE (points) points_id INT
FOREIGN KEY(man_id) REFERENCES mans(PrimaryKeyField)
ON DELETE CASCADE ON UPDATE CASCADE
这是一个真实的例子。假设您有一些人向您介绍业务:您的员工、朋友、您做广告的当地企业等。进来的客户称为“推荐”业务。每个人只算作一个推荐人,但推荐人可以推荐多个推荐人(例如,一名员工可以推荐20个新客户;该员工是您的推荐人,并且该员工已经进行了20次推荐)。因此,您有1个推荐人和20个推荐人(一对多):

现在,有可能不止一个人推荐一个推荐人,但我认为标准的商业惯例是只补偿一个推荐人。所以,你永远不需要列出两个推荐人。这将始终是一对一或一对多的关系;因此,您应该将其设置为一对多表。我对CASCADE的东西不是很精通,但我会努力弄清楚这是怎么回事

乍一看,它似乎不属于我的答案,因为删除最后一个引用不应该删除引用

看看:

如果您从
hard_candy
表中删除了一个硬糖,那么您也将从
all_candy
表中删除它,因为硬糖是糖果的一种类型,并且如果糖果的类型已更改(例如,为不连续的糖果),则无论如何都需要执行新的INSERT命令

我在sqlite3中运行了一个关于更新级联和更新删除的测试用例,似乎没有效果。可能它们不适用于sqlite3的默认db引擎,但其功能已在SQLite官方网站上列出:。读一读,看看你的想法

这是我用于测试用例的模式:

BEGIN TRANSACTION;
CREATE TABLE candy(id integer primary key not null, name text, description text);
INSERT INTO candy VALUES(1,'Laffy Taffy', 'Delicious, soft candy.');
INSERT INTO candy VALUES(2,'Pop Rocks', 'A candy that explodes in your mouth.');
COMMIT;

BEGIN TRANSACTION;
CREATE TABLE hard_candy(id integer primary key not null, name text, description text, foreign key(id,name,description) references hard_candy ON DELETE CASCADE ON UPDATE CASCADE);
INSERT INTO hard_candy VALUES(2,'Pop Rocks', 'A candy that explodes in your mouth.');
COMMIT;

对其中一个表的id-2描述字段进行了各种更新。

我怀疑第二个表是这样的-这些是SQL表还是您要输入的数据?伊利·斯克里林恶棍:您检查了我的答案了吗?
CREATE TABLE referal(                                         
  referal_id INTEGER UNIQUE NOT NULL PRIMARY KEY,           //A customer can only be 1 referal.
  referal_method TEXT,                                      //How were they refered?  By phone?
  referer_id INTEGER ,                                      //Who refered them?
  FOREIGN KEY(referer_id) REFERENCES referer(referer_id));  //Trace more about referer.
CREATE TABLE all_candy 
   (candy_num SERIAL PRIMARY KEY,
    candy_maker CHAR(25));

CREATE TABLE hard_candy 
   (candy_num INT, 
    candy_flavor CHAR(20),
    FOREIGN KEY (candy_num) REFERENCES all_candy
    ON DELETE CASCADE)
BEGIN TRANSACTION;
CREATE TABLE candy(id integer primary key not null, name text, description text);
INSERT INTO candy VALUES(1,'Laffy Taffy', 'Delicious, soft candy.');
INSERT INTO candy VALUES(2,'Pop Rocks', 'A candy that explodes in your mouth.');
COMMIT;

BEGIN TRANSACTION;
CREATE TABLE hard_candy(id integer primary key not null, name text, description text, foreign key(id,name,description) references hard_candy ON DELETE CASCADE ON UPDATE CASCADE);
INSERT INTO hard_candy VALUES(2,'Pop Rocks', 'A candy that explodes in your mouth.');
COMMIT;