数据库安装与连接:PostgreSQL、MySQL 与客户端
你要学会什么
第一次学习 SQL,先把数据库跑起来。安装 PostgreSQL 或 MySQL,连接到服务器,创建数据库和表,插入测试数据。已有数据库经验的读者可以快速确认环境,再进入后续查询语法。
本文使用 PostgreSQL 16 作为主要环境,MySQL 8.0 作为对照。两者的基本查询语法高度相似,差异会在具体章节中标注。
选择数据库:PostgreSQL vs MySQL
两个都是流行的开源关系数据库:
| 特性 | PostgreSQL | MySQL |
|---|---|---|
| 标准符合性 | 更严格遵循 SQL 标准 | 部分扩展语法 |
| 数据类型 | 更丰富(JSONB、数组、UUID) | 传统类型为主 |
| 窗口函数 | 完整支持 | 8.0+ 支持 |
| 事务隔离 | 默认 Read Committed | 默认 Repeatable Read |
| 适用场景 | 复杂查询、数据分析 | Web 应用、读多写少 |
本课程选择 PostgreSQL 作为主要环境,因为它对 SQL 标准的支持更完整,但所有基础概念在 MySQL 中同样适用。
安装 PostgreSQL
macOS
使用 Homebrew 安装:
brew install postgresql@16
brew services start postgresql@16验证安装:
psql --version预期输出:
psql (PostgreSQL) 16.xUbuntu/Debian
sudo apt update
sudo apt install postgresql-16 postgresql-client-16
sudo systemctl start postgresql
sudo systemctl enable postgresqlWindows
从 PostgreSQL 官网 下载安装包,运行安装向导。默认端口 5432,记住设置的密码。
连接 PostgreSQL
安装后,PostgreSQL 会创建一个名为 postgres 的超级用户。
首次连接
macOS/Linux:
psql -U postgres如果提示权限错误,使用:
sudo -u postgres psqlWindows(在 SQL Shell 中):
Server [localhost]:
Database [postgres]:
Port [5432]:
Username [postgres]: postgres
Password: [输入安装时设置的密码]成功连接后,看到提示符:
postgres=#创建自己的用户和数据库
-- 创建新用户
CREATE USER learner WITH PASSWORD 'password123';
-- 创建数据库
CREATE DATABASE learning_sql OWNER learner;
-- 退出
\q重新连接到新数据库:
psql -U learner -d learning_sqlPostgreSQL 常用命令
这些是 psql 客户端的元命令(以 \ 开头),不是 SQL 语句:
| 命令 | 作用 |
|---|---|
\l | 列出所有数据库 |
\c database_name | 连接到指定数据库 |
\dt | 列出当前数据库的所有表 |
\d table_name | 查看表结构 |
\q | 退出 |
\? | 查看所有元命令帮助 |
\h SQL命令 | 查看 SQL 命令帮助 |
创建第一个表
-- 创建用户表
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);解释:
SERIAL:自动递增的整数,PostgreSQL 特有(MySQL 用AUTO_INCREMENT)PRIMARY KEY:主键,唯一标识每一行VARCHAR(n):可变长度字符串,最大 n 个字符NOT NULL:不允许为空UNIQUE:不允许重复TIMESTAMP:日期时间类型DEFAULT:默认值
查看表结构:
\d users输出:
Table "public.users"
Column | Type | Collation | Nullable | Default
------------+-----------------------------+-----------+----------+-----------------------------------
id | integer | | not null | nextval('users_id_seq'::regclass)
name | character varying(50) | | not null |
email | character varying(100) | | not null |
age | integer | | |
created_at | timestamp without time zone | | | CURRENT_TIMESTAMP
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
"users_email_key" UNIQUE CONSTRAINT, btree (email)插入测试数据
INSERT INTO users (name, email, age) VALUES
('Alice', 'alice@example.com', 30),
('Bob', 'bob@example.com', 25),
('Charlie', 'charlie@example.com', 35),
('Diana', 'diana@example.com', 28),
('Eve', 'eve@example.com', NULL);注意 Eve 的年龄是 NULL(未知),后续章节会学习如何处理 NULL。
验证插入:
SELECT * FROM users;输出:
id | name | email | age | created_at
----+---------+---------------------+-----+------------------------
1 | Alice | alice@example.com | 30 | 2026-09-20 10:30:00
2 | Bob | bob@example.com | 25 | 2026-09-20 10:30:00
3 | Charlie | charlie@example.com | 35 | 2026-09-20 10:30:00
4 | Diana | diana@example.com | 28 | 2026-09-20 10:30:00
5 | Eve | eve@example.com | | 2026-09-20 10:30:00MySQL 对照
安装 MySQL
macOS:
brew install mysql@8.0
brew services start mysql@8.0
mysql_secure_installation # 设置 root 密码Ubuntu/Debian:
sudo apt install mysql-server-8.0
sudo mysql_secure_installation连接 MySQL
mysql -u root -pMySQL 与 PostgreSQL 的差异
创建表时的主要差异:
-- MySQL 版本
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY, -- MySQL 用 AUTO_INCREMENT
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB; -- MySQL 需要指定存储引擎元命令差异:
| 功能 | PostgreSQL | MySQL |
|---|---|---|
| 列出数据库 | \l | SHOW DATABASES; |
| 切换数据库 | \c dbname | USE dbname; |
| 列出表 | \dt | SHOW TABLES; |
| 查看表结构 | \d tablename | DESCRIBE tablename; |
图形化客户端(可选)
命令行足够学习使用,但图形化工具更直观:
- PostgreSQL:pgAdmin、DBeaver
- MySQL:MySQL Workbench、DBeaver
- 跨平台:DBeaver(支持多种数据库)
练习
安装与连接:安装 PostgreSQL 或 MySQL,成功连接到数据库服务器。
创建数据库:创建一个名为
practice的数据库,创建自己的用户并授予权限。创建商品表:创建一个
products表,包含以下列:id(主键,自动递增)name(商品名称,不允许为空)price(价格,DECIMAL 类型)stock(库存,整数)category(类别,字符串)
插入数据:向
products表插入至少 5 条商品记录,包含不同类别。查看数据:使用
SELECT * FROM products;查看所有商品。
完成练习后,打开本章答案页核对。
下一步
环境确认完成。下一节学习 SELECT 语句:如何选择列、使用别名、计算表达式。