PostgreSQL主键、外键、序列

1.创建数据库

    创建名称为StudentInfo的数据库。

    注:1.CREATE DATABASE不一定非要大写,用create database也可以成功创建数据库。

           2.双引号保持了StudentInfo的大小写。可以不加双引号,此时创建的数据库名称为studentinfo。

CREATE DATABASE "StudentInfo";

2.切换数据库   

    在PostgreSQL中,用命令“ \c 数据库名”,可以切换数据库。

 \c "StudentInfo"

3.创建表

   创建学生表和课程表,注意设置主键、自增,外键等。

    注:1. primary key指明了表的主键。

           2. SERIAL指明自增。

           3. references 表名(列名)指明了外键。

CREATE TABLE "Student" (
  "ID" SERIAL primary key,
  "Name" varchar(50),
  "CourseID" int references "Course"("ID")
);


CREATE TABLE "Course" (
  "ID" SERIAL primary key,
  "Name" varchar(50)
);

    在Student表中,主键是ID,且ID自增(默认情况下,初始值为1,增加幅度为1),外键是CourseID。外键保证了在插入学生信息时,课程是在Course存在的(即学生不能学习一门不存在的课程),否则插入信息会失败。

4.查看数据库中的表

    命令“\d” 列出当前数据库中所有的表。

 \d

    结果如下:

 

5.查看表的定义

    命令“\d 表名” 显示表的定义。

\d "Student"

    结果如下:

6.查看序列

  Student表中,由于设置了ID自增,所以生成了Student_ID_seq,现在我们查看一下Student_ID_seq的内容。

 \d "Student_ID_seq"

结果如下:

  

 如上图所示,初始值为1,增量为1,最小值为1,最大值为9223372036854775807。

PostgreSQL中,如果你想要给现有的字段添加时间序列,通常是为了记录该字段的修改历史或者时间戳信息。你可以通过创建一个扩展字段(如timestamp或timestamptz类型),并将其关联到原始字段上。这通常涉及两种方式: 1. **使用Trigger**: 可以创建一个触发器(trigger),每当对原始字段进行更新时,自动插入新的时间序列值。例如,可以创建一个BEFORE UPDATE或AFTER UPDATE trigger。 ```sql CREATE OR REPLACE FUNCTION update_timestamp() RETURNS TRIGGER AS $$ BEGIN NEW.timestamp_column := NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trig_update_timestamp BEFORE UPDATE ON your_table_name FOR EACH ROW EXECUTE FUNCTION update_timestamp(); ``` 这里的`your_table_name`是你要操作的名,`timestamp_column`是你新加的时间序列字段名。 2. **和视图**: 如果你希望维护每个条目的修改历史,可以考虑创建一个新的,包含原始主键以及额的时间戳字段,并将原始作为参照()。然后通过视图展示原始数据加上时间戳。 ```sql CREATE TABLE history ( id SERIAL PRIMARY KEY, original_id INTEGER REFERENCES your_table_name(id), timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ...其他需要的历史记录字段... ); CREATE VIEW your_table_view AS SELECT * FROM your_table_name UNION ALL SELECT h.*, y.* FROM history h JOIN your_table_name y ON h.original_id = y.id; ``` 记住,每次更改都会导致新的历史记录生成,可能会加存储开销。在设计这样的架构时,需要权衡性能和历史跟踪的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值