PostgreSQL DML语句详解:INSERT, UPDATE, DELETE与INSERT ON CONFLICT

2 下载量 113 浏览量 更新于2024-08-29 收藏 68KB PDF 举报
"《PostgreSQL开发指南》的第22篇专注于DML(Data Manipulation Language)语句,即用于管理数据库中数据的SQL命令。本文档主要讲解了如何使用INSERT、UPDATE、DELETE以及INSERT ON CONFLICT这四种语句来对表中的数据进行增、改、删操作。通过两个示例表——dept和emp,详细阐述了这些语句的具体应用。" 在PostgreSQL中,DML语句是数据库操作的核心部分,它们允许我们与数据库进行交互,修改其内容。首先,我们来看创建表的语法,创建了两个表:`dept`用于存储部门信息,`emp`用于存储员工信息。`dept`表有`department_id`和`department_name`两列,其中`department_id`为主键。`emp`表包含`employee_id`、`first_name`、`last_name`、`hire_date`、`salary`、`manager_id`和`department_id`,其中`employee_id`为主键,`department_id`和`manager_id`为外键,分别引用`dept`表和`emp`表的`department_id`,并且设定了级联删除。 接着,我们探讨如何使用DML语句: 1. INSERT语句:用于向表中插入新数据。例如,要向`dept`表中插入一条新的部门记录,我们可以使用以下语句: ```sql INSERT INTO dept(department_id, department_name) VALUES(10, 'Administration'); ``` 这将在`dept`表中创建一个新记录,`department_id`为10,`department_name`为'Administration'。 2. UPDATE语句:用于修改表中已存在的数据。如果我们想更改某个部门的名称,可以这样写: ```sql UPDATE emp SET last_name = 'Smith' WHERE employee_id = 1; ``` 这将找到`employee_id`为1的员工,并将其`last_name`更改为'Smith'。 3. DELETE语句:用于删除表中的记录。例如,要删除`dept`表中`department_id`为10的部门,我们可以执行: ```sql DELETE FROM dept WHERE department_id = 10; ``` 这会删除`dept`表中所有`department_id`为10的记录。 4. INSERT ON CONFLICT语句:这是一种特殊的插入操作,当尝试插入的记录与现有记录冲突时,可以根据设定的策略进行处理。例如,如果尝试插入一个已经存在的`employee_id`,我们可以使用`ON CONFLICT DO NOTHING`或`ON CONFLICT DO UPDATE`来避免错误。假设我们希望在冲突时更新`salary`,可以写成: ```sql INSERT INTO emp(employee_id, salary) VALUES(1, 50000) ON CONFLICT (employee_id) DO UPDATE SET salary = EXCLUDED.salary; ``` 这会检查`employee_id`是否已存在,如果存在,则更新相应的`salary`。 以上就是对`dept`和`emp`表进行DML操作的基本方法。理解并熟练掌握这些语句,将有助于我们在实际的数据库管理中更加高效地操作数据。对于初学者来说,通过实践和练习,可以更好地理解和运用这些概念。