首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PostgreSQL-增删改查(CRUD)

PostgreSQL-增删改查(CRUD)

作者头像
运维小路
发布2026-01-26 12:21:36
发布2026-01-26 12:21:36
390
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。

MySQL

PostgreSQL(本章节)

MongoDB

Redis

Etcd

我们在介绍MYSQL的时候也介绍过增删改查,PostgreSQL对于数据的增删改查和MYSQL几乎是一模一样的,在对库,表的操作语法也很相近,我们今天主要介绍是对于库表的增删改查。

代码语言:javascript
复制
-- 查询(两者相同)
SELECT * FROM users WHERE age > 25;

-- 插入(两者相同)
INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');

-- 更新(两者相同)
UPDATE users SET age = 30 WHERE name = '张三';

-- 删除(两者相同)
DELETE FROM users WHERE id = 1;

1. 数据库操作 (Database CRUD)

C (Create): 创建数据库

代码语言:javascript
复制
-- 基本创建,这个和mysql是一致的
CREATE DATABASE abcd;
-- 创建并指定字符集(PostgreSQL 中称为“编码”)和排序规则
CREATE DATABASE efg
  ENCODING 'UTF8'  -- 字符编码(对应 MySQL 的 CHARSET)
  LC_COLLATE 'zh_CN.UTF-8'  -- 排序规则(对应 MySQL 的 COLLATE)
  LC_CTYPE 'zh_CN.UTF-8';  -- 字符分类(影响字符串处理,MySQL 无此参数)

R (Read): 查询数据库

代码语言:javascript
复制
-- 列出所有数据库-MYSQL
SHOW DATABASES;
代码语言:javascript
复制
-- Pg就和mysql完全不一样了 
postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)

D (Delete): 删除数据库

代码语言:javascript
复制
-- 删除 test_db 数据库(危险!谨慎操作),这个和mysql是一致的。 
DROP DATABASE test_db;

选择数据库(Use)

代码语言:javascript
复制
#mysql 
USE test_db;
#pg-- 切换到 test_db 数据库
\c test_db;

2. 表操作 (Table CRUD)

C (Create): 创建表

代码语言:javascript
复制
-- 创建用户表(基本结构)
CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT,  -- MySQL 自增语法
  name VARCHAR(50) NOT NULL,
  age INT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- PostgreSQL 中自增语法不同(用 SERIAL 或 identity)
CREATE TABLE users (
  id SERIAL PRIMARY KEY,  -- 等价于 MySQL 的 AUTO_INCREMENT(旧版)
  -- 或 PostgreSQL 10+ 推荐:id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  age INT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

R (Read): 查询表

代码语言:javascript
复制
-- mysql
SHOW TABLES;
-- 方法1:使用 psql 客户端特有命令(常用,简洁)
\dt
-- 方法2:查询系统表(SQL 标准语法,可在任何客户端使用)
SELECT tablename FROM pg_tables WHERE schemaname = 'public';
代码语言:javascript
复制
-- mysql 查看表结构
desc  TABLES;
-- pg 查看users表结构
\d users;

U (Update): 修改表

这是DDL(数据定义语言)中非常重要的部分,用于调整表结构。

代码语言:javascript
复制
-- ============ 添加列 ============
-- PostgreSQL
ALTER TABLE users ADD COLUMN phone VARCHAR(20);

-- MySQL
ALTER TABLE users ADD phone VARCHAR(20);

-- ============ 修改列类型 ============
-- PostgreSQL
ALTER TABLE users ALTER COLUMN age TYPE INT;

-- MySQL
ALTER TABLE users MODIFY age INT;

-- ============ 重命名列 ============
-- PostgreSQL
ALTER TABLE users RENAME COLUMN phone TO phone_number;

-- MySQL (两种方式)
ALTER TABLE users CHANGE phone phone_number VARCHAR(20);
-- 或 MySQL 8.0+
ALTER TABLE users RENAME COLUMN phone TO phone_number;

-- ============ 删除列 ============
-- PostgreSQL
ALTER TABLE users DROP COLUMN phone_number;

-- MySQL
ALTER TABLE users DROP phone_number;

-- ============ 添加主键 ============
-- PostgreSQL
ALTER TABLE users ADD PRIMARY KEY (id);

-- MySQL
ALTER TABLE users ADD PRIMARY KEY (id);

-- ============ 添加外键 ============
-- PostgreSQL (必须命名约束)
ALTER TABLE orders ADD CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id);

-- MySQL (可自动命名)
ALTER TABLE orders ADD FOREIGN KEY (user_id) REFERENCES users(id);

-- ============ 添加索引 ============
-- PostgreSQL
CREATE INDEX idx_users_email ON users (email);

-- MySQL (两种方式)
CREATE INDEX idx_users_email ON users (email);
-- 或
ALTER TABLE users ADD INDEX idx_users_email (email);

-- ============ 设置NOT NULL约束 ============
-- PostgreSQL
ALTER TABLE users ALTER COLUMN email SET NOT NULL;

-- MySQL
ALTER TABLE users MODIFY email VARCHAR(100) NOT NULL;

D (Delete): 删除表 【警告】此操作非常危险,会直接删除表及其所有数据,务必谨慎!

代码语言:javascript
复制
#pg和mysql是一样的
DROP TABLE users;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB
    • 1. 数据库操作 (Database CRUD)
    • R (Read): 查询数据库
    • 选择数据库(Use)
    • 2. 表操作 (Table CRUD)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档