PostgreSQL 插入数据
在 PostgreSQL 中,插入数据是数据库操作的基础之一。无论是向表中添加新记录,还是从其他表中导入数据,INSERT
语句都是必不可少的工具。本文将详细介绍如何使用 INSERT
语句,并通过实际案例帮助你更好地理解其应用。
1. 什么是 INSERT
语句?
INSERT
语句用于向数据库表中添加新行。它允许你指定要插入的列以及对应的值。如果你不指定列名,PostgreSQL 会尝试将值插入到表中的所有列中。
基本语法
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
table_name
:要插入数据的表名。column1, column2, column3, ...
:要插入数据的列名(可选)。value1, value2, value3, ...
:要插入的具体值。
如果省略列名,PostgreSQL 会尝试将值插入到表中的所有列中。因此,值的顺序必须与表中列的顺序一致。
2. 插入单行数据
让我们从一个简单的例子开始。假设我们有一个名为 employees
的表,其结构如下:
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
department VARCHAR(50),
salary NUMERIC
);
现在,我们想向 employees
表中插入一条新记录:
INSERT INTO employees (name, department, salary)
VALUES ('John Doe', 'Engineering', 75000);
执行上述语句后,employees
表中将新增一行数据:
id | name | department | salary |
---|---|---|---|
1 | John Doe | Engineering | 75000 |
id
列是 SERIAL
类型,PostgreSQL 会自动为其生成一个唯一的值。
3. 插入多行数据
如果你想一次性插入多行数据,可以使用以下语法:
INSERT INTO employees (name, department, salary)
VALUES
('Jane Smith', 'Marketing', 65000),
('Alice Johnson', 'HR', 60000),
('Bob Brown', 'Sales', 70000);
执行后,employees
表将新增三行数据:
id | name | department | salary |
---|---|---|---|
1 | John Doe | Engineering | 75000 |
2 | Jane Smith | Marketing | 65000 |
3 | Alice Johnson | HR | 60000 |
4 | Bob Brown | Sales | 70000 |
4. 插入默认值
如果你希望某些列使用默认值,可以在 INSERT
语句中省略这些列,或者显式地使用 DEFAULT
关键字。
例如,假设 salary
列有一个默认值 50000
,你可以这样插入数据:
INSERT INTO employees (name, department)
VALUES ('Charlie Davis', 'Support');
执行后,salary
列将使用默认值 50000
:
id | name | department | salary |
---|---|---|---|
5 | Charlie Davis | Support | 50000 |
5. 从其他表插入数据
有时,你可能需要从一个表中查询数据并插入到另一个表中。这时可以使用 INSERT INTO ... SELECT
语句。
假设我们有一个 temp_employees
表,其中包含一些临时员工数据:
CREATE TABLE temp_employees (
name VARCHAR(100),
department VARCHAR(50),
salary NUMERIC
);
INSERT INTO temp_employees (name, department, salary)
VALUES
('Eva Green', 'Finance', 80000),
('David Black', 'IT', 72000);
现在,我们可以将这些数据插入到 employees
表中:
INSERT INTO employees (name, department, salary)
SELECT name, department, salary
FROM temp_employees;
执行后,employees
表将新增两行数据:
id | name | department | salary |
---|---|---|---|
6 | Eva Green | Finance | 80000 |
7 | David Black | IT | 72000 |
6. 实际应用场景
场景 1:用户注册
假设你正在开发一个用户注册系统,用户注册时需要将他们的信息插入到 users
表中:
CREATE TABLE users (
user_id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (username, email)
VALUES ('alice123', 'alice@example.com');
场景 2:订单系统
在一个订单系统中,当用户下单时,需要将订单信息插入到 orders
表中:
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(user_id),
product_name VARCHAR(100),
quantity INT,
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO orders (user_id, product_name, quantity)
VALUES (1, 'Laptop', 1);
7. 总结
在本文中,我们学习了如何在 PostgreSQL 中使用 INSERT
语句插入数据。我们涵盖了单行插入、多行插入、插入默认值以及从其他表插入数据的操作。通过这些知识,你可以轻松地向数据库表中添加新记录。
附加资源
练习
- 创建一个
products
表,并插入至少 5 条产品记录。 - 尝试从一个表中查询数据并插入到另一个表中。
- 使用
DEFAULT
关键字插入一条记录,观察默认值的效果。
通过练习,你将更加熟练地掌握 PostgreSQL 中的数据插入操作。祝你学习愉快!