数据库基本概念
- 数据库的英文单词:DataBase,简称:DB
- 什么是数据库?
- 用于存储和管理数据的仓库
- 数据库的特点:
- 持久化存储数据,本质是一个文件系统
- 方便存储和管理数据
- 使用统一的方式操作数据库 – SQL
MySQL 8.0安装与配置
使用Docker安装MySQL
拉取MySQL 8镜像
docker pull mysql:8
创建数据持久化目录
mkdir -p /path/to/mysql/data
运行MySQL容器
docker run --name mysql8 \ -e MYSQL_ROOT_PASSWORD=your_password \ -p 3306:3306 \ -v /path/to/mysql/data:/var/lib/mysql \ -v /path/to/mysql/conf:/etc/mysql/conf.d \ -d mysql:8
Docker环境下的配置文件
Docker中MySQL的主配置文件位于容器内的/etc/mysql/my.cnf
,自定义配置可以通过挂载配置文件到/etc/mysql/conf.d
目录实现。以下是一个基本的配置文件示例(custom.cnf
):
[mysqld]
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 连接设置
port=3306
max_connections=1000
# InnoDB配置
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_log_buffer_size=64M
innodb_flush_log_at_trx_commit=1
# 日志设置
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slow.log
long_query_time=2
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
配置文件说明:
- character-set-server:服务器字符集,推荐使用utf8mb4
- max_connections:最大连接数
- innodb_buffer_pool_size:InnoDB缓冲池大小,建议设置为总内存的50%-70%
- innodb_log_file_size:事务日志文件大小
- slow_query_log:开启慢查询日志
MySQL登录
容器内登录
docker exec -it mysql8 mysql -uroot -p
主机登录
mysql -h127.0.0.1 -uroot -p
带参数登录
mysql --host=127.0.0.1 --user=root --password=your_password
SQL语言
SQL概述
Structured Query Language(结构化查询语言)是所有关系型数据库的标准语言。
SQL通用语法规则
- SQL语句可以单行或多行书写,以分号结尾
- 可使用空格和缩进提高可读性
- MySQL 8不区分大小写,但建议关键字大写
- 注释方式:
- 单行注释:– 注释内容
- 单行注释:# 注释内容(MySQL特有)
- 多行注释:/* 注释内容 */
SQL分类
DDL(Data Definition Language)数据定义语言
- 用于定义数据库对象:数据库、表、列等
- 关键字:CREATE、DROP、ALTER等
DML(Data Manipulation Language)数据操作语言
- 用于对表中数据进行增删改
- 关键字:INSERT、DELETE、UPDATE等
DQL(Data Query Language)数据查询语言
- 用于查询表中记录
- 关键字:SELECT、WHERE等
DCL(Data Control Language)数据控制语言
- 用于定义数据库访问权限和安全级别
- 关键字:GRANT、REVOKE等
DDL:数据库操作
创建数据库
-- 创建数据库
CREATE DATABASE db_name;
-- 判断不存在则创建
CREATE DATABASE IF NOT EXISTS db_name;
-- 指定字符集创建
CREATE DATABASE db_name CHARACTER SET utf8mb4;
查询数据库
-- 查看所有数据库
SHOW DATABASES;
-- 查看创建语句
SHOW CREATE DATABASE db_name;
修改数据库
-- 修改字符集
ALTER DATABASE db_name CHARACTER SET utf8mb4;
删除数据库
-- 删除数据库
DROP DATABASE db_name;
-- 判断存在则删除
DROP DATABASE IF EXISTS db_name;
DDL:表操作
创建表
CREATE TABLE table_name (
id INT,
name VARCHAR(50),
age INT,
score DECIMAL(5,2),
birth_date DATE,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
数据类型说明:
- INT:整数类型
- VARCHAR:可变长字符串
- DECIMAL:精确小数
- DATE:日期,格式YYYY-MM-DD
- TIMESTAMP:时间戳,自动记录创建和更新时间
修改表
-- 修改表名
ALTER TABLE old_name RENAME TO new_name;
-- 添加列
ALTER TABLE table_name ADD column_name datatype;
-- 修改列
ALTER TABLE table_name MODIFY column_name new_datatype;
-- 删除列
ALTER TABLE table_name DROP column_name;
DML:数据操作
插入数据
-- 指定列插入
INSERT INTO table_name(column1, column2) VALUES(value1, value2);
-- 全列插入
INSERT INTO table_name VALUES(value1, value2, ...);
更新数据
UPDATE table_name SET column1=value1, column2=value2 WHERE condition;
删除数据
-- 删除满足条件的记录
DELETE FROM table_name WHERE condition;
-- 清空表(效率更高)
TRUNCATE TABLE table_name;
DQL:数据查询
SELECT
[DISTINCT] column1, column2
FROM
table_name
[WHERE
condition]
[GROUP BY
column]
[HAVING
group_condition]
[ORDER BY
column [ASC|DESC]]
[LIMIT
offset, row_count];
条件查询
-- 比较运算符
SELECT * FROM students WHERE age >= 20;
-- 范围查询
SELECT * FROM students WHERE age BETWEEN 20 AND 30;
-- IN查询
SELECT * FROM students WHERE age IN (18, 20, 22);
-- 模糊查询
SELECT * FROM students WHERE name LIKE '张%';
-- NULL值查询
SELECT * FROM students WHERE score IS NULL;
DCL:权限管理
用户管理
-- 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
-- 修改密码
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
-- 删除用户
DROP USER 'username'@'host';
权限管理
-- 授予权限
GRANT privileges ON database.table TO 'username'@'host';
-- 撤销权限
REVOKE privileges ON database.table FROM 'username'@'host';
-- 查看权限
SHOW GRANTS FOR 'username'@'host';