目前我已将几张表格标准化,但我有一些问题。为了简单起见:
我有2张桌子。 1:userAcces 2:userInformation
在userAcces" id"是userInformation" id"中的主键。是外键。如何确保当我在两个表中插入内容时,id将保持不变。所以当我插入一些东西时,它们会自动相互对等。所以我可以使用join语句轻松查询它。
编辑另一个问题。
当您最终删除某些记录时,例如ID 1.如何确保删除所有id为1的记录?如果您已将其删除,那么ID顺序看起来会很奇怪吗?
例如你" le有:
id name
3 james
6 Elona
9 Bryan
答案 0 :(得分:0)
Here is an explanation using SQLFiddle
这是代码,只是为了完整......
设定:
CREATE TABLE ParentTable (
ID int NOT NULL PRIMARY KEY,
Name varchar(50)
)
CREATE TABLE ChildTable (
ID int NOT NULL PRIMARY KEY,
ParentID int NOT NULL FOREIGN KEY REFERENCES ParentTable(ID) ON DELETE CASCADE,
Description varchar(50)
)
INSERT ParentTable VALUES ( 1, 'Bob');
INSERT ParentTable VALUES ( 2, 'Tim');
INSERT ChildTable VALUES ( 1, 1, 'Bob''s Description');
INSERT ChildTable VALUES ( 2, 2, 'Tim''s Description');
示例:
SELECT * FROM ParentTable PT INNER JOIN ChildTable CT on CT.ParentID = PT.ID;
-- This will fail
INSERT ChildTable VALUES (3, 3, 'Judy''s Description');
-- It will succeed after inserting the Parent Record
INSERT ParentTable VALUES ( 3, 'Judy');
INSERT ChildTable VALUES (3, 3, 'Judy''s Description');
SELECT * FROM ParentTable PT INNER JOIN ChildTable CT on CT.ParentID = PT.ID;
-- Deleting the parent record will "cascade" the delete to the child table
DELETE ParentTable WHERE ID = 1;
SELECT * FROM ParentTable PT INNER JOIN ChildTable CT on CT.ParentID = PT.ID;
外键约束将强制执行您所需的引用完整性。级联删除将允许用户删除父级,并将自动删除任何引用子级。如果没有级联删除,任何删除父级的尝试都将失败,如果父级被任何子级引用。