sql - 我们可以更新定义为在不同表中定义的唯一记录的外键的记录吗?
问题描述
我是 PostgreSQL 的新手,我如何更新与外键定义相关的记录。我遇到了一个错误,如果您能提供任何提示指导我,那就太好了假设我们有两个不同的表格,如下所示:
CREATE TABLE IF NOT EXISTS student
(
id_num VARCHAR(40) NOT NULL REFERENCES registered(student_id),
first_name VARCHAR(32) NOT NULL,
last_name VARCHAR(32) NOT NULL,
birthdate DATE NOT NULL,
PRIMARY KEY(id_num)
);
CREATE TABLE IF NOT EXISTS registered
(
student_id VARCHAR(40) NOT NULL UNIQUE,
paid_tuition BOOL NOT NULL,
PRIMARY KEY(paid_tuition)
);
根据我的理解,我需要填写注册表,然后尝试将值插入到学生表中,使其 id 与注册表中的 student_id 值匹配。但是当我尝试它时,我得到以下错误?
有什么想法或建议吗?
消息:“更新或删除表“注册”违反了表“学生”上的外键约束“student_id_num_id_fkey”,详细信息:“键(id_num)=(idNum-1)仍然从表“学生”中引用。”,提示:"", Position:0, InternalPosition:0, InternalQuery:"", Where:"", SchemaName:"", TableName:"student", ColumnName:"", DataTypeName:"", ConstraintName:"student_id_num_id_fkey", File :“ri_triggers.c”,行:2490,例程:“ri_ReportViolation”}
解决方案
似乎您正在以相反的方向链接表格,对我来说,“注册”表格已通过 fk studentid 链接到学生表格更有意义。同样在您的“学生”表定义中,您说“id”列是主键,而没有声明“id”列。
所以这就是我的意思:
CREATE TABLE IF NOT EXISTS student
(
id_num VARCHAR(40) NOT NULL REFERENCES registered(student_id),
first_name VARCHAR(32) NOT NULL,
last_name VARCHAR(32) NOT NULL,
birthdate DATE NOT NULL,
PRIMARY KEY(id_num)
);
CREATE TABLE IF NOT EXISTS registered
(
student_id VARCHAR(40) NOT NULL REFERENCES student(id_num)
paid_tuition BOOL NOT NULL,
PRIMARY KEY(id_num)
);
推荐阅读
- python - 如何替换已弃用的 imp.load_dynamic 的用法?
- r - 在R中的多列中分离一列
- python - 在没有 Conda 环境的情况下部署 MLflow 模型
- r - 仅显示用户选择的那些 x 值
- ruby-on-rails - 查询连接表?
- pandas - 从熊猫数据框中的列标题中删除双引号
- ios - 同一视图模型中有两种不同的模型类型?斯威夫特 - Xcode?
- phabricator - 如何授予用户在 Phabricator 中创建 webhook 的权限?
- java - 有没有办法在不同网络上通过双向连接连接两台计算机(一台具有端口转发)
- android - 尝试访问摄像头时,Android 应用程序在阻止访问摄像头的 Enterprise MDM 设备上崩溃