数据库与SQL笔记
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
2CREATE DATABASE [IF NOT EXISTS] 数据库名
DEFAULT CHARSET=utf8mb4; - 使用数据库:
1
USE 数据库名;
- 删除数据库:
1
DROP DATABASE [IF EXISTS] 数据库名;
3. 表操作(DDL)
3.1 表的创建
- 基本语法:
1
2
3
4
5
6CREATE TABLE 表名 (
字段名 数据类型 [约束条件],
...
[PRIMARY KEY (字段名)]
[FOREIGN KEY (字段名) REFERENCES 外表(字段名)]
); - 示例:
1
2
3
4
5
6
7CREATE 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
3INSERT INTO 表名 (字段1, 字段2) VALUES
(值1, 值2),
(值3, 值4);
4.2 更新数据
- 更新指定记录:
1
2
3UPDATE 表名
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 | SELECT * FROM students WHERE age > 18; |
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 | SELECT COUNT(*) FROM students; -- 统计总数 |
5.7 多表查询
5.7.1 简单多表查询
- 查询多个表数据:
1
SELECT * FROM 表1, 表2 WHERE 表1.字段 = 表2.字段;
5.8 连接查询(JOIN)
- 内连接(INNER JOIN):
1
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段 = 表2.字段;
- 左连接(LEFT JOIN):
1
SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.字段 = 表2.字段;
- 右连接(RIGHT JOIN):
1
SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.字段 = 表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
2SELECT CONCAT('Hello', 'World'); -- 拼接字符串
SELECT LENGTH('Hello'); -- 获取字符串长度 - 数学函数:
1
SELECT ROUND(3.14159, 2); -- 保留两位小数
- 日期函数:
1
2SELECT 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