【postgresql 基础入门】数据表的创建,永久数据放普通表,中间结果放临时表,附带信用卡业务案例SQL设计

这篇具有很好参考价值的文章主要介绍了【postgresql 基础入门】数据表的创建,永久数据放普通表,中间结果放临时表,附带信用卡业务案例SQL设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创建表

专栏内容

  • postgresql内核源码分析
  • 手写数据库toadb
  • 并发编程

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

系列文章

  • 入门准备
  • postgrersql基础架构
  • 快速使用
  • 初始化集群
  • 数据库服务管理
  • psql客户端使用
  • pgAdmin图形化客户端
  • 数据库的使用
  • 创建数据库
  • 数据库操作
  • 表的使用
  • 表的创建
  • 表的操作

前言

postgresql 数据库是一款通用的关系型数据,在开源数据库中能与商业数据媲美,在业界也越来越流行。

因为是开源数据库,不仅公开源码,还有很多使用案例,好用的插件,所以它的慢慢变成了数据库的先驱和标准,通过postgresql可以很好从使用到原理,彻底搞懂;

如果是学习编程,也可以学到丰富的编程知识,数据结构,编程技巧,它里面还有很多精妙的架构设计,分层思想,可以灵活定制的思想。

本专栏主要介绍postgresql 入门使用,数据库维护管理,通过这些使用来了解数据库原理,慢慢了解postgresql是什么样的数据库,能做那些事情,以及如何做好服务,最关键的是这些知识都是面试的必备项。

概述

使用数据库最常用的操作就是创建表,增删改查数据,表作为真正的数据载体的逻辑单元,联系着数据库的各个模块;

表的定义要符合完整性的要求,完整性包括:实体完整性,数据唯一性;域完整性,各字段取值合法有效;参照完整性,表与表之间的关联约束;用户自定义完整性,根据业务需求,额外定义的一些约束条件;

下面我们一起来看看如何创建一张符合我们业务需求的表;

  • 创建表的 SQL 语法
  • 定义字段和数据类型
  • 设置主键和外键
  • 创建索引

创建表的语法

在postgresql中,表有两种存储方式,
一种就是常见的普通表,会存储在对应的database目录下,在database内是共享的,也就是说只要有权限都可以访问;
还有一种时临时表,临时表会在会话结束或者事务结束时被自动删除,也就是临时使用一下,它只能在当前会话中使用,其它会话是看不到它的存在;

创建普通表

基本语法就是 CREATE TABLE 表名(类型 列名,...); 其中表名,类型,列名是可以替换的,类型是数据库中已经预定义好的;名称最好不要超过64字符;

CREATE TABLE COMPANY (  
    ID INT PRIMARY KEY NOT NULL,  
    NAME TEXT NOT NULL,  
    AGE INT NOT NULL,  
    ADDRESS CHAR(50),  
    SALARY REAL  
);

如果要指定schema,那么表名需要写成 schema名称.表名 的形式,这样就会创建到指定的schema下面;

创建临时表

临时表创建时,要使用关键字temp,此时创建表在另一个客户端登录时,是看不到的;当前客户端退出后,也会自动删除。

create temp table result(id int, slary real);

临时表主要用于一些中间结果的存储,比如需要多表联合后计算一些数据,可以先把查询结果放到临时表,这些可以慢慢计算;

字段定义和数据类型

支持的数据类型

以下是postgresql支持的常见的类型列表:

名称 别名 描述
bigint int8 有符号的8字节整数
bigserial serial8 自动增长的8字节整数
bit [ (n) ] 定长位串
bit varying [ (n) ] varbit [ (n) ] 变长位串
boolean bool 逻辑布尔值(真/假)
box 平面上的普通方框
bytea 二进制数据(“字节数组”)
character [ (n) ] char [ (n) ] 定长字符串
character varying [ (n) ] varchar [ (n) ] 变长字符串
cidr IPv4或IPv6网络地址
circle 平面上的圆
date 日历日期(年、月、日)
double precision float8 双精度浮点数(8字节)
inet IPv4或IPv6主机地址
integer int, int4 有符号4字节整数
interval [ fields ] [ § ] 时间段
json 文本 JSON 数据
jsonb 二进制 JSON 数据,已分解
line 平面上的无限长的线
lseg 平面上的线段
macaddr MAC(Media Access Control)地址
macaddr8 MAC(Media Access Control)地址(EUI-64格式)
money 货币数量
numeric [ (p, s) ] decimal [ (p, s) ] 可选择精度的精确数字
path 平面上的几何路径
pg_lsn PostgreSQL日志序列号
pg_snapshot 用户级事务ID快照
point 平面上的几何点
polygon 平面上的封闭几何路径
real float4 单精度浮点数(4字节)
smallint int2 有符号2字节整数
smallserial serial2 自动增长的2字节整数
serial serial4 自动增长的4字节整数
text 变长字符串
time [ § ] [ without time zone ] 一天中的时间(无时区)
time [ § ] with time zone timetz 一天中的时间,包括时区
timestamp [ § ] [ without time zone ] 日期和时间(无时区)
timestamp [ § ] with time zone timestamptz 日期和时间,包括时区

支持的格式非常丰富,有数字,时间,MAC,还有json格式,甚至还有几个路径,这里只是列了一部分,更详细的参加官方手册;

字段的定义

这里需要注意,一个表的列最大不超过1600列,实际上,由于字段数据长度限制,有效的限制通常更低;

主键和外键设置

通常表中会增加主键和外键,达到实体完整性和参照完整性约束;

主键

主键是表中行的唯一标识的候选关键字,一个表只有一个主关键字,也称为主键。

主键可以由一个字段或者多个字段组成,分别称为单字段主键或多字段主键。主键的值用于唯一地标识表中的某一条记录,在两个表的关系中,主关键字用来在一个表中引用来自于另一个表中的特定记录。

主关键字是可选的,并且可在CREATE TABLE或ALTER TABLE语句中定义。

如果在创建表时没有加主键,可以修改表定义的方式添加;一般在批量加载数据时,先不指定主键,加载完成后再指定主键,会提升加载的性能;

要使用ALTER TABLE语句添加主键,可以使用以下语法:

ALTER TABLE table_name
ADD PRIMARY KEY (column_name);

其中,table_name是要添加主键的表名,column_name是要指定为主键的列名。

请注意,添加主键之前,确保表中没有重复的值存在于该列中。如果存在重复值,将无法添加主键。

示例:
假设有一个名为users的表,其中有一个名为id的列,您想将其指定为主键。可以使用以下语句:

ALTER TABLE users
ADD PRIMARY KEY (id);

这将使id列成为users表的主键。

外键

外键是指一个表中的一个或多个字段,它们的值与另一个表中的字段值相对应,用来表示两个表之间的联系。

需要注意的是,一个表的外键,在引用表中一定是主键,这样对应关系是明确的;

外键的创建也同样可以CREATE TABLE或ALTER TABLE语句中定义;

要使用ALTER TABLE语句添加外键,可以使用以下语法:

示例:
假设有两个表:学生表(students)和课程表(courses)。学生表中有一个学生ID字段(student_id),课程表中有一个课程ID字段(course_id)。如果要记录每个学生所选的课程,可以在学生表中添加一个外键,指向课程表中的课程ID字段。可以使用以下语句:

ALTER TABLE students
ADD FOREIGN KEY (student_id) REFERENCES courses(course_id);

这将使学生表中的student_id列成为外键,指向课程表中的course_id列。

创建索引

索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。它是针对表而建立的,由数据页面以外的索引页面组成,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。索引数据一般非常小,可以快速加载到内存进行查找,再根据查找到的索引项找到数据表的数据项;

创建索引的语句示例:

CREATE INDEX index_name ON table_name (column_name);

语句中,index_name 是索引的名称,table_name 是表的名称,column_name 是要创建索引的列的名称。可以根据需要指定多个列,以创建复合索引。

索引创建时,默认创建的索引算法为btree,当然还有基于hash的索引,gin索引,gist索引等;这些在之后会介绍到;

选择经常用于查询条件的列作为索引列,这样索引才能被有效利用。如果查询条件中不包含索引列,那么索引将不会被使用。

案例演示

设计银行信用卡中心的数据库需要考虑以下几个方面:

  • 客户信息:包括客户的姓名、身份证号码、联系方式等。
  • 交易信息:包括交易时间、交易金额、交易类型等。
  • 账户信息:包括账户号码、账户余额、账户状态等。
  • 风险信息:包括信用评分、逾期次数、欠款金额等。

以下是一些银行信用卡中心的数据库设计示例和相应的SQL语句:

创建客户表:

CREATE TABLE customers (
  customer_id INT PRIMARY KEY,
  name VARCHAR(50),
  address VARCHAR(100),
  phone_number VARCHAR(20),
  email VARCHAR(50)
);

创建交易表:

CREATE TABLE transactions (
  transaction_id INT PRIMARY KEY,
  customer_id INT,
  transaction_date DATE,
  transaction_amount DECIMAL(10,2),
  transaction_type VARCHAR(20),
  FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

创建账户表:

CREATE TABLE accounts (
  account_number INT PRIMARY KEY,
  customer_id INT,
  account_balance DECIMAL(10,2),
  account_status VARCHAR(20),
  FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

创建风险信息表:

CREATE TABLE risk_info (
  customer_id INT PRIMARY KEY,
  credit_score INT,
  delinquency_count INT,
  arrears_amount DECIMAL(10,2),
  FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

查询客户的交易记录:

SELECT customers.name, transactions.transaction_date, transactions.transaction_amount, transactions.transaction_type
FROM customers
JOIN transactions ON customers.customer_id = transactions.customer_id;

查询客户的账户信息:

SELECT customers.name, accounts.account_number, accounts.account_balance, accounts.account_status
FROM customers
JOIN accounts ON customers.customer_id = accounts.customer_id;

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!文章来源地址https://www.toymoban.com/news/detail-724719.html

到了这里,关于【postgresql 基础入门】数据表的创建,永久数据放普通表,中间结果放临时表,附带信用卡业务案例SQL设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django基础入门⑪:DjangoDjango数据表关联(一对一,一对多,多对多关系)

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 Django数据表关

    2024年02月12日
    浏览(32)
  • 数据库实验2 创建数据表修改数据表和删除数据表

    实验2 创建数据表修改数据表和删除数据表 实验类型: ●验证性实验  ○综合性实验  ○设计性实验 实验目的:      (1)了解数据表的结构特点。      (2)掌握表中列定义时所用到的各种数据类型。      (3)学会使用企业管理器(即MSSMS-----Microsoft SQL Server Manag

    2024年02月07日
    浏览(52)
  • 实现一个MYSQL工具类,包含判断创建数据表是否存在,创建数据表

    可以使用Python的MySQLdb模块来实现一个MYSQL工具类。下面是一个简单的实现示例: 使用示例: 在上面的示例中,我们首先创建了一个MySQLTool类,并在初始化方法中传入了数据库的连接信息。然后使用connect方法连接到数据库。 table_exists方法用于判断给定的数据表是否存在,它执

    2024年01月15日
    浏览(39)
  • 大数据StarRocks(七):数据表创建

    1.1 Row Column 一张表包括行(Row)和列(Column)。Row 即用户的一行数据。Column 用于描述一行数据中不同的字段。 ⚫ 在默认的数据模型中,Column 只分为排序列和非排序列。存储引擎会按照排序列对数据进行排序存储,并建立稀疏索引,以便在排序数据上进行快速查找。 ⚫ 而在

    2024年01月16日
    浏览(39)
  • 【MySQL】MySQL 数据类型,数值、日期和时间、字符串类型,创建数据表,删除数据表

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL 支持多种类型,大致可以分为三类:数值、日

    2024年02月15日
    浏览(47)
  • MySQL创建数据库和数据表

    文章目录 前言 一、MySQL数据库是什么? 二、使用步骤 1.显示当前数据库 2.创建数据库          3.使用数据库          4.删除数据库          5.表的操作     5.1 显示数据库中的表     5.2 创建表     5.3 删除表          6.总结 MySQL数据库的创建操作 是一个客户

    2023年04月08日
    浏览(37)
  • MySQL(1) MySQL创建数据库和创建数据表

    创建数据库 1. 连接 MySQL      mysql -u root -p  2. 查看当前的数据库  show databases; 3. 创建数据库  create database 数据库名; 创建数据库 4. 创建数据库时设置字符编码  create database 数据库名 character set utf8;  5. 查看和显示数据库的编码方式  show create database 数据库名; 显示数据库的

    2024年02月14日
    浏览(52)
  • 开心档之MySQL 创建数据表

    创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: 以下例子中我们将在 RUNOOB 数据库中创建数据表kxdang_tbl: 实例解析: 如果你不想字段为  NULL  可以设置字段的属性为  NOT NULL  , 在操作数据库时如果输入该字段的数

    2024年02月02日
    浏览(39)
  • MySQL:创建数据库,数据表,主键和外键

    目录 前言: 安装MySQL: 打开MySQL: 创建数据库: 查看已建数据库: 查看数据库引擎: 创建数据表:  主键约束: 单字段主键: 多字段联合主键: 外键约束: MySQL数据库安装了很久,一直也没静下心来学习,因为起步太晚,所以什么都想学点,又感觉有些力不从心,目前

    2023年04月27日
    浏览(41)
  • SpringBoot工程启动时自动创建数据库、数据表

    针对Java工程启动时自动创建数据库、数据表的需求 对 java、springmvc工程,我们需要自己动手去实现创建数据表、表数据,具体请移步参阅:JAVA工程启动时自动创建数据库、数据表 下面我们来探讨在Springboot下怎么去实现 我们知道,springboot工程配置数据源一般采用yaml或prope

    2024年02月02日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包