一个表不能有两个字段同时外键关联另外同一个表?
CREATE TABLE [dbo].[T_Follow] (
[FollowerID] [nvarchar](128) NOT NULL,
[LeaderID] [nvarchar](128) NOT NULL,
[FollowDate] [datetime] NOT NULL,
CONSTRAINT [PK_dbo.T_Follow] PRIMARY KEY ([FollowerID], [LeaderID])
)
CREATE INDEX [IX_FollowerID] ON [dbo].[T_Follow]([FollowerID])
CREATE INDEX [IX_LeaderID] ON [dbo].[T_Follow]([LeaderID])
ALTER TABLE [dbo].[T_Follow] ADD CONSTRAINT [FK_dbo.T_Follow_dbo.T_User_FollowerID] FOREIGN KEY ([FollowerID]) REFERENCES [dbo].[T_User] ([UserID]) ON DELETE CASCADE
ALTER TABLE [dbo].[T_Follow] ADD CONSTRAINT [FK_dbo.T_Follow_dbo.T_User_LeaderID] FOREIGN KEY ([LeaderID]) REFERENCES [dbo].[T_User] ([UserID]) ON DELETE CASCADE
如上脚本,SQL SERVER会有如下错误提示:
消息 1785,级别 16,状态 0,第 10 行
将 FOREIGN KEY 约束 'FK_dbo.T_Follow_dbo.T_User_LeaderID' 引入表 'T_Follow' 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
消息 1750,级别 16,状态 0,第 10 行
无法创建约束。请参阅前面的错误消息。
我在Oracle中测试同样场景,没有问题:
-- Create table
create table TA
(
id varchar2(40) not null,
name varchar2(40)
)
;
-- Create/Recreate primary, unique and foreign key constraints
alter table TA
add constraint PK_TA_ID primary key (ID);
----------
-- Create table
create table TB
(
f_aid varchar2(40),
l_aid varchar2(40)
)
;
-- Create/Recreate primary, unique and foreign key constraints
alter table TB
add constraint FK_F_AID foreign key (F_AID)
references ta (ID) on delete cascade;
alter table TB
add constraint FK_L_AID foreign key (L_AID)
references ta (ID) on delete cascade;
相关推荐
Sql Server中一个表2个字段关联同一个表(代码解决)
Sql Server中一个表2个字段关联同一个表(代码解决),需要的朋友可以参考一下
oracle建表练习(主键外键)
简单的建表联系,包括主键外键,帮助新手快速熟悉建表的语句操作
MYSQL 数据库给表加外键约束条件 (史上最详细教程)
下面是已经创建好的两个数据表!(还未加外键约束) 1. mysql> show columns from message;//信息表 +-----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+----------------+ | m_id | int(11)
oracle表主键和外键的区别
主键和外键的区别 主键是定义一个表中起主要作用的数据项,这些数据项的数据在表中是唯一的,同时系统按主键为表建立索引。 外键是定义一个表中的某数据项的数据,要参照另一个表的主键数据。既没有在另一个表的主键数据中出现的数据,不允许在这个表的外键数据项中出现。
SQL语句:给表添加外键的四种方式
1. 创建表的同时添加外键 create table score( score int(3), st_id int(16), cs_id int(16), primary key(st_id,cs_id), FOREIGN KEY (st_id) REFERENCES student(id), FOREIGN KEY (cs_id) REFERENCES classes(id) ); 2. 已经创建表了怎么办:在表的定义外进行添加 alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字


疑难问题
