如何在SQLITE3中创建一对多?
如何在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
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;