如何在SQLITE3中创建一对多? 我有2张桌子:
Mans:
_id name
1 antony
2 fred
和
point
_id date point
1 23 77
24 99
2 25 78
5 0
我不懂SQL语法,请帮帮我。
答案 0 :(得分:11)
通过iamkrillin the illin shrimp-skrillin恶棍:
CREATE TABLE (points) points_id INT
FOREIGN KEY(man_id) REFERENCES mans(PrimaryKeyField)
ON DELETE CASCASDE ON UPDATE CASCASDE
这是一个真实的例子。假设您有一些人向您推荐业务:您的员工,您的朋友,您做广告的当地企业等。来自的客户称为“referal”业务。每个人只算作一个参考,但参考者可以参考许多参考(例如,一个员工可能会引用20个新客户;该员工是您的推荐人,而该员工已经进行了20次参考)。所以,你有1个referer和20个referals(一对多):
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.
现在,有可能不止一个人提到了一个推荐人,但我认为仅仅补偿一个推荐人是标准的商业惯例。所以,你永远不需要列出两个引用者。这将始终是1对1或1对多的关系;因此,你应该把它变成1对多的表。我对CASCADE的东西不是很精通,但我会试着弄清楚它是如何适合的。
乍一看,ON UPDATE CASCADE ON DELETE CASCADE
似乎不属于我的回答,因为删除最后一个推荐不应该删除引用。
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)
如果您从hard_candy
表中删除硬糖,那么您也将其从all_candy
表中删除,因为硬糖是一种糖果,如果糖果类型已经改变(例如,停止使用糖果),无论如何都需要执行新的INSERT命令。
我在sqlite3中为ON UPDATE CASCADE和ON UPDATE DELETE运行了一个测试用例,它似乎没有效果。也许他们不能使用sqlite3的默认数据库引擎,但功能IS在官方SQLite网站上列出:a very descriptive, easy-to-follow example of ON UPDATE CASCADE by sqlite.org。阅读并看看你的想法。
这是我用于测试用例的模式:
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描述字段中进行各种更新。
答案 1 :(得分:3)
此语法如下....
CREATE TABLE (MySecondTable) Foo INT FOREIGN KEY(Foo) REFERENCES MyFirstTable(PrimaryKeyField) ON DELETE CASCASDE ON UPDATE CASCASDE
仅适用于v3.6.1 +