【发布时间】:2012-06-05 04:25:42
【问题描述】:
我在 MSSQL Management Studio 上连接两个表时遇到问题。 我的目标是通过外键连接表,如果我删除用户,我希望第二个表条目将被自动删除。我打算为此使用 DELETE Cascade 方法。
User:
CREATE TABLE [dbo].[Users](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Email] [nvarchar](89) NOT NULL,
[Name] [nvarchar](25) NOT NULL,
[Midname] [nvarchar](25) NOT NULL,
[Surname] [nvarchar](25) NOT NULL,
[Phone] [varchar](15) NOT NULL,
[Country] [smallint] NOT NULL,
[Manager] [nvarchar](89) NOT NULL,
[Referrer] [nvarchar](89) NOT NULL,
[Rank] [tinyint] NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
[Email] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
电子邮件是主键
Payments:
CREATE TABLE [dbo].[Investments](
[ID] [bigint] NOT NULL,
[Investor] [nvarchar](89) NOT NULL,
[Sum] [decimal](19, 4) NOT NULL,
[Currency] [smallint] NOT NULL,
[Credit] [decimal](19, 4) NOT NULL,
[CreditRate] [decimal](19, 4) NOT NULL,
[Rate] [tinyint] IDENTITY(1,1) NOT NULL,
[Date] [smalldatetime] NOT NULL,
[Comment] [nvarchar](max) NOT NULL,
CONSTRAINT [PK_Investments] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ID 是主键
我的 FK 应该是 USER->PAYMENTS 还是 PAYMENTS->USER?
当我尝试连接用户 -> 通过电子邮件使用外键付款 -> 投资者时,它告诉我这样的错误:
“Payments”表中的列与现有主键或 UNIQUE 约束不匹配。
你能解释一下问题出在哪里吗?而我做错了什么?
【问题讨论】:
-
你在第二张表中设置了电子邮件,就像外国一样?在此处添加声明。
-
1) 为表格发布 DDL。 2) 使用电子邮件地址作为主键是一个非常糟糕的主意。
-
你标记了你的问题 [sql] 但是哪个? Oracle、MS SQL Server、MySQL...也,发布报告错误的查询,这将帮助人们解决您的问题。
标签: sql sql-server