MySQL关系型数据库学习

学习参考链接https://www.runoob.com/mysql/mysql-tutorial.html

Windows 安装MYSQL服务端的步骤:https://www.runoob.com/w3cnote/windows10-mysql-installer.html

1. 概念学习

MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL 使用标准的 SQL 数据语言形式。

MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

  • 表头(header): 每一列的名称;
  • 列(col): 具有相同数据类型的数据的集合;
  • 行(row): 每一行用来描述某条记录的具体信息;
  • 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
  • 键(key): 键的值在当前列中具有唯一性。

2. MySQL权限管理

客户端连接权限

bash 复制代码
CREATE USER 'username'@'host' IDENTIFIED BY 'password';



表管理权限

bash 复制代码
GRANT privileges ON database_name.* TO 'username'@'host';

3. MySQL配置文件

/etc/my.cnf 文件配置

/etc/my.cnf 文件是 MySQL 配置文件,用于配置 MySQL 服务器的各种参数和选项。

一般情况下,你不需要修改该配置文件,该文件默认配置如下:

bash 复制代码
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

[mysql.server]
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

在配置文件中,你可以指定不同的错误日志文件存放的目录,一般你不需要改动这些配置。

/etc/my.cnf 文件在不同的系统和 MySQL 版本中可能有所不同,但是一般包含以下几个部分:

  1. 基本设置
    basedir: MySQL 服务器的基本安装目录。
    datadir: 存储 MySQL 数据文件的位置。
    socket: MySQL 服务器的 Unix 套接字文件路径。
    pid-file: 存储当前运行的 MySQL 服务器进程 ID 的文件路径。
    port: MySQL 服务器监听的端口号,默认是 3306。
  2. 服务器选项
    bind-address: 指定 MySQL 服务器监听的 IP 地址,可以是 IP 地址或主机名。
    server-id: 在复制配置中,为每个 MySQL 服务器设置一个唯一的标识符。
    default-storage-engine: 默认的存储引擎,例如 InnoDB 或 MyISAM。
    max_connections: 服务器可以同时维持的最大连接数。
    thread_cache_size: 线程缓存的大小,用于提高新连接的启动速度。
    query_cache_size: 查询缓存的大小,用于提高相同查询的效率。
    default-character-set: 默认的字符集。
    collation-server: 服务器的默认排序规则。
  3. 性能调优
    innodb_buffer_pool_size: InnoDB 存储引擎的缓冲池大小,这是 InnoDB 性能调优中最重要的参数之一。
    key_buffer_size: MyISAM 存储引擎的键缓冲区大小。
    table_open_cache: 可以同时打开的表的缓存数量。
    thread_concurrency: 允许同时运行的线程数。
  4. 安全设置
    skip-networking: 禁止 MySQL 服务器监听网络连接,仅允许本地连接。
    skip-grant-tables: 以无需密码的方式启动 MySQL 服务器,通常用于恢复忘记的 root 密码,但这是一个安全风险。
    auth_native_password=1: 启用 MySQL 5.7 及以上版本的原生密码认证。
  5. 日志设置
    log_error: 错误日志文件的路径。
    general_log: 记录所有客户端连接和查询的日志。
    slow_query_log: 记录执行时间超过特定阈值的慢查询。
    log_queries_not_using_indexes: 记录未使用索引的查询。
  6. 复制设置
    master_host 和 master_user: 主服务器的地址和复制用户。
    master_password: 复制用户的密码。
    master_log_file 和 master_log_pos: 用于复制的日志文件和位置。

4. MySQL表格

表格的列属性

MySQL 数据类型

MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。

MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

5. MySQL客户端

安装 MySQL 后,你可以通过以下几种方式连接到 MySQL 服务端:

1、使用命令行客户端连接

2、使用图形化工具连接

常用 MySQL 图形化管理工具:

MySQL Workbench(官方工具):https://www.mysql.com/cn/products/workbench/

Navicat(付费):https://www.navicat.com/

DBeaver:https://dbeaver.io/

phpMyAdmin(基于Web):https://www.phpmyadmin.net/

DbGate下载地址:https://dbgate.org/download/

6. python使用MySQL数据库

python 复制代码
pip install mysql-connector-python
python 复制代码
pip install pymysql



ORM 框架

对于复杂应用,可以考虑使用 ORM (对象关系映射) 框架,如 SQLAlchemy 或 Django ORM。

7. 防止SQL注入

防范 SQL 注入:

使用参数化查询或预编译语句: 使用参数化查询(Prepared Statements)可以有效防止 SQL 注入,因为它们在执行查询之前将输入数据与查询语句分离。

输入验证和转义: 对用户输入进行适当的验证,并使用合适的转义函数(如mysqli_real_escape_string)来处理输入,以防止恶意注入。

最小权限原则: 给予数据库用户最小的权限,确保它们只能执行必要的操作,以降低潜在的损害。

使用ORM框架: 使用对象关系映射(ORM)框架(如Hibernate、Sequelize)可以帮助抽象 SQL 查询,从而降低 SQL 注入的风险。

禁用错误消息显示: 在生产环境中,禁用显示详细的错误消息,以防止攻击者获取有关数据库结构的敏感信息。

相关推荐
SPC的存折6 分钟前
openEuler 24.03 MariaDB Galera 集群部署指南(cz)
linux·运维·服务器·数据库·mysql
仲芒7 分钟前
[24年单独笔记] MySQL 常用的 DML 命令
数据库·笔记·mysql
SPC的存折19 分钟前
MySQL 8.0 分库分表
linux·运维·服务器·数据库·mysql
才知道的32 分钟前
stm32F407学习DAY.27 ADC
stm32·嵌入式硬件·学习
蓦然乍醒34 分钟前
使用 DBeaver 还原 PostgreSQL 备份文件 (.bak) 技术文档
数据库·postgresql
XDHCOM35 分钟前
Redis节点故障自动恢复机制详解,如何快速抢救故障节点,确保数据不丢失?
java·数据库·redis
QCzblack37 分钟前
BugKu BUUCTF ——Reverse
java·前端·数据库
cyber_两只龙宝40 分钟前
【Oracle】Oracle之DQL中WHERE限制条件查询
linux·运维·数据库·云原生·oracle
Orange_sparkle41 分钟前
learn claude code学习记录-S02
java·python·学习
luis的妙妙屋41 分钟前
主流数据库数据类型对比分析
数据库