如何解决我有两列,我希望第二列具有与第一列相同的值
在PostgreSQL中,我有两列,我希望第二列始终具有与第一列相同的值。
这些列是landmark_id
(整数)和name
(varchar),我希望name
列始终具有与landmark_id
相同的值(id)。 / p>
landmark_id (integer) | name (varchar)
1 1
2 2
3 3
解决方法
我不明白您为什么要这样做,但是我可以想到两种方法来完成您的请求。一种是通过使用生成的列
private void yesAction() {
try {
String text = Files.readString(Paths.get("src\\main\\database\\default.db"));
System.out.println(text);
Files.writeString(Paths.get("src\\main\\database\\main.db"),text,Charset.defaultCharset());
} catch (IOException e) {
e.printStackTrace();
}
}
另一个是通过实施约束
CREATE TABLE g (
landmark_id int,name varchar(100) GENERATED ALWAYS AS (landmark_id::varchar) STORED
)
这两种方法都会导致CREATE TABLE c (
landmark_id int,name varchar(100),CONSTRAINT equality_cc CHECK (landmark_id = name::varchar)
)
列占用磁盘空间。第一种方法不允许您在name
或name
语句中指定INSERT
列。在后一种情况下,插入时将被迫同时指定两列。
您还可以使用触发器来更新第二列。
最新编辑:建议使用其他视图。我同意这是一个比我写的更好的主意。
,按照@jarlh在评论中的建议创建一个view
。系统会自动为您自动生成name
列。通常,与在实际表中多次存储基本上相同的数据相比,这通常是更可取的,在实际表中,数据占用更多的磁盘空间,并且也可能不同步。例如:
CREATE VIEW landmarks_names AS
SELECT landmark_id,landmark_id::text AS name
FROM landmarks;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。