数据库与SQL笔记

KaldX

1. 数据库基础

1.1 什么是关系型数据库(RDBMS)

  • 定义:关系型数据库是一种基于关系模型,以二维表的形式存储数据的数据库。
  • 特点:
    • 数据存储在多张表中,并通过键建立关联。
    • 使用 SQL(结构化查询语言)进行操作。

1.2 SQL分类

分类 全称 说明
DDL Data Definition Language 数据定义语言,用来定义数据库对象(如:数据库,表,字段)。
DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增、删、改操作。
DQL Data Query Language 数据查询语言,用来查询数据库中的数据记录。
DCL Data Control Language 数据控制语言,用来管理用户权限,控制数据库的访问。
举例:
  • DDL 示例:CREATE TABLE students (id INT, name VARCHAR(50));
  • DML 示例:INSERT INTO students (id, name) VALUES (1, 'Alice');
  • DQL 示例:SELECT * FROM students;
  • DCL 示例:GRANT ALL PRIVILEGES ON test.* TO 'user'@'localhost';

1.3 常用命令

  • 启动 / 停止 MySQL 服务
    • net start mysql //启动MySQL服务
    • net stop mysql //停止MySQL服务
  • 设置密码
    • mysqladmin -u root password 1234 //为root用户设置密码
  • 登录 MySQL
    • mysql -u root -p //输入密码登录
    • mysql -h <服务器IP> -P <端口> -u<用户名> -p<密码>

2. 数据库操作(DDL)

2.1 数据库管理

  • 查询所有数据库:
    1
    SHOW DATABASES;
  • 创建数据库:
    1
    2
    CREATE DATABASE [IF NOT EXISTS] 数据库名
    DEFAULT CHARSET=utf8mb4;
  • 使用数据库:
    1
    USE 数据库名;
  • 删除数据库:
    1
    DROP DATABASE [IF EXISTS] 数据库名;

3. 表操作(DDL)

3.1 表的创建

  • 基本语法:
    1
    2
    3
    4
    5
    6
    CREATE TABLE 表名 (
    字段名 数据类型 [约束条件],
    ...
    [PRIMARY KEY (字段名)]
    [FOREIGN KEY (字段名) REFERENCES 外表(字段名)]
    );
  • 示例:
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT,
    class_id INT,
    FOREIGN KEY (class_id) REFERENCES classes(id)
    );

3.2 查看表

  • 查看所有表:
    1
    SHOW TABLES;
  • 查看某张表的结构:
    1
    DESC 表名;

3.3 修改表

  • 添加字段:
    1
    ALTER TABLE 表名 ADD 字段名 数据类型 [约束];
  • 修改字段:
    1
    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 [约束];
  • 删除字段:
    1
    ALTER TABLE 表名 DROP 字段名;

3.4 删除表

  • 删除表:
    1
    DROP TABLE [IF EXISTS] 表名;

4. 数据操作(DML)

4.1 插入数据

  • 插入单条记录:
    1
    INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2);
  • 插入多条记录:
    1
    2
    3
    INSERT INTO 表名 (字段1, 字段2) VALUES
    (值1, 值2),
    (值3, 值4);

4.2 更新数据

  • 更新指定记录:
    1
    2
    3
    UPDATE 表名
    SET 字段1=1, 字段2=2
    WHERE 条件;

4.3 删除数据

  • 删除指定记录:
    1
    DELETE FROM 表名 WHERE 条件;
  • 删除表中所有记录(慎用):
    1
    DELETE FROM 表名;

5. 查询数据(DQL)

5.1 基本查询

  • 查询所有记录:
    1
    SELECT * FROM 表名;
  • 查询部分字段:
    1
    SELECT 字段1, 字段2 FROM 表名;

5.2 条件查询

  • 使用 WHERE 子句:
    1
    SELECT * FROM 表名 WHERE 条件;
    常用条件运算符:
    • =><>=<=!=
    • BETWEEN ... AND ...
    • IN (值1, 值2, ...)
    • LIKE '模式'
    • IS NULL / IS NOT NULL
      示例:
1
2
SELECT * FROM students WHERE age > 18;
SELECT * FROM students WHERE name LIKE 'A%';

5.3 投影查询

  • 去重数据:
    1
    SELECT DISTINCT 字段 FROM 表名;

5.4 排序

  • 使用 ORDER BY 子句:
    1
    SELECT * FROM 表名 ORDER BY 字段 [ASC|DESC];
  • 示例:
    1
    SELECT * FROM students ORDER BY age DESC;

5.5 分页查询

  • 使用 LIMIT 子句:
    1
    SELECT * FROM 表名 LIMIT 开始位置, 查询条数;
    示例:
1
SELECT * FROM students LIMIT 0, 10;  -- 查询前 10 条

5.6 聚合查询

  • 常用聚合函数:
    • COUNT:计算记录数
    • SUM:求和
    • AVG:求平均值
    • MAX / MIN:最大/最小值
      示例:
1
2
SELECT COUNT(*) FROM students;  -- 统计总数
SELECT AVG(age) FROM students; -- 求平均年龄

5.7 多表查询

5.7.1 简单多表查询

  • 查询多个表数据:
    1
    SELECT * FROM1, 表2 WHERE1.字段 =2.字段;

5.8 连接查询(JOIN)

  • 内连接(INNER JOIN):
    1
    SELECT * FROM1 INNER JOIN2 ON1.字段 =2.字段;
  • 左连接(LEFT JOIN):
    1
    SELECT * FROM1 LEFT JOIN2 ON1.字段 =2.字段;
  • 右连接(RIGHT JOIN):
    1
    SELECT * FROM1 RIGHT JOIN2 ON1.字段 =2.字段;

6. 事务(Transaction)

6.1 什么是事务

  • 事务是由一系列操作组成的执行单元,这些操作在逻辑上必须作为一个整体执行。
  • 事务的特性(ACID):
    • 原子性:要么全部执行,要么全部不执行。
    • 一致性:事务执行后,数据库状态保持一致。
    • 隔离性:多个事务之间互不干扰。
    • 持久性:事务提交后,数据永久保存。

6.2 MySQL事务控制

  • 开启事务:
    1
    START TRANSACTION;
  • 提交事务:
    1
    COMMIT;
  • 回滚事务:
    1
    ROLLBACK;

7. 常用

7.1 管理MySQL

  • 查看当前数据库:
    1
    SELECT DATABASE();
  • 查看当前用户:
    1
    SELECT USER();

7.2 常用SQL函数

  • 字符串函数:
    1
    2
    SELECT CONCAT('Hello', 'World'); -- 拼接字符串
    SELECT LENGTH('Hello'); -- 获取字符串长度
  • 数学函数:
    1
    SELECT ROUND(3.14159, 2);        -- 保留两位小数
  • 日期函数:
    1
    2
    SELECT NOW();                    -- 获取当前时间
    SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); -- 格式化日期
  • Title: 数据库与SQL笔记
  • Author: KaldX
  • Created at : 2025-03-21 10:00:00
  • Updated at : 2025-03-21 10:00:00
  • Link: https://blog.kaldx.com/2025/03/21/数据库与SQL笔记/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments