首页 > 数据库 >PostgreSQL数据库基本使用

PostgreSQL数据库基本使用

时间:2023-08-08 18:38:10浏览次数:38  
标签:基本 CITY PostgreSQL NAME -- 数据库 ALTER TABLE ID

1.简介

PGSQL是一个功能非常强大同时是开源的对象关系型数据库.经过二十几年的发展,PostgreSQL 是目前世界上可以获得的最先进的开放源码数据库系统。

2.基本语法

表是关系型数据库存储结构化数据的基本结构,可以使用CREATE TABLE

创建所需要的结构,其语法:

CREATE TABLE IF NOT EXISTS CITY(
	CITY_ID	INT NOT NULL,
  CITY_NAME VARCHAR(50),
  CJJLSJ DATE
);
-- 添加表注释
COMMENT ON TABLE CITY IS '城市数据表';

-- 添加字段注释
COMMENT ON COLUMN CITY.CITY_ID IS '城市ID';

列是被称为表中的字段,其代表一条数据的一个属性;

增加列:

ALTER TABLE CITY ADD COLUMN ZHGXSJ DATE;

删除列:

ALTER TABLE CITY DROP COLUMN ZHGXSJ;

修改类型:

ALTER TABLE CITY ALTER COLUMN ZHGXSJ TIMESTAMP;

列重命名:

ALTER TABLE CITY RENAME ZHGXSJ TO DT_ZHGXSJ;

表重命名:

ALTER TABLE CITY RENAME TO CITY_1;

增加主键:

ALTER TABLE CITY ADD PRIMARY KEY(CITY_ID);

3.序列

在业务上我们有时需要设置自增主键,MYSQL通过使用AUTO_INCREMENT实现ID自增,PGSQL并不支持这个方法但是有之对应的序列可以实现此功能.

创建序列:

CREATE SEQUENCE city_seq
START WITH 1 	 -- 步长为1
INCREMENT BY 1 -- 每次增加1
MINVALUE 1 		 -- 最小值为1
MAXVALUE 99		 -- 最大值为99

设置序列:

SELECT SETVAL('city_seq', 1)

删除序列:

DROP SEQUENCE city_seq;
3.1使用序列两种方法

创建表时不指定序列:

CREATE TABLE IF NOT EXISTS CITY(
	CITY_ID	INT NULL,
  CITY_NAME VARCHAR(30) NULL
);

INSERT INTO CITY VALUES(NEXTVAL('city_seq'), '杭州');
INSERT INTO CITY VALUES(NEXTVAL('city_seq'), '嵊州');
INSERT INTO CITY VALUES(NEXTVAL('city_seq'), '湖州');

创建表时指定序列:

CREATE TABLE IF NOT EXISTS CITY(
	CITY_ID	INT DEFAULT NEXTVAL('city_seq') NOT NULL,
  CITY_NAME VARCHAR(30) NULL
);

INSERT INTO CITY(CITY_NAME) VALUES('杭州');
INSERT INTO CITY(CITY_NAME) VALUES('嵊州');
INSERT INTO CITY(CITY_NAME) VALUES('湖州');
3.2使用序列清洗数据

场景:  创建表结构时没有指定唯一主键字段,录入数据的时候重复录入造成数据不唯一,需要对重复的数据进行清洗,同时设置主键.

解决思路: 1.在原表中新增一列,2.将新增列设置自增序列.3.进行清洗逻辑如删除同一条数据最大的ID.4.将新增的列删除.5.设置主键.

-- 创建表
CREATE TABLE IF NOT EXISTS CITY(
 CITY_ID INT NULL,
 CITY_NAME VARCHAR(30)
);

-- 添加数据
INSERT INTO CITY VALUES(NULL , '杭州'),
INSERT INTO CITY VALUES(NULL , '杭州'),
INSERT INTO CITY VALUES(NULL , '嵊州'),
INSERT INTO CITY VALUES(NULL , '湖州'),

-- 查询数据
SELECT * FROM CITY;--发现没有设置主键,杭州录入两次,需要对杭州数据进行清洗.

-- 新增一列
ALTER TABLE CITY ADD COLUMN TEMP_ID INT;

--创建序列
CREATE SEQUENCE city_seq
START WITH 1
INCREAMENT BY 1
MINVALUE 1
MAXVALUE 1;

--将新增列设置使用序列
ALTER TABLE CITY LATER COLUMN TEMP_ID SET DEFAULT NEXTVAL('city_seq');

-- 创建存储过程将已有数据添加自增ID
CREATE OR REPLACE FUNCTION ADD_ID() RETURNS INTEGER AS $$
DECLARE
r RECORD;
sql "varchar";
	BEGIN
        sql := 'select CITY_ID, CITY_NAME from CITY';
        FOR r IN EXECUTE sql LOOP
            UPDATE CITY SET TEMP_ID = NEXTVAL('city_seq') WHERE CITY_NAME = r.CITY_NAME;
	END LOOP;
    RETURN NEXTVAL('city_seq');
 END;
$$ LANGUAGE plpgsql;

-- 调用函数
select * FROM ADD_ID();

-- 查询数据
SELECT * FROM CITY;

--对数据进行清洗
DELETE FROM CITY WHERE TEMP_ID IN (
SELECT
	A1.MAXID
FROM
	(
      SELECT MIX(TEMP_ID) AS MAXID,CITY_NAME FROM CITY GROUP BY CITY_NAME HAVING COUNT(1) >= 2
    ) A1
);

-- 将CITY_ID字段删除,同时将TEMP_ID修改为CITY_ID同时设置为主键
-- 删除字段
ALTER TABLE CITY DROP COLUMN CITY_ID;
-- 修改名称
ALTER TABLE CITY RENAME TEMP_ID TO CITY_ID;
-- 设置主键
ALTER TABLE CITY ADD PRIMARY KEY(CITY_ID);


4.总结

以上是个人使用PGSQL的一些总结,简单的记录一下.









标签:基本,CITY,PostgreSQL,NAME,--,数据库,ALTER,TABLE,ID
From: https://blog.51cto.com/u_16218096/7010976

相关文章

  • 如何通过navicat连接数据库修改EasyCVR视频监控管理平台的登录密码?
    TSINGSEE青犀视频监控管理平台EasyCVR可以根据不同的应用场景需求,让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上,平台可实现视频实时直播、云端录像、云存储、回放与检索、告警上报、视频快照、视频转码与分发、平台级联等。......
  • Jupyter Notebook 遇上 NebulaGraph,可视化探索图数据库
    在之前的《手把手教你用NebulaGraphAI全家桶跑图算法》中,除了介绍了ngai这个小工具之外,还提到了一件事有了JupyterNotebook插件:https://github.com/wey-gu/ipython-ngql,可以更便捷地操作NebulaGraph。本文就手把手教你咋在JupyterNotebook中,愉快地玩图数据库。只......
  • Jupyter Notebook 遇上 NebulaGraph,可视化探索图数据库
    在之前的《手把手教你用NebulaGraphAI全家桶跑图算法》中,除了介绍了ngai这个小工具之外,还提到了一件事有了JupyterNotebook插件:https://github.com/wey-gu/ipython-ngql,可以更便捷地操作NebulaGraph。本文就手把手教你咋在JupyterNotebook中,愉快地玩图数据库。只......
  • Django 的数据库操作
    Djangp提供了一套抽象的API,能够对数据库进行CRUD(create,retrieve,update,deleteobjects)1、使用shell操作安装ipython交互环境pipinstall-ihttps://pypi.douban.com/simpleipythonpyhtonmanage.pyshell-iipython查看所有项目:Projects.objects.......
  • 《VTK图形图像开发进阶》第3章VTK基本数据结构——数据对象和数据集
    3.1可视化数据的基本特点离散性数据具有规则或不规则的结构(结构化与非结构化)数据具有维度3.2数据对象和数据集vtkDataObject下图为vtkDataObject类的继承图vtkDataSetVTK里与数据集对应的类是vtkDataSet,该类从vtkDataObject直接派生。vtkDataSet由两个部分组成,即组织......
  • Android build.gradle 基本规则
    Androidbuild.gradle基本规则一个完整示例://此乃本脚本执行所需依赖,以下分别对应maven库和插件buildscript{repositories{//从AndroidStudio3.0后新增了google()配置,可以引用google上的开源项目google()mavenCentral()//......
  • 亚信科技AntDB数据库与库瀚存储方案完成兼容性互认证,联合方案带来约20%性能提升
    近日,亚信科技AntDB数据库与苏州库瀚信息科技有限公司自主研发的RISC-V数据库存储解决方案进行了产品兼容测试。经过双方团队的严格测试,亚信科技AntDB数据库与库瀚数据库存储解决方案完全兼容、运行稳定。除高可用性测试外,双方进一步开展TPC-C横向比对性能测试,库瀚数据库存储解决方......
  • 数据库增删改查语句(入门)
    数据库增删改查语句一、增加insertinto...values1、insertinto表名(列名1,列名2,...列名n) values(值1,值2,...值n);(写列名插入数据)2、insertinto表名values(值1,值2,...值n);(不写列名插入数据)二、删除delete1、deletefrom表名;(删除表中所有数据)2、deletefrom表名where列=值;(根......
  • android 导出带数据库文件的APK
    http://www.ophonesdn.com/article/show/111技术文章基于OPhoneSDK1.5的英文电子词典的实现基于OPhoneSDK1.5的英文电子词典的实现OPhone平台开发,2009-12-0711:06:42标签:OPhoneSDK1.5英文词典英文词典是手机中经常使用的应用。因此,在本文将......
  • Spring Boot中使用MongoDB数据库
    本章我们来学习SpringBoot中使用MongoDB数据库,有两种使用方式,一是直接使用mongotemplate,二是新建实体相关的repository接口。引入依赖在pom.xml中加入spring-boot-starter-data-mongodb引入对mongodb的访问支持依赖,它的实现依赖spring-data-mongodb。<dependency><groupId>o......