表1id name
表2 id1 id2 otherfields我想让表1的id作为主键表
表2的两个字段id1和id2作为从键,可是这样的关系是无法建立的,如何处理?
就是说id1和id2这两个字段都要以表1的id作为主键并且表1做删除操作时,只要id1或id2有1个的值在表1中被删除,表2的这条记录也跟着级联删除
表2 id1 id2 otherfields我想让表1的id作为主键表
表2的两个字段id1和id2作为从键,可是这样的关系是无法建立的,如何处理?
就是说id1和id2这两个字段都要以表1的id作为主键并且表1做删除操作时,只要id1或id2有1个的值在表1中被删除,表2的这条记录也跟着级联删除
insert a001 select 1,'a'
insert a001 select 2,'b'
CREATE TABLE A002(ID INT REFERENCES A001(ID)ON DELETE CASCADE ON UPDATE CASCADE,AGE TINYINT)
insert a002 select 1,10
insert a002 select 1,20delete from a001 where id=1select * from a001
/*
ID NAME
----------- --------------------
2 b(1 行受影响)
*/select * from a002
/*
ID AGE
----------- ----(0 行受影响)
*/
drop table a001,a002
CREATE TABLE A004(ID INT PRIMARY KEY,NAME VARCHAR(20)) CREATE TABLE A003(ID1 INT REFERENCES A004(ID) ON DELETE CASCADE ON UPDATE CASCADE,ID2 INT REFERENCES A004(ID) ON DELETE CASCADE ON UPDATE CASCADE,AGE TINYINT)我要的如上的语句,然而执行,出错服务器: 消息 1785,级别 16,状态 1,行 3
将 FOREIGN KEY 约束 'FK__A003__ID2__6C190EBB' 引入表 'A003' 中将导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其它 FOREIGN KEY 约束。
服务器: 消息 1750,级别 16,状态 1,行 3
未能创建约束。请参阅前面的错误信息。
id1和id2都定义成id的外键
CREATE TABLE A004(ID INT PRIMARY KEY,NAME VARCHAR(20)) CREATE TABLE A003(ID1 INT REFERENCES A004(ID) ON DELETE CASCADE ON UPDATE CASCADE,ID2 INT REFERENCES A004(ID),AGE TINYINT) 这样就可以了。
CREATE TABLE A001(ID INT PRIMARY KEY,NAME NVARCHAR(20)) CREATE TABLE A002(ID1 INT REFERENCES A001(ID)ON DELETE CASCADE ON UPDATE CASCADE,ID2 INT
,AGE TINYINT PRIMARY KEY(ID1,ID2))表2 要有主键的啊
这样的话,id2是不能够级联删除的啊.
1.我的表一定要这样设计吗?
2.insert时,表2的id1,id2是怎么处理的?
3.update时,主从字段是怎么处理的?用的是外键还是触发器?(应该没用外键)
4.delete时,用什么方案?最好和update用同一方案。