SQL语言的组成部分及其操作关键字
SQL(Structured Query Language,结构化查询语言)是用于管理和操作关系型数据库的标准语言。它被分为几个主要部分,每个部分负责不同的功能和任务。以下是SQL语言的主要组成部分及其对应的操作关键字:
1. 数据查询语言 (DQL - Data Query Language)
- 用途:从数据库中检索数据。
- 关键字:
SELECT
:用于查询表中的数据行。FROM
:指定要从中选择数据的表。WHERE
:定义过滤条件以限制返回的数据行。GROUP BY
:将结果集按照一个或多个列进行分组。HAVING
:用于对分组后的结果进一步筛选。ORDER BY
:对结果集排序。LIMIT/OFFSET
:限制返回的结果数量或跳过某些行。
2. 数据定义语言 (DDL - Data Definition Language)
- 用途:定义或修改数据库结构(如创建、删除或更改表、索引等)。
- 关键字:
CREATE
:创建新的数据库对象,如表、视图、索引等。ALTER
:修改现有数据库对象的结构。DROP
:删除数据库对象。TRUNCATE
:快速清空表内容而不删除表结构。RENAME
:重命名数据库对象。
3. 数据操纵语言 (DML - Data Manipulation Language)
- 用途:插入、更新或删除数据库中的数据。
- 关键字:
INSERT INTO
:向表中添加新记录。UPDATE
:修改表中的现有记录。DELETE FROM
:从表中移除记录。MERGE
:合并来自不同源的数据到目标表中。
4. 数据控制语言 (DCL - Data Control Language)
- 用途:管理用户权限以及事务控制。
- 关键字:
GRANT
:授予用户特定的权限。REVOKE
:撤销用户的权限。COMMIT
:提交当前事务的所有更改。ROLLBACK
:回滚未提交的事务更改。SAVEPOINT
:设置保存点以便部分回滚。
5. 事务控制语言 (TCL - Transaction Control Language)
- 用途:处理事务边界及状态。
- 关键字:
BEGIN/START TRANSACTION
:启动一个新的事务。COMMIT
:确认并永久保存事务中的所有更改。ROLLBACK
:撤销自事务开始以来的所有更改。SET TRANSACTION
:设置事务特性。
思维导图概述
SQL 语言组成部分
├── 数据查询语言 (DQL)
│ ├── SELECT
│ ├── FROM
│ ├── WHERE
│ ├── GROUP BY
│ ├── HAVING
│ ├── ORDER BY
│ └── LIMIT/OFFSET
├── 数据定义语言 (DDL)
│ ├── CREATE
│ ├── ALTER
│ ├── DROP
│ ├── TRUNCATE
│ └── RENAME
├── 数据操纵语言 (DML)
│ ├── INSERT INTO
│ ├── UPDATE
│ ├── DELETE FROM
│ └── MERGE
├── 数据控制语言 (DCL)
│ ├── GRANT
│ ├── REVOKE
│ ├── COMMIT
│ ├── ROLLBACK
│ └── SAVEPOINT
└── 事务控制语言 (TCL)
├── BEGIN/START TRANSACTION
├── COMMIT
├── ROLLBACK
└── SET TRANSACTION
Java架构代码示例
下面是一些简单的Java代码片段,展示了如何通过JDBC执行不同类型SQL语句的例子。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SQLExample {
private static final String URL = "jdbc:mysql://localhost:3306/mydb";
private static final String USER = "user";
private static final String PASSWORD = "password";
public static void main(String[] args) {
// 获取数据库连接
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD)) {
// DDL 示例 - 创建表
executeDDL(conn, "CREATE TABLE IF NOT EXISTS employees (" +
"id INT AUTO_INCREMENT PRIMARY KEY," +
"name VARCHAR(100)," +
"salary DECIMAL(10, 2)," +
"hire_date DATE" +
")");
// DML 示例 - 插入数据
executeDML(conn, "INSERT INTO employees (name, salary, hire_date) VALUES (?, ?, ?)",
new Object[]{"John Doe", 70000.0, "2024-01-01"});
// DQL 示例 - 查询数据
ResultSet rs = executeDQL(conn, "SELECT id, name, salary, hire_date FROM employees");
while (rs.next()) {
System.out.println("ID: " + rs.getInt("id") +
", Name: " + rs.getString("name") +
", Salary: " + rs.getDouble("salary") +
", Hire Date: " + rs.getDate("hire_date"));
}
// TCL 示例 - 开始事务、提交或回滚
manageTransaction(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
private static void executeDDL(Connection conn, String sql) throws SQLException {
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.execute();
}
}
private static void executeDML(Connection conn, String sql, Object[] params) throws SQLException {
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
for (int i = 0; i < params.length; i++) {
pstmt.setObject(i + 1, params[i]);
}
pstmt.executeUpdate();
}
}
private static ResultSet executeDQL(Connection conn, String sql) throws SQLException {
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
return pstmt.executeQuery();
}
}
private static void manageTransaction(Connection conn) throws SQLException {
conn.setAutoCommit(false); // 关闭自动提交模式
try {
// 执行一些DML操作...
conn.commit(); // 提交事务
} catch (SQLException e) {
conn.rollback(); // 回滚事务
throw e;
} finally {
conn.setAutoCommit(true); // 恢复自动提交模式
}
}
}
这段代码演示了如何使用JDBC API执行各种类型的SQL语句,包括创建表(DDL)、插入数据(DML)、查询数据(DQL)以及管理事务(TCL)。请注意,在实际项目中,你可能会使用ORM框架(如Hibernate或Spring Data JPA),这些工具提供了更高层次的抽象来简化SQL语句的编写,并且通常能够更好地集成到应用程序的整体架构中。此外,现代开发实践中也推荐使用数据库迁移工具(如Flyway或Liquibase)来管理和版本化数据库结构变更,包括创建和修改表及索引等。