sql - 无法创建约束和外键引用无效表
问题描述
我想在我的数据库中创建这两个表:
CREATE TABLE Person
(
PID INT NOT NULL,
CID INT NOT NULL,
FName VARCHAR(35) NOT NULL,
LName VARCHAR(35) NOT NULL,
Gender CHAR(1) NOT NULL,
DOB DATE NOT NULL
);
ALTER TABLE Person
ADD CONSTRAINT PK_Person PRIMARY KEY (PID);
ALTER TABLE Person
ADD CONSTRAINT FK_Country FOREIGN KEY (CID) REFERENCES Country(CID);
ALTER TABLE Person
ADD CONSTRAINT CHK_NOTEMPTYNAME CHECK ( Fname <> '' AND LName <> '' );
ALTER TABLE Person
ADD CONSTRAINT CHK_GENDER CHECK (Gender in ('M', 'F','O'));
CREATE TABLE Country
(
CID INT NOT NULL,
CName VARCHAR(56),
);
ALTER TABLE Country
ADD CONSTRAINT PK_Country PRIMARY KEY (CID);
ALTER TABLE Country
ADD CONSTRAINT CHK_NOTEMPTYCOYNTRY CHECK (CName <> '');
当我实现这两个表时,我得到两个错误:
消息 1767,级别 16,状态 0,第 11 行
外键“FK_Country”引用无效表“国家/地区”。消息 1750,级别 16,状态 1,第 11 行
无法创建约束或索引。请参阅以前的错误。
我该如何处理这些错误?
解决方案
必须首先创建该表Country
,因为它是您的主表,包括将用作其他表的外键的主键。
首先,确保您尚未创建表,如果已创建,请先删除,如果表中没有数据。您可以“刷新”表格部分并检查表格是否存在。或者您可以简单地执行以下操作:
IF OBJECT_ID('tablename', 'U') IS NOT NULL
DROP TABLE tablename;
确保您要创建的表不存在后,创建应该包含稍后将用作另一个表中的外键的键的表,以便首先提供关系。这是COUNTRY
为了你的问题。
Create table Country (...) ...
在您确定 Country 表是使用主键约束创建后,您可以创建其他表P
并使用其主键作为外键使其与您的 Country 表相关。
推荐阅读
- google-chrome - 谷歌浏览器不会在控制台中显示错误
- javascript - 如何添加和删除具有选定选项值的类
- django - DJANGO oauth2 grant_type client_credentials
- spotify - 无法从客户端凭证流中搜索轨道使用 access_token
- powershell - 需要使用 PowerShell 从以下代码中的文本文件中读取数组内容
- amazon-web-services - AWS:使用 Route 53 和 S3 存储桶将 www 重定向到 root
- wordpress - 使用 post_excerpt 查询帖子是否存在
- c# - 如何在 c#.net 中的 datagrid 上创建一个事件处理程序,该处理程序可以在单击该网格上的任何数据项时打开不同的页面
- angular - Angular 5中日期时间选择器中的回调方法
- unity3d - Unity:让主线程等到数据加载或时间过去